-
docker 설치하고 jupyter notebook으로 tensorflow하기개발 환경/Docker 2020. 1. 12. 01:04반응형
로컬이 아닌 공동으로 사용하는 서버에서 딥러닝을 해야할 경우 버젼 충돌 문제가 발생하게 된다.
내가 사용하는 TF나 PyTorch 버젼이 다른 사람과 다르다면 docker를 사용하여 환경을 구축하는 것을 추천한다.1. 설치 (Ubuntu)
자동 설치 스크립트를 이용해서 설치!
curl -fsSL https://get.docker.com/ | sudo sh
2. root 권한 없이 docker 사용하기
docker는 root권한을 필요로해서 sudo를 추가해주고 비밀번호를 매번 요구한다. 귀찮으므로 없앤다.
sudo usermod -aG docker $USER
재부팅하면 적용완료.
3. 설치 확인
docker version
output:
Client: Docker Engine - Community Version: 19.03.4 API version: 1.40 Go version: go1.12.10 Git commit: 9013bf583a Built: Fri Oct 18 15:54:09 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.4 API version: 1.40 (minimum version 1.12) Go version: go1.12.10 Git commit: 9013bf583a Built: Fri Oct 18 15:52:40 2019 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683
만약 2번을 실행하고 재부팅을 하지 않았다면 Server 정보가 나오지 않는다.
4. Run TensorFlow 공식 이미지
docker run -it -p 8888:8888 tensorflow/tensorflow
아마 tensorflow/tensorflow docker이미지가 없을것이기 때문에 설치를 장시간 진행할 것이다. tensorflow/tensorflow 이미지는 tensorflow cpu 버전이며 원래는 jupyter notebook이 자동으로 실행된다고 했는데 나는 이상하게 안됐다...
$ docker run -it -p 8888:8888 tensorflow/tensorflow ________ _______________ ___ __/__________________________________ ____/__ /________ __ __ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / _ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / /_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/ WARNING: You are running this container as root, which can cause new files in mounted volumes to be created as the root user on your host machine. To avoid this, run the container by specifying your user's userid: $ docker run -u $(id -u):$(id -g) args... root@ae73f71e625d:/#
이런식으로 실행이 되고 터미널이 떴다.
이후 jupyter notebook을 실행해보았다.
root@ae73f71e625d:/# jupyter notebook bash: jupyter: command not found
하지만 없단다. 그래서 설치를 해줬다.
pip install jupyter notebook
참고로 python 버전은 2.7이다. jupyter notebook 설치 이후 실행해보았다.
socket.error: [Errno 99] Cannot assign requested address
머라머라 에러가 난다. 위에서 pip를 업그레이드 하라는 경고를 줬기때문에 업그레이드해줬다. 하지만 그래도 에러가 난다. 아마 업데이트를 해줘야하는듯하다.
apt-get update
docker에서 터미널에 sudo를 치면 없는 명령어라고 하더라. 그래도 안되서 찾아보니깐 local에서 실행 안해서 IP가 안맞는다뭐라나... 결론은 이거다
jupyter notebook --ip=0.0.0.0 --allow-root
output:
[I 05:01:58.014 NotebookApp] Serving notebooks from local directory: / [I 05:01:58.014 NotebookApp] The Jupyter Notebook is running at: [I 05:01:58.014 NotebookApp] http://(ae73f71e625d or 127.0.0.1):8888/?token=54bc8c34b32e8fa4d3227284afe146c779f9327be4107b52 [I 05:01:58.014 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [W 05:01:58.020 NotebookApp] No web browser found: could not locate runnable browser. [C 05:01:58.020 NotebookApp] To access the notebook, open this file in a browser: file:///root/.local/share/jupyter/runtime/nbserver-411-open.html Or copy and paste one of these URLs: http://(ae73f71e625d or 127.0.0.1):8888/?token=54bc8c34b32e8fa4d3227284afe146c779f9327be4107b52
이렇게 마지막에 URLs를 알려주는데 주소에 or이 있다. http://127.0.0.1:8888/?token=54bc8c34b32e8fa4d3227284afe146c779f9327be4107b52 와 같이 앞부분 없애고 실행하니 정상작동한다.
휴...
5. TensorFlow hello world 예제
import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() print(sess.run(hello))
별 생각없이 실행했더니 Session()이 없는 거란다. 그렇다 tensorflow 2.0이다.(안써봄 ㅎ)
공홈에서 예제를 가져왔다.
import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test, verbose=2)
output:
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 11493376/11490434 [==============================] - 1s 0us/step 11501568/11490434 [==============================] - 1s 0us/step Train on 60000 samples Epoch 1/5 60000/60000 [==============================] - 13s 216us/sample - loss: 0.2952 - accuracy: 0.9141 Epoch 2/5 60000/60000 [==============================] - 11s 181us/sample - loss: 0.1423 - accuracy: 0.9574 Epoch 3/5 60000/60000 [==============================] - 11s 188us/sample - loss: 0.1058 - accuracy: 0.9686 Epoch 4/5 60000/60000 [==============================] - 11s 191us/sample - loss: 0.0855 - accuracy: 0.9735 Epoch 5/5 60000/60000 [==============================] - 13s 217us/sample - loss: 0.0734 - accuracy: 0.9766 10000/1 - 1s - loss: 0.0362 - accuracy: 0.9782 [0.07176612680561374, 0.9782]
잘된다.
6. Docker container commit하기
기껏 jupyter notebook 다 설치했는데 날릴 수 없다. 그러므로 docker 종료 전에 이미지에 commit해서 변경사항을 등록해줘야한다.
docker images
를 입력해 이미지를 확인하면
output:REPOSITORY TAG IMAGE ID CREATED SIZE tensorflow/tensorflow latest d64a95598d6c 2 weeks ago 1.03GB
와 같은 식으로 이미지의 내용이 출력된다. commit을 하기 위해서는 container의 ID가 필요하다. 아래의 명령어를 사용하면 알 수 있다.
docker ps -a
output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ae73f71e625d tensorflow/tensorflow "/bin/bash" About an hour ago Up About an hour 0.0.0.0:8888->8888/tcp pensive_buck f585a03cd7ae tensorflow/tensorflow "/bin/bash" 19 hours ago Exited (0) 19 hours ago wizardly_haslett
복잡해 보이지만 첫번재 있는게 container ID다. 복사한후
docker commit ae73f71e625d tensorflow/tensorflow
output:
sha256:b47a8c553c49e9f8db060811feba1ad69725390580f1112a37d68927d7b2938c
라는 결과를 볼 수 있다.
다시
docker images
를 입력하면
output:REPOSITORY TAG IMAGE ID CREATED SIZE tensorflow/tensorflow latest b47a8c553c49 8 seconds ago 1.15GB tensorflow/tensorflow <none> d64a95598d6c 2 weeks ago 1.03GB
를 얻을 수 있고, 8초전에 하나 추가되었다. SIZE가 증가한거 보니 제대로 된거 같다. 귀찮아서 테스트 안해본건 아니다.
출처:
http://moducon.kr/2018/wp-content/uploads/sites/2/2018/12/leesangsoo_slide.pdf
https://www.tensorflow.org/install/docker?hl=ko
https://www.tensorflow.org/tutorials/quickstart/beginner
https://pbj0812.tistory.com/134
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
https://nicewoong.github.io/development/2018/03/06/docker-commit-container/반응형'개발 환경 > Docker' 카테고리의 다른 글
Mac + Docker 에서 GUI 사용하기 (python matplotlib 사용하기) (5) 2020.02.23 Docker + Pytorch + GPU로 딥 러닝 개발하기 (2) 2020.02.18 Docker로 딥러닝하기 (Pytorch) (0) 2020.01.21 docker pytorch image 이용해서 pytorch 사용하기 (0) 2020.01.21 docker 볼륨 공유 (0) 2020.01.12