-
๋ฐ์ํ
์ด์ ํฌ์คํธ์์ mmsegmentation ๋ฒ์ ๋ฌธ์ ๊ฐ ์์๋ค.
๊ทธ๋ฌ๋๊น Github ๋ ํฌ์งํ ๋ฆฌ์ ์ด๋ค ์ฝ๋๋ฅผ ์คํ์์ผ์ผ ํ๋๋ฐ PyTorch 1.x.0๊ณผ Cuda 11.6 ๋ฒ์ ๋ง์ ์ง์ํ๋ ์ฝ๋์๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฒ(base machine)์ ์ค์น๋ cuda ๋ฒ์ ์ 12.1์ด์๊ธฐ ๋๋ฌธ์ ํธํ๋๋ Pytorch ๋ฒ์ ๋ 2.0.1 ์ด์ด์ ๋๋ค ์์กด์ฑ ๋ฌธ์ ๊ฐ ์์๋ค.
Base machine cuda, torch ๋ฒ์
์์ผ๋ก๋ ํ๋ก์ ํธ ๋ณ๋ก cuda ๋ฒ์ ์ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๋ ์ผ์ด ๋ฒ๋ฒ์ด ๋ฐ์ํ ๊ฒ ๊ฐ์์ ํด๊ฒฐ์ฑ ์ผ๋ก docker๋ฅผ ์ฌ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.๋์ปค๋ ์ปจํ ์ด๋๋ณ๋ก ๋ค๋ฅธ ๋ฒ์ ์ cuda๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , base machine์ GPU๋ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ Docker Hub์์ ์ํ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ Pullํด์ ์ฌ์ฉํ๊ณ ์ถ๊ฐ๋ก ๋ด๊ฐ ์ค์นํ๊ณ ์ถ์ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ด๋ฅผ ์ ์ฅํด๋์ ์ ์๋ค.
์ ๋ง ํธ๋ฆฌํ๋ฐ ์ ์ด์ ๊ป ์ฌ์ฉ ์ํ๋ ์ถ๋ค.
์ค์น
๋์ ํ๊ฒฝ
- Linux OS Ubuntu 20.04
- Architecture: x86_64
1. GPU driver ์ฐ๊ฒฐ
๋์ปค๊ฐ NVIDIA GPU๋ฅผ ์ธ์ํ ์ ์๋๋ก NVIDIA Container Toolkit์ ์ด์ฉํด์ ์ฐ๊ฒฐํด์ฃผ๋ ์์ ์ด๋ค.
NVIDIA Container Toolkit์ ์๋์ผ๋ก base machine์ GPU ๋๋ผ์ด๋ฒ๋ฅผ ์ธ์ํ์ฌ docker container๊ฐ ์คํ๋๋ฉด ์ฐ๊ฒฐ์์ผ์ค๋ค.
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation
Install an NVIDIA GPU Driver if you do not already have one installed. You can install a driver by using the package manager for your distribution, but other installation methods, such as downloading a .run file intaller, are available. Refer to the NVIDIA
docs.nvidia.com
๋งํฌ๋ฅผ ๋ฐ๋ผ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฐจ๋ก๋๋ก ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
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
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
2. ์ด๋ฏธ์ง ๋ค์ด๋ก๋
์์์ ์ปจํ ์ด๋๋ฅผ ์ค์นํ๋ค๋ฉด NVIDIA์์ ๊ณต์์ ์ผ๋ก ์ง์ํ๋ Docker Hub์์ ํ์ํ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์.
Docker Hub: https://hub.docker.com/r/nvidia/cuda
๋๋ Cuda 11.1์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด์ ํด๋นํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์๋ค. Tags ํญ์์ ์ํ๋ cuda ๋ฒ์ ์ ๊ฒ์ํ๋ฉด ์ฌ๋ฌ ์ด๋ฏธ์ง๋ค์ด ๋์ค๋๋ฐ, ๋๋ 11.6.1-cudnn8-runtime-ubuntu20.04 ์ด๋ฆ์ ํ๊ทธ๋ฅผ ๋ค์ด๋ฐ์๋ค.
์๋๋ [CUDA๋ฒ์ ]-cudnn[๋ฒ์ ]-devel-[์ฌ์ฉํ OS] ์ด๋ ๊ฒ cudnn๊ณผ devel์ด ๋ค์ด๊ฐ ํ๊ทธ๋ฅผ Pull ํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋์ค์ ์์์ง๋ง ์ผ๋จ runtime์ผ๋ก ๋จผ์ ์๋ํด๋ณด๊ธฐ๋ก..
3. ์ปจํ ์ด๋ ์คํ
๋์ปค๋ ์ํํธ์จ์ด ํ๊ฒฝ์ '์ด๋ฏธ์ง'๋ก ์บก์ํํ ๊ฒ์ธ๋ฐ, ์ด ์ด๋ฏธ์ง๋ฅผ ์ค์ ๋ก ์คํํ๋ ์ฅ์๋ฅผ 'container'๋ผ๊ณ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ปจํ ์ด๋๋ ์ผ์์ ์ด๋ฉฐ ์คํ ์ค์ ์ถ๊ฐ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ์ง ์์ผ๋ฉด ์ข ๋ฃ ์์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์ฌ๋ผ์ง๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ commit์ ํด์ค์ผ ํ๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ํด์คฌ๋ค๋ฉด docker images๋ฅผ ํ์ฌ ๋ค์ด๋ฐ์ ์ด๋ฏธ์ง(nvidia/cuda)๋ฅผ ๋ณผ ์ ์๋ค.
์ปจํ ์ด๋ ์คํ
docker run -it --gpus all --name [์ปจํ ์ด๋์ด๋ฆ] nvidia/cuda:11.6.1-cudnn8-runtime-ubuntu20.04 bash
- -it: ํฐ๋ฏธ๋ ์ ๋ ฅ์ ์ํ ์ต์ , -i(interactive mode)์ -t(TTY)๋ฅผ ๋์์ ํ์ฑํํ ๊ฒ
- --gpus all: base machine์ ๋ชจ๋ GPU๋ฅผ ์ปจํ ์ด๋์ ํ ๋นํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํจ
- --name: ์ปจํ ์ด๋์ ์ด๋ฆ ์ง์
์ปจํ ์ด๋ ์ํ๋ฅผ ์๋ก์ด ์ด๋ฏธ์ง๋ก ์ปค๋ฐ
docker commit [Container์ด๋ฆ] [์ด๋ฏธ์ง์ด๋ฆ]
์ปจํ ์ด๋ ๋ด๋ถ์์ ์ค์น ๋ฐ ์ค์ ์์ ์ ๋ง์น ํ, ๋ค๋ฅธ ํฐ๋ฏธ๋์์ ์ปจํ ์ด๋๋ฅผ ์ปค๋ฐ(์ ์ฅ)ํ๋ค. (์๋ก์ด ํฐ๋ฏธ๋ ์ฐฝ์ ์ด๊ณ ์ปค๋ฐ)
[Container์ด๋ฆ], [์ด๋ฏธ์ง์ด๋ฆ]์๋ ๊ฐ๊ฐ, ๋ฐฉ๊ธ์ docker run ํ ๋ ์ค์ ํ๋ container ์ด๋ฆ(ํ์ฌ ์์ ์ค์ธ ์ปจํ ์ด๋ ์ด๋ฆ)๊ณผ, ๋ณ๊ฒฝ๋ ์ฌํญ์ ์๋ก์ด ์ด๋ฏธ์ง๋ก ์ ์ฅํ ๋ ์ฌ์ฉํ ์ด๋ฏธ์ง ์ด๋ฆ์ ์จ์ฃผ๋ฉด ๋๋ค.
์ปค๋ฐ๋ ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋ ์คํ
docker run -it --gpus all [container์ด๋ฆ] cuda116 zsh
Docker ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ข ๋ฃ๋๋๋ผ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์งํ๋ค. ์คํ ์ค์ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ด๋ฃจ์ด์ง ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ(์: ํ์ผ ์์ฑ, ํจํค์ง ์ค์น ๋ฑ)์ ์ปจํ ์ด๋๋ฅผ ๋น ์ ธ๋์ค๋๋ผ๋(exit) ์ ์ง๋๋ค!
๋ค์์ ๋์ผํ ์ปจํ ์ด๋๋ฅผ ์์ํ ๋, ๋ง์ง๋ง์ผ๋ก ์ข ๋ฃ๋ ์ํ๋ก ์์๋๋ค. ๋ฐ๋ผ์ ๋งค๋ฒ ์์ ์ฌํญ์ด ์๊ธธ๋๋ง๋ค ์ปค๋ฐํ ํ์ ์์ด ์ต์ข ๋ฐฐํฌํ ๋๋ง ์๋ก์ด ์ด๋ฏธ์ง๋ก ์ปค๋ฐํด๋ ๋๋ค โฟหโกหโฟ
์ค์ง๋ ์ปจํ ์ด๋ ๊ด๋ฆฌํ๊ธฐ
1. ๋ชจ๋ ์ปจํ ์ด๋ ๋ชฉ๋ก ํ์ธ
: ๋ชจ๋ ์ปจํ ์ด๋(์คํ ์ค ๋ฐ ์ข ๋ฃ๋ ๊ฒ ํฌํจ)๋ฅผ ํ์ธํ๋ค.
docker ps -a
2. ์ค์ง๋(exitํ) ์ปจํ ์ด๋ ๋ค์ ์์
docker start [Container์ด๋ฆ]
3. ์คํ์ค์ธ ์ปจํ ์ด๋ ์ ์
docker exec -it [Container์ด๋ฆ] zsh
4. ์ปจํ ์ด๋ ์ค์ง ์์ด ๋น ์ ธ๋์ค๊ธฐ
:์ปจํ ์ด๋๋ฅผ ์ค์งํ์ง ์๊ณ ๋น ์ ธ๋์ค๋ ค๋ฉด Ctrl + P, Ctrl + Q๋ฅผ ์ฐจ๋ก๋ก ๋๋ฅธ๋ค.
5. ๊ธฐ์กด ์ปจํ ์ด๋ ์ญ์ ๋ฐ ์ฌ์ฌ์ฉ
- ๋ชจ๋ ์ปจํ ์ด๋ ์ค์ง(exit)
docker stop $(docker ps -aq)
- ๋ชจ๋ ์ปจํ ์ด๋ ์ญ์
docker rm $(docker ps -aq)
๊ธฐํ ์ ์ฉํ ๋ช ๋ น์ด
1. ์ด๋ฏธ์ง ๋ชฉ๋ก ํ์ธ: docker images
2. ํ์ฌ ์คํ์ค์ธ ์ปจํ ์ด๋ ํ์ธ: docker ps
3. ์ค์ง๋ ์ปจํ ์ด๋๋ ํฌํจํด์ ํ์ธ: docker ps -a
4. ํน์ ์ปจํ ์ด๋ ๋ก๊ทธ ํ์ธ: docker logs [Container์ด๋ฆ]
5. ์ฌ์ฉ์๋ฅผ Docker ๊ทธ๋ฃน์ ์ถ๊ฐ
- ํ์ฌ ์ฌ์ฉ์๋ฅผ docker ๊ทธ๋ฃน์ ์ถ๊ฐํ๋ฉด, sudo ์์ด๋ docker ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๋ค.
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker # ์ด์ sudo ์์ด docker ๋ช ๋ น์ด ์ฌ์ฉ๊ฐ๋ฅํ์ง ํ์ธ docker ps
6. ํธ์คํธ ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ Docker ์ปจํ ์ด๋๋ก ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ
docker cp [ํธ์คํธ๋ฐ์ดํฐ๊ฒฝ๋ก] [CONTAINER ID]:/container/path # ์ฌ๊ธฐ์ /container/path๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํจ
7. Docker ์ปจํ ์ด๋ ํ์ผ์ ํธ์คํธ ์์คํ ์ผ๋ก ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ
docker cp [CONTAINER ID]:/container/path [ํธ์คํธ๋ฐ์ดํฐ๊ฒฝ๋ก]
์ฐธ๊ณ ๋ธ๋ก๊ทธ
'Computer Science > ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Error response from daemon: conflict: unable to delete - image has dependent child images (0) 2024.07.09 VSCode์์ Docker Container์ Remote๋ก ์ฐ๊ฒฐํ๊ธฐ (0) 2024.06.06 ModuleNotFoundError: No module named 'mmcv._ext' (0) 2024.05.25 tensorflow v1 (1) 2024.04.23