Nvidia Docker使用快速入門

Docker使用GPU簡介

在Docker中使用GPU是機器學習的常用場景,其中Nvidia GPU最常見。

在Docker中使用GPU CUDA的便捷之處是,其Ubuntu主機只要安裝Nvidia GPU的驅動,而各個Docker容器根據使用的深度學習的框架版本如TensorFlow,安裝各自不同的CUDA Toolkit版本,從而不相互衝突。

本文簡述在Ubuntu 18.04中,配置過程以及容器內的一些許可權配置。

Nvidia Docker的安裝

Nvidia Docker的官網為:
   https://github.com/NVIDIA/nvidia-docker

安裝流程如下:

  1. Ubuntu 18.04宿主機安裝 Nvidia驅動,https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#how-do-i-install-the-nvidia-driver
  2. Ubuntu 18.04宿主機安裝 Docker 19.03 (這是2019年要求的版本,Docker社羣版即可)
  3. 安裝nvidia-container-toolkit

# Add the package repositories $ 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 $ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit $ sudo systemctl restart docker

如何使用Nvidia Docker

在正常使用Docker命令後加--gpu引數即可,如:

docker run --gpus all tensorflow/tensorflow:1.15-gpu-py36 python

Docker容器內使用非root使用者

Docker容器內預設是root使用者,這樣會使容器內建立的檔案(使用-v對映卷時)也是root使用者,從而使用宿主機訪問這些檔案成問題。

使用如下命令達到兩個目的:

  • Docker容器內新增使用者ubuntu,並生成/home/ubuntu使用者的home目錄。
  • 授權ubuntu使用sudo許可權,不然無法使用pip、apt等安裝軟體。

useradd ubuntu && echo "ubuntu:ubuntu" | chpasswd && adduser ubuntu sudo

這樣啟動時就預設使用ubuntu使用者了。

非root使用者操作Docker

預設情況下,在宿主機需要使用root許可權來操作docker的,如:

sudo docker ps

原因是,Docker守護程式繫結到Unix套接字而不是TCP埠。預設情況下,Unix套接字是由root使用者擁有的,其他使用者只能使用sudo訪問它。 Docker守護程式始終以root使用者身份執行。

如果不想以sudo作為docker命令的開頭,建立一個名為docker的Unix group並將使用者新增到其中。 Docker守護程式啟動時,它將建立一個可由Docker group成員訪問的Unix套接字:

sudo groupadd docker sudo usermod -aG docker $USER

登出賬號重新登入即可生效,或使用如下更便捷的方式使上述更新生效。

newgrp docker

Docker一些常用操作

docker常用引數:

  • -it。互動式執行
  • -v <宿主機目錄>:<容器內目錄>。對映宿主機的卷給容器讀寫
  • -p <宿主機埠>:<容器內埠>。對映宿主機的埠給容器
  • --rm。執行完容器退出後直接刪除

docker常用操作:

  • docker commit <容器id> <映象名>。將容器儲存為映象。