快速安裝深度學習系統 Ubuntu20.04 tensorflow 2.7.0
程式日新月異,nvidia-docker的版本也變化很快,如今都已經改名成nvidia container tookit了,有看過小編的文章應該有印象之前有介紹過nvidia-docker 一款非常好搭建環境的軟體,從前要安裝cuda、cudnn各式各樣的環境,如今只要安裝一款docker所有事情就都解決了,甚至也可以用vs code 在container中 debug,想要學習的話繼續看下去吧
快速搭建Tensorflow深度學習環境–Nvidia-docker
一.安裝nvidia container toolkit(舊名nvidia-docker)
安裝nvidia-docker 只要照著官網的步驟走很快就可以完成了,首先要注意官網支持的linux版本,小編是安裝最新的Ubuntu20.04 Long term support(LTS)版本
然後就跟著官網的步驟走就可以了
#step1 sudo apt-get install curl #step2 curl https://get.docker.com | sh \ && sudo systemctl --now enable docker #step3 distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list #step4 curl -s -L https://nvidia.github.io/nvidia-container-runtime/experimental/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list #step5 sudo apt-get update #step6 sudo apt-get install -y nvidia-docker2 #step7 sudo systemctl restart docker #step8 sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
如果最後有跑出如下畫面就代表成功安裝了
- 讓使用docker 不用sudo
使用docker的時候通常都要加上最高權限才可以使用,若不想每次都sudo並打密碼的話可以打如下指令,把現在的使用者加進docker中
sudo groupadd docker
sudo usermod -aG docker $USER
二.安裝tensorflow docker image
再來就可以上docker hub上Tensorflow的官網抓取image了,抓取指令如下
docker pull image_name
舉例說明,假設小編想要抓2.7.0 GPU版本的tensorflow,那就可以打成如下指令,冒號後面代表tag的編碼
docker pull tensorflow/tensorflow:2.7.0-gpu
抓完後就可以打指令看看image有沒有抓下來
三.實際使用安裝的環境跑深度學習程式碼
要測試的程式碼如下,是mnist的分類網路,首先把下列程式碼寫成 learn_mnist.py 檔案,接下來要把程式碼跑在visual studio code中,然後使用docker的環境來跑
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)
首先安裝visiual studio code
然後安裝python 擴充包 以及docker 擴充包
之後按F1,加入Dockerfile,並將Dockerfile的image改成上述下載的tensorflow2.7.0
具體操作可以參考Docker VSCode Python Tutorial ▶️ Run your App in a Container
之後就可以build image然後享受在container中debug了,下圖是build完執行後的結果
docker run image 基本教學
docker run -it –gpus all -v source_file:container_file image_name /bin/bash
- -it: 開啟交互模式
- –gpus all: 開啟GPU模式
- -v: 將local的檔案映射到container中
- /bin/bash: 可以深入到container中使用
create image 基本教學
docker build -t image_name .
-
FROM: 使用到的 Docker Image 名稱,今天使用 tensorflow/tensorflow:2.7.0-gpu
-
MAINTAINER: 用來說明,撰寫和維護這個 Dockerfile 的人是誰,也可以給 E-mail的資訊
-
RUN: RUN 指令後面放 Linux 指令,用來執行安裝和設定這個 Image 需要的東西
-
ADD: 把 Local 的檔案複製到 Image 裡,如果是 tar.gz 檔複製進去 Image 時會順便自動解壓縮。Dockerfile 另外還有一個複製檔案的指令 COPY 未來還會再介紹
-
ENV: 用來設定環境變數
-
CMD: 在指行 docker run 的指令時會直接呼叫開啟 Tomcat Service
以下是我的docker file
# For more information, please refer to https://aka.ms/vscode-docker-python FROM tensorflow/tensorflow:2.7.0-gpu # Keeps Python from generating .pyc files in the container ENV PYTHONDONTWRITEBYTECODE=1 # Turns off buffering for easier container logging ENV PYTHONUNBUFFERED=1 # Install pip requirements COPY requirements.txt . RUN python -m pip install -r requirements.txt WORKDIR /app COPY . /app # Creates a non-root user with an explicit UID and adds permission to access the /app folder # For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app USER appuser # During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug CMD ["python", "learn_mnist.py"]
四.參考資料
https://philipzheng.gitbooks.io/docker_practice/content/image/create.html
https://ithelp.ithome.com.tw/articles/10191016
https://joshhu.gitbooks.io/dockercommands/content/index.html
http://www.runoob.com/docker/docker-command-manual.html
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html