Je veux essayer l'apprentissage automatique → Tensorflow, non? Je veux l'essayer de manière interactive sur le Web → Jupyter, non? Je veux construire une infrastructure facilement → Docker, non? Alors je l'ai essayé, mais je suis resté coincé dans où définir le mot de passe, donc j'écrirai la solution
Ceux qui postulent à ce qui suit
――Je suis ingénieur infrastructure, mais je veux essayer l'apprentissage automatique --Docker je l'ai touché récemment, mais je ne connais pas les détails --Python je le touche un peu, mais je ne sais pas grand chose --Jupyter Est-ce que ça va? Je ne sais pas
En gros, j'aimerais l'essayer avec mon MacBook Air, mais je n'ai évidemment pas assez de ressources. Donc, si vous voulez le faire fermement, la meilleure solution est sur le cloud comme AWS ou GCP. Je veux le frapper localement, puis l'amener dans le cloud, donc la chose la plus simple et la plus populaire est Docker. Construire un Jupyter est un problème, il est donc très facile d'utiliser un conteneur qui contient tout. (Si vous essayez de le mettre dans Ansible ou Chef, il restera bloqué de différentes manières ...)
Tout d'abord, récupérez l'image. Il existe différents types d'images Jupyter ci-dessous, alors choisissez-en une en fonction de votre objectif. https://github.com/jupyter/docker-stacks
Je veux utiliser tensorflow cette fois, je vais donc utiliser ce qui suit. https://github.com/jupyter/docker-stacks/tree/master/tensorflow-notebook
docker pull tirons
$ docker pull jupyter/tensorflow-notebook
Unable to find image 'jupyter/tensorflow-notebook:latest' locally
latest: Pulling from jupyter/tensorflow-notebook
75a822cd7888: Pulling fs layer 
f74dd7a42a1f: Pulling fs layer 
7b03c47d9699: Pull complete 
ecef67eb4d88: Pull complete 
bd6c8cee2aa9: Pull complete 
8ecf884c467a: Pull complete 
7dc68d7c7ffd: Pull complete 
3369a456e292: Pull complete 
e626c4a34300: Pull complete 
619d5c673fb7: Pull complete 
eff746881b74: Pull complete 
fae5187ea9e1: Pull complete 
e1fd76e4adb2: Pull complete 
b5d2ba91f6a5: Pull complete 
5804e217f19f: Pull complete 
7719a427e59f: Pull complete 
33ea9d473883: Pull complete 
d28a865b24f6: Pull complete 
7e2fa13ce090: Pull complete 
15b63cba13fd: Pull complete 
adcb147a9782: Pull complete 
ce56ab01574f: Pull complete 
aa6a6ae0b01e: Pull complete 
2c54a9d73fcd: Pull complete 
47c2872f3870: Pull complete 
Digest: sha256:dd7b9e81c167647a87300043f21e3b37eee6d463815b86db9976c299cd4cc046
Status: Downloaded newer image for jupyter/tensorflow-notebook:latest
101e77006b40935607969dbad87e4540719ec55e66168d507f0ea8bb04ffe713
Vous pouvez obtenir une erreur comme indiqué ci-dessous.
$ docker pull jupyter/tensorflow-notebook
Unable to find image 'jupyter/tensorflow-notebook:latest' locally
latest: Pulling from jupyter/tensorflow-notebook
75a822cd7888: Pulling fs layer 
f74dd7a42a1f: Pulling fs layer 
f74dd7a42a1f: Pull complete 
ecef67eb4d88: Download complete 
bd6c8cee2aa9: Download complete 
8ecf884c467a: Download complete 
7dc68d7c7ffd: Download complete 
3369a456e292: Download complete 
e626c4a34300: Download complete 
619d5c673fb7: Download complete 
eff746881b74: Download complete 
fae5187ea9e1: Download complete 
e1fd76e4adb2: Download complete 
b5d2ba91f6a5: Downloading 96.62 MB/660.8 MB
5804e217f19f: Download complete 
7719a427e59f: Downloading 126.5 MB/281.6 MB
33ea9d473883: Download complete 
d28a865b24f6: Downloading 314.1 MB/314.1 MB
7e2fa13ce090: Waiting 
15b63cba13fd: Waiting 
adcb147a9782: Waiting 
ce56ab01574f: Waiting 
aa6a6ae0b01e: Waiting 
2c54a9d73fcd: Waiting 
47c2872f3870: Waiting 
docker: write /var/lib/docker/tmp/GetImageBlob222925529: no space left on device.
See 'docker run --help'.
La cause est que l'image est d'environ 5G, il semble donc que la capacité soit insuffisante. Donc, si vous supprimez d'autres images, c'est OK (le style neuronal est trop grand)
$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
poppen/trusty-ansible-serverspec   latest              e84a5c7341fd        10 weeks ago        691 MB
flyinprogrammer/serverspec         latest              1b34b62345b3        12 weeks ago        154.4 MB
somatic/torch-fast-neural-style    latest              97645d9c69e8        3 months ago        7.323 GB
amazon/amazon-ecs-agent            latest              a76825ffa321        3 months ago        10.84 MB
elenaalexandrovna/opencv-python3   latest              910fcd0fa477        4 months ago        594.7 MB
trafferty/docker-ipython-opencv    latest              686f355ae522        19 months ago       8.676 GB
$ docker rmi a76825ffa321 910fcd0fa477 97645d9c69e8
Untagged: amazon/amazon-ecs-agent:latest
Untagged: amazon/amazon-ecs-agent@sha256:391a45a5b69a8d9fe1844310c4cf90e82e31cb167a93eb94d5a49b2b2456ad46
Deleted: sha256:a76825ffa321686b2df70a0be52fe5ecd52006a347cee5f07635b188655a5e86
...
$ docker run -it --rm -p 8888:8888 jupyter/tensorflow-notebook
1b11efc02512ab60a26909ced181a16e01db57160607bb5c54c2acacae30a20b
$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
fb31e1a2fda1        jupyter/tensorflow-notebook   "tini -- start-notebo"   6 seconds ago       Up 1 seconds        0.0.0.0:8888->8888/tcp   thirsty_kilby
À ce rythme, même si vous accédez à http: // localhost: 8888, vous ne regarderez que l'écran de mot de passe.
Lancer bash dans un conteneur avec docker exec
$ docker exec -it fb31e1a2fda1 /bin/bash
Exécutez-le à partir de python, saisissez le mot de passe que vous souhaitez définir deux fois et obtenez la valeur de hachage du mot de passe. Dans l'exemple ci-dessous, la valeur de hachage est sha1: hogehoge: fugafuga.
< python -c 'from notebook.auth import passwd;print(passwd())'               
Enter password: 
Verify password: 
sha1:hogehoge:fugafuga
jovyan@fb31e1a2fda1:~/work$ exit
exit
Si vous attachez le docker, il s'attachera à l'entrée / sortie standard de start-notebook.sh qui est exécutée au démarrage du conteneur, et vous ne pouvez pas taper de commandes python.
$ docker attach fb31e1a2fda1
★ Je ne peux exécuter aucune commande (en regardant simplement le journal)
ç^C[I 13:28:14.809 NotebookApp] Interrupted...
[I 13:28:14.810 NotebookApp] Shutting down kernels
$ 
Supprimer ce conteneur car il n'est plus utilisé
$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                     NAMES
fb31e1a2fda1        jupyter/tensorflow-notebook   "tini -- start-notebo"   10 minutes ago      Up 10 minutes       0.0.0.0:32768->8888/tcp   tender_snyder
$ docker stop fb31e1a2fda1
fb31e1a2fda1
$ docker rm fb31e1a2fda1
fb31e1a2fda1
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Enfin, démarrez le conteneur avec le mot de passe défini Mettez la valeur de hachage que vous avez obtenue précédemment, sha1: hogehoge: fugafuga, dans la valeur de l'option NotebookApp.password dans start-notebook.sh et exécutez-la.
docker run -d -p 8888:8888 jupyter/tensorflow-notebook start-notebook.sh --NotebookApp.password='sha1:hogehoge:fugafuga'
Vous pouvez maintenant accéder à http: // localhost: 8888 et saisir le mot de passe que vous avez défini ci-dessus pour vous connecter. Après cela, veuillez jouer avec MNIST.
Vous pouvez utiliser la commande openssl, non? J'ai fait ce qui suit, mais ça n'a pas fonctionné
$ echo [password] | openssl sha1
Je pensais que sha1 était sha1, mais pourquoi? Le format est-il différent?
Recommended Posts