[docker] ๋์ปค๐ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๊ธฐ
๋ฏธ๋ฃจ๊ณ ๋ฏธ๋ฃจ๋ Docker.. ์ด์ ํผํ ์ ์์ด์ ๊ณต๋ถ๋ฅผ ํด๋ณด์๋ค. ๋ญ ๋ค๋ค docker ๋ง์ด ๋ค์ด๋ณด์๊ตฌ, ์ฌ๋ฌ ๋ธ๋ก๊ทธ์์ ์์ธํ ์ฝ๊ฒ ์ค๋ช ํด์ฃผ๊ธฐ ๋๋ฌธ์! ์ค๋ช ์ PASS~ ๋๋ ๋ฐ๋ก ์ด๋ป๊ฒ ํ๋ฉด ์ฝ๊ณ ๋น ๋ฅด๊ณ ์๋ฌ ์ต๋ํ ์์ด ์ค์น ํ ์ ์์์ง ์ ๋ฆฌํด๋ณด์๋ค. ํํ ์ฌ๋ฌ ์๋ฌ์ฌํญ์ ๊ฑฐ์น๋ฉด์ ์ฑ๊ณตํ์ผ๋, ์ ๋ฐ๋ผํ๋ฉด ๋น์ ๋ docker ๋ง์คํฐ~
์ฐจ๊ทผ์ฐจ๊ทผ ํด๋ณด์!
0. docker ์ค์น
๋จผ์ ๊ฐ์ฅ ์ต์ ์ํ๋ก ๋ง๋ค์ด์ฃผ๊ธฐ ์ํด apt๋ฅผ ์ ๋ฐ์ดํธ ํด์ค๋ค.
## ์
๋ฐ์ดํธ์ ์ฌ์ ์ค์น
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker repository key ์ถ๊ฐํ๋ ๋ช
๋ น์ด
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
## Docker repository๋ฅผ Add ํ๋ค.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
## ์์คํ
์ ์ต์ ์ผ๋ก ํ๊ธฐ ์ํ ๋ค์ ์
๋ฐ์ดํธ์ ์
๊ทธ๋ ์ด๋
sudo apt update
sudo apt upgrade
์ด์ ๋์ปค๋ฅผ ์ค์นํด ์ค๋ค!
sudo apt install docker-ce
์ค์น๋ ๋ฒ์ ํ์ธ ๋ช ๋ น์ด
apt-cache policy docker-ce
๋์ปค๊ฐ ์ ์ค์น ๋์๋์ง ์๋๋ช ๋ น์ด๋ก ํ์ธํด๋ณด๋ฉด
sudo systemctl status docker
๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค ๊ทธ๋ผ ์ฑ๊ณต!
Docker๊ฐ ์คํ ๋๊ณ ์์ ๊ฒฝ์ฐ Docker0๋ผ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ ์์ฑ๋๋๊น ifconfig ๋ก ํ์ธํด๋ณด์ docker0 ๊ฐ ์์ฑ๋ ๊ฒ์ ํ์ธ!
์ด์ ๋์ปค๋ฅผ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค~ ใ ใ
1. docker login
๋์ปค ์ค์น๋ฅผ ํ๋ค๋ฉด, ์๋ docker ์ฌ์ดํธ์์ ํ์๊ฐ์ ์ ํด์ค๋ค.
๋ค์์, ubuntu ์์ ๋ก๊ทธ์ธ ํด์ฃผ๊ธฐ! ๋ช
๋ น์ด๋ docker login
๋ก๊ทธ์ธ๋ถํฐ ์๋ฌ๊ฐ๋ฌ๋ค! ์ด๋ด์ค ์์์ง~!
์ผ๋จ ๋๋ ์๋ ๋ช ๋ น์ด๋ก ํด๊ฒฐ์ด ๋์๋ค.
sudo apt install gnupg2 pass
์ง์~ ๋ก๊ทธ์ธ ์ฑ๊ณต!
2. nvidia-docker ์ค์น
docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ ์, ๋ด ํ์ผ์ด ์ด๋คํ๊ฒฝ์์ ๋์๊ฐ์ผ ํ๋์ง ์์์ผ ํ๋ค.
๋๋ python ํ์ผ์ ๋๋ฆฌ๋๋ฐ GPU ๋ฅผ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ cuda, cudnn, ubuntu ๋ฒ์ ์ด ํ์ํ๋ค. ์ฆ, GPU ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Docker ์ ์ค์นํ ํ nvidia-docker ์ด๋ ๊ฒ๋ ์ค์นํด์ฃผ์ด์ผ ํ๋ค.
์ค์น๋ ์๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ์คํํ์!
์ ๊น~ ๋ ํ๋์ฉ ํ๊ธฐ ๊ท์ฐฎ์์ ํ๋ ์ฌ๋์ 1) ~3) ํ๋ก์ธ์ค๋ฅผ 0) ํ๋ฒ๋ง ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ใ ใ ๋๋ ๋ฌด์์์ ํ๋์ฉ ํด๋ด
0) 1), 2), 3) ๋ช ๋ น์ด๋ฅผ ํ๋ฒ์ ๋๋ฆฌ๋ ๋ช ๋ น์ด! ์ด๊ฑฐ ํ ๋ค์์ 4)๋ก ๊ฐ์ธ์~
$ 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
์ฐจ๊ทผ์ฐจ๊ทผ ํ๊ณ ์ถ์ด์~ ํ๋ ์ฌ๋์ ์ฌ๊ธฐ์๋ถํฐ ์ญ ํ๋ฉด ๋ฉ๋๋ค!
1)
curl -s -L <https://nvidia.github.io/nvidia-docker/gpgkey> | \\
sudo apt-key add -
2)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
3)
curl -s -L <https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list> | \\
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
4)
sudo apt-get update
5) ์ค์น!
sudo apt-get install -y nvidia-docker2
์ค์น๋์๋์ง ํ์ธํ๊ธฐ ์ํด docker ์๋น์ค๋ฅผ ์ฌ์์ ํด๋ณด์!
sudo systemctl restart docker
docker๊ฐ gpu๋ฅผ ์ ์ฐพ์์ ์ฐ๋์ง ํ์ธํ๋ ๋ช ๋ น์ด!
docker run --rm --gpus all ubuntu:18.04 nvidia-smi
gpu๋ฅผ ์ ์ฐพ์ ๊ฒ์ ํ์ธํ์๋ค ใ ใ
3. ํ์ํ ์ฟ ๋ค, ์ฐ๋ถํฌ ํ๊ฒฝ pull ํด์ค๊ธฐ!
๋ค์์ผ๋ก๋, ๋ค์ ๋ช ๋ น์ด๋ก ํ์ํ ํ๊ฒฝ์ pull ํด์๋ค. docker ํํ์ด์ง์์ ์ด๊ฒ์ ๊ฒ pull ํ ์ ์์ผ๋๊น ==> [https://hub.docker.com/search?q=docker%20pull%20cuda&source=verified](https://hub.docker.com/search?q=docker%20pull%20cuda&source=verified) ์ฌ๊ธฐ์ ๋ณธ์ธ์ด ํ์ํ๊ฑด pull ํด์ค์!
docker pull nvidia-cuda-10.0-cudnn7-devel-ubuntu18.04
์ง์! pull์ด ๋งค์ฐ ์ ๋์๋ค
4. Dockerfile ๋ฅผ ๋ง๋ค์ด๋ณด์
๋๋ python code๋ฅผ ๋๋ฆฌ๋ docker์ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ด ์์ฑ๋์๋ค. ํน์ ๋ณธ์ธ์ด js ๋ c ์ฝ๋๋ค ํ๋ฉด ์ข ๋ค๋ฅผ ์ ์์ผ๋ ์กฐ์ฌํฉ์๋ค~
๋จผ์ , ๋ณธ์ธ์ด ๋๋ฆฌ๊ณ ์ถ์ ํ์ผ๊ณผ ๋ชจ๋ ํด๋, ๋ฐ์ดํฐ ๋ฑ๋ฑ์ ํ๋์ ํด๋ ์๋์ ๋ค ์ ๋ฆฌํด์ค์๋ค.
๋๋ ๋ค์๊ณผ ๊ฐ์ด GONGIN
์ด๋ผ๋ ํด๋ ์๋์ ์น! ์ ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค! ์ ํด๋์ ํ์ผ๋ค๋ง ์์ผ๋ฉด ๋์๊ฐ ์ ์๊ฒ ํ์๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด ํด๋ ์์ Dockerfile์ ์์น์์ผ ์ค๋ค.
Dockerfile์ linux ์์ vim ์ผ๋ก ๋ง๋ค์ด์คฌ๋ค. ๋์ปคํ์ผ์ ์ด ์ด๋ฆ์ด default ์ธ๊ฑฐ๊ฐ์ผ๋ dockerfile ์ด๋ฐ์์ผ๋ก ๋ฐ๊พธ์ง ๋ง์! ๋ฐ๊ฟ๋ ๋๋์ง ์ ๋ชจ๋ฅด๊ฒ๋๋ฐ Dockerfile ์ด๋ผํ๋ Dockerfile ์ด๋ผ๊ณ ํ์..ใ ใ ์๋ฌ๋ ํผํ๋๊ฒ..
vim Dockerfile
ํ์ผ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์๋ค.
FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
RUN echo 'export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN echo 'export PATH=/usr/local/cuda/bin:/$PATH' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN apt-get update -y
RUN apt-get -y install libgl1-mesa-glx
RUN apt-get install -y python3-pip python-dev build-essential
RUN pip3 install --upgrade pip
ADD . /GONGIN
WORKDIR /GONGIN
RUN python3 -m pip install -r requirements.txt
CMD python3 ./toothbrush_head_final.py
5. image build ์ํค๊ธฐ
์ด์ ๋ง๋ Dockerfile ์ build ์ํค์! ์คํ์ํฌ ์ ์๋ ์คํํ์ผ๋ก ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ด ํด์ฃผ๋ฉด๋๋ค. -t
๋ ํ๊ทธ๋ฅผ ์ค์ ํด์ค๋ค ๋ญ ์ด๋ฐ๋ป์ผ๋ก ์๋ฉด ๋๋ค.
docker build -t [๋์ปค์ด๋ฏธ์ง์ด๋ฆ]:[ํ๊ทธ] [๋์ปคํ์ผ๊ฒฝ๋ก]
๋์๊ฒฝ์ฐ, ๋์ปคํ์ผ์ด ์๋ ์์น์์ ๋ช ๋ น์ด๋ฅผ ์ํํ์๊ณ , ๋์ปค์ด๋ฏธ์ง์ด๋ฆ์ noah, ํ๊ทธ๋ ๊ฐ๋จํ๊ฒ v0.1, v0.2 ์ด๋ฐ์์ผ๋ก ํด์ฃผ์๋ค. ใ ใ
docker build -t noah:v0.1 .
๋์ปค์ด๋ฏธ์ง ์ ๋น๋ ๋์๋์ง ํ์ธํด๋ณด์!
docker images
๋ณด์ด๋๊ฐ ์ ์๋ง์ version.. ๋์ ์ํ์ฐฉ์ค๋ค ใ ใ
6. docker image ์คํ์ํค๊ธฐ
์ฌ๊ธฐ๊น์ง ์จ ๋น์ ์นญ์ฐฌํด..! ๊ทธ๊ฑด ๋์๊ฒ ํ๋๋ง ํํ
์ด์ ์คํ์ ์์ผ๋ด ์๋ค.
docker run noah:v0.1
์๋์๊ฐ๋ค~ ๋์ฌ๋์ฌ~
7. TEST
์ด์ ๋ค๋ฅธ ์๋ฒ์์๋ ๋์๊ฐ๋์ง(๋ฐฐํฌ๋ฅผ ์ํด ์ฒดํฌ!) ํ์ธํด๋ณด์, ๋จผ์ docker image ๋ฅผ tar ํ์ผ๋ก save ํด์ค๋ค.
save -o [์ด๋ฆ์ผ๋ก ํ๊ณ ์ถ์๊ฒ] [์ ์ฅํ ์ด๋ฏธ์ง]
docker save -o noah_docker_v0.10.tar noah:v0.10
ใ ใ ์ด๊ฒ์ ๊ฒ ์๋ํ๋ค๋ณด๋ 10๋ฒ์งธ docker image๋ ์๊น ใ
์์ฑ๋ tar ํ์ผ์ ๋ค๋ฅธ ์๋ฒ๋ก scp ํด์ค ํ, ๋ก๋๋ฅผ ํด์ฃผ์๋ค.
docker load -i noah_docker_v0.10.tar
์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด ๋ก๋๋๋ค.. ๋ก๋์ค~
์ด์ ์คํ์์ผ ๋ณธ ํ ์ ๋์๊ฐ๋ฉด ์ฑ๊ณต!!
์๊ณ ํ์ จ์ต๋๋ค~
segmentation fault (core dumped) ์๋ฌ ํด๊ฒฐ
๋ ์๋ฌ๋ค.. ๊ทธ๋ฅ ๊ฐ์ํ๊ฒฝ์์๋ ์ ๋์๊ฐ๋ ํ์ด์ฌ ์ฝ๋๊ฐ, ๋์ปค ๋น๋ํด์ ์คํ์ํค๋ ์ฝ์ด ๋คํ ์๋ฌ๊ฐ ๋ฌ๋ค.. ์ฐพ์๋ณด๋
์๋ ๋ช ๋ น์ด๋ก ํด๊ฒฐํ๋ค๋ ์ฌ๋์ด ์๋๋ฐ..
sudo pip install docker-compose
๋ ํด๊ฒฐ์ด ์๋๋ค ์์์ !
ignore warning by
os.environ['TF_CPP_MIN_LOG_LEVEL'] = "2"
ํ์ํ cuda image๋ฅผ pull ํด์ค๊ณ , ๊ทธ pull ํด์จ image ์ ๋ด๊ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ถ๊ฐ๋ก install ํ์ฌ ๋๋ง์ custum docker image ๋ฅผ ๋ง๋ค์ด์, ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๊ฒ docker hub ์ ์ฌ๋ฆฌ๋ ๊ฒ ๊น์ง๋ [docker] ๋์ปค๐ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๊ธฐ 2 ์ฌ๊ธฐ ์ฐธ๊ณ !
๋๊ธ๋จ๊ธฐ๊ธฐ