ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker ์„ค์น˜๋ถ€ํ„ฐ ์ด๋ฏธ์ง€ ๋นŒ๋“œ, ์‹คํ–‰๊นŒ์ง€ ๐ŸŠ
    Computer Science/๊ฐœ๋ฐœ 2024. 6. 6. 02:08
    ๋ฐ˜์‘ํ˜•

    ์ด์ „ ํฌ์ŠคํŠธ์—์„œ 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 [ํ˜ธ์ŠคํŠธ๋ฐ์ดํ„ฐ๊ฒฝ๋กœ]

     

     

     

     

    ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

    https://kairosial.tistory.com/97

Designed by Tistory.