๐ก ๋ณธ ๋ฌธ์๋ '[Docker] docker ๋ด๋ถ nvidia gpu ์ฌ์ฉํ๊ธฐ(feat. nvidia-docker, NVIDIA Container Toolkit)'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
~~~์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1.
1) Installing the NVIDIA Container Toolkit
Installing with Apt
Configure the production repository:Optionally, configure the repository to use experimental packages:
$ sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Update the packages list from the repository:
$ sudo apt-get update
Install the NVIDIA Container Toolkit packages:
$ sudo apt-get install -y nvidia-container-toolkit
apt ์ธ์ yum, Dnf, Zypper ๋ฑ์ผ๋ก ์ค์นํ๊ณ ์ถ์ ๊ฒฝ์ฐ Installing the NVIDIA Container Toolkit๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
Configuration Prerequisites
- You installed a supported container engine (Docker, Containerd, CRI-O, Podman).
- You installed the NVIDIA Container Toolkit.
Configuring Docker
Configure the container runtime by using the nvidia-ctk command:The nvidia-ctk command modifies the /etc/docker/daemon.json file on the host. The file is updated so that Docker can use the NVIDIA Container Runtime.
$ sudo nvidia-ctk runtime configure --runtime=docker
Restart the Docker daemon:
$ sudo systemctl restart docker
container engine ์ผ๋ก docker ์ธ์ containerd๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Installing the NVIDIA Container Toolkit๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
2) Installing the nvidia-docker
Installing with Apt
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
gpgkey ์ ๋ ฅ ๋ฐ stable ์ ์ฅ์ ์ถ๊ฐ ํ
# apt-get update
# apt-get install nvidia-docker2 -y
# systemctl restart docker
์์ ๊ฐ์ด repository update ๋ฐ nvidia-docker2 ๋ฅผ ์ค์น ํ docker restart ํ ๊ฐ๋จํ๊ฒ ์ค์น๊ฐ ์๋ฃ ๋ฌ์ต๋๋ค.
2. nvidia-docker GPU ํ ๋นํ์ฌ ์ฌ์ฉ ํ๋ ๋ฐฉ๋ฒ 3๊ฐ์ง
1) NV_GPU
$ NV_GPU=0,1 nvidia-docker run -it nvcr.io/nvidia/tensorflow:20.12-tf1-py3
GPU ์ค์ 2๊ฐ๋ง ํ ๋นํ๊ธฐ ์ํด์๋ NV_GPU=0,1 ์ ์ต์ ์ ์ฌ์ฉํ์ฌ nvcr.io/nvidia/tensorflow:20.12-tf1-py3 ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ container์ ์ง์ ํ์ฌ ํ์ธ ํ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ค๋ฅธ ์ต์ ์ ์์๊น์? ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ GPU๋ฅผ ํ ๋นํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆด๊ป์.
2) NVIDIA_VISIBLE_DEVICES
$ docker run -it --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0,1 nvcr.io/nvidia/tensorflow:20.12-tf1-py3
runtime=nvidia๋ฅผ ์ฌ์ฉํ์ฌ -e ํ๊ฒฝ๋ณ์๋ก NVIDIA_VISIBLE_DEVICES=2,3 GPU ID ํน์ UUID๋ฑ์ผ๋ก ์ค์ ํ์ฌ GPU๋ฅผ ํ ๋น ํ์ค ์ ์์ต๋๋ค.
๊ธฐ์กด NV_GPU์๋ ๋ค๋ฅด๊ฒ nvidia-docker๋ก ์์ํ๋ ์ปค๋งจ๋๊ฐ ์๋ docker๋ก ์์ํ๋ command์ด๋ ์ ๊ธฐ์ตํด ๋์๊ธฐ ๋ฐ๋๋๋ค.
๋ํ ๋น๊ต๊ฐ ๋๊ธฐ ์ํด์ NV_GPU ์๋ ๋ค๋ฅธ GPU๋ฅผ ์ฌ์ฉํ์๋๋ฐ์. ์ NV_GPU ์ฌ์ง์์ Bus-Id์ ํ์ฌ NVIDIA_VISIBLE_DEVICES๋ฅผ ๋น๊ตํด ๋ณด์๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ GPU๋ฅผ ์ฌ์ฉํ๊ฑธ ์์ค ์ ์์ต๋๋ค.
3) --gpus
$ docker run -it --gpus '"device=0,1,2,3"' nvcr.io/nvidia/tensorflow:20.12-tf1-py3
๋ค์์ผ๋ก๋ gpus ์ต์
์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
gpus์ต์
์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์์ ๊ฐ์ด docker run์ผ๋ก ์์ํ๋๋ฐ์. --gpus ๋ค์ '"device="' ์ต์
์์๋ ํฐ ๋ฐ์ดํ์ ์์ ๋ฐ์ดํ๊ฐ ๋ฐ๋์ ํ์ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก GPU๋ฅผ ํ๋ฒ์ ๋ค ์ฌ์ฉํ๊ธฐ ์ํด์๋ --gpus all ์ด๋ผ๋ ์ต์ ์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ๋ชจ๋ GPU๋ฅผ ํ ๋นํ์ฌ ์ปจํ ์ด๋๋ก ์ง์ ํ๊ฒ ๋ฉ๋๋ค.
$ docker run -it --gpus all nvcr.io/nvidia/tensorflow:20.12-tf1-py3
NV_GPU ? NVIDIA_VISIBLE_DEVICES? gpus?
์ด์ nvidia gpu ํ ๋น์ ์ ํ์ค์ ์์ผ์คํ
๋ฐ์. NV_GPU์ NVIDIA_VISIBLE_DEVICES ๋ฐ gpus ์ฐจ์ด์ ์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ๊ถ๊ธํ์ ๋ถ๋ค์ด ์์ผ์คํ
๋ฐ์.nvidia-docker2๊ฐ ์ค์น๊ฐ ๋์ด ์๋ ์ํ์์๋ ์ด๋ ํ command๋ก๋ ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
๋ค๋ง ์ฐจ์ด์ ์ ์๋์ ๊ฐ์ต๋๋ค.
- NV_GPU = nvidia-docker
- NVIDIA_VISIBLE_DEVICES = nvidia-docker2
- gpus '"device="' = nvidia-docker2
nvidia-docker ๋ฒ์ ์ ์ฐจ์ด๊ธฐ ๋๋ฌธ์ ์์๋ฒ์ ์ ํ์ํธํ๋๊ธฐ ๋๋ฌธ์ ํธํ์ ์ปค๋งจ๋๋ฅผ ์ด์ฉํ์ ์ docker๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ
- [NVIDIA] Installing the NVIDIA Container Toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
- [Blog] nvidia-docker GPU ํ ๋นํ์ฌ ์ฌ์ฉ ํ๋ ๋ฐฉ๋ฒ 3๊ฐ์ง: https://kyumdoctor.co.kr/18