Compose: Docker Compose์—์„œ NVIDIA GPU ์ง€์›

์— ๋งŒ๋“  2019๋…„ 05์›” 09์ผ  ยท  160์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/compose

Docker 19.03.0 Beta 2์—์„œ NVIDIA GPU์— ๋Œ€ํ•œ ์ง€์›์ด ์ƒˆ๋กœ์šด CLI API --gpus์˜ ํ˜•ํƒœ๋กœ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/docker/cli/pull/1714 ๋Š”์ด ์ง€์›์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ GPU ๊ฐ€์† Docker ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด --gpus ์˜ต์…˜์„ ๊ฐ„๋‹จํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker run -it --rm --gpus all ubuntu nvidia-smi
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
f476d66f5408: Pull complete 
8882c27f669e: Pull complete 
d9af21273955: Pull complete 
f5029279ec12: Pull complete 
Digest: sha256:d26d529daa4d8567167181d9d569f2a85da3c5ecaf539cace2c6223355d69981
Status: Downloaded newer image for ubuntu:latest
Tue May  7 15:52:15 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116                Driver Version: 390.116                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   39C    P0    22W /  75W |      0MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
:~$ 

์˜ค๋Š˜๋ถ€ํ„ฐ Compose๋Š”์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NVIDIA GPU๋ฅผ ์ง€์›ํ•˜๋„๋ก Compose๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ์œ„ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

kinenhancement statu0-triage

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ธด๊ธ‰ํ•œ ํ•„์š”์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋ชจ๋“  160 ๋Œ“๊ธ€

Docker 19.03.0 ๋ฐ nvidia-container-toolkit-1.0.0-2 ์—์„œ (ํ˜„์žฌ) ๋ ˆ๊ฑฐ์‹œ 'nvidia ๋Ÿฐํƒ€์ž„'์ด ๊นจ์ ธ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”๋„๊ฐ€ ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค. : https://github.com/NVIDIA/nvidia-docker/issues/1017

$ cat docker-compose.yml 
version: '2.3'

services:
 nvidia-smi-test:
  runtime: nvidia
  image: nvidia/cuda:9.2-runtime-centos7

$ docker-compose run nvidia-smi-test
Cannot create container for service nvidia-smi-test: Unknown runtime specified nvidia

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : docker run --gpus all nvidia/cudagl:9.2-runtime-centos7 nvidia-smi

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค : docker run --runtime=nvidia nvidia/cudagl:9.2-runtime-centos7 nvidia-smi

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ƒˆ๋กœ์šด Ubuntu 18.04 LTS ์ปดํ“จํ„ฐ์—์„œ ์ƒˆ๋กœ์šด Docker CE 19.03.0์„ ์–ป์—ˆ์œผ๋ฉฐ ํ˜„์žฌ์™€ ์ผ์น˜ํ•˜๋Š” NVIDIA Container Toolkit (nรฉe nvidia-docker2) ๋ฒ„์ „์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ docker-compose.yml 3.7์ด --gpus ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : docker run --gpus all nvidia/cudagl:9.2-runtime-centos7 nvidia-smi

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค : docker run --runtime=nvidia nvidia/cudagl:9.2-runtime-centos7 nvidia-smi

๋‹น์‹ ์€ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค

{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

๊ณ„์† ์ž‘์—…ํ•˜๋ ค๋ฉด /etc/docker/daemon.json ์—์„œ --runtime=nvidia ์— ์—ฌ๊ธฐ์— ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€

ํ•‘ @KlaasH @ulyssessouza @Goryudyuma @ chris-crone. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธด๊ธ‰ํ•œ ํ•„์š”์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์‚ฌ์šฉ์ž๊ฐ€ docker> = 19.03 ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•œ ํ›„ /etc/docker/daemon.json ์ˆ˜๋™์œผ๋กœ ์ฑ„์šฐ๊ณ  nvidia-container-toolkit ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด nvidia-docker2 ๋ฅผ ์ œ๊ฑฐํ•˜๋„๋ก ์˜๋„ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ๋งŽ์€ ์„ค์น˜๋ฅผ ๋ง๊ฐ€ ๋œจ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠนํžˆ --gpus ๋Š” compose ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—.

์•„๋‹ˆ์š”, compose๊ฐ€ gpus ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•  ๋•Œ๊นŒ์ง€ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

nvidia-docker-runtime ์„ค์น˜ :
https://github.com/NVIDIA/nvidia-container-runtime#docker -engine-setup
/etc/docker/daemon.json์— ์ถ”๊ฐ€
{
"๋Ÿฐํƒ€์ž„": {
"nvidia": {
"๊ฒฝ๋กœ": "/ usr / bin / nvidia-container-runtime",
"runtimeArgs": []
}
}
}

๋„์ปค ์ž‘์„ฑ :
๋Ÿฐํƒ€์ž„ : nvidia
ํ™˜๊ฒฝ:
-NVIDIA_VISIBLE_DEVICES = all

"/ usr / bin / nvidia-container-runtime"๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

docker-compose๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๊นŒ์ง€ docker-compose๋กœ nvidia ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

nvidia-docker-runtime ์„ค์น˜ :
https://github.com/NVIDIA/nvidia-container-runtime#docker -engine-setup
/etc/docker/daemon.json์— ์ถ”๊ฐ€
{
"๋Ÿฐํƒ€์ž„": {
"nvidia": {
"๊ฒฝ๋กœ": "/ usr / bin / nvidia-container-runtime",
"runtimeArgs": []
}
}
}

๋„์ปค ์ž‘์„ฑ :
๋Ÿฐํƒ€์ž„ : nvidia
ํ™˜๊ฒฝ:

  • NVIDIA_VISIBLE_DEVICES = all

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ docker-compose up ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์—ฌ์ „ํžˆ Unsupported config option for services.myservice: 'runtime' ์–ป์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์•„์ด๋””์–ด?

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ docker-compose up ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์—ฌ์ „ํžˆ Unsupported config option for services.myservice: 'runtime' ์–ป์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์•„์ด๋””์–ด?

/etc/docker/daemon.json ์ˆ˜์ • ํ›„ docker ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
systemctl ๋‹ค์‹œ ์‹œ์ž‘ ๋„์ปค
Compose ํ˜•์‹ 2.3์„ ์‚ฌ์šฉํ•˜๊ณ  ๋Ÿฐํƒ€์ž„ : nvidia๋ฅผ GPU ์„œ๋น„์Šค์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Docker Compose๋Š” ๋ฒ„์ „ 1.19.0 ์ด์ƒ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋„์ปค ์ž‘์„ฑ ํŒŒ์ผ :
๋ฒ„์ „ : '2.3'

์„œ๋น„์Šค:
nvsmi :
์ด๋ฏธ์ง€ : ์šฐ๋ถ„ํˆฌ : 16.04
๋Ÿฐํƒ€์ž„ : nvidia
ํ™˜๊ฒฝ:
-NVIDIA_VISIBLE_DEVICES = all
๋ช…๋ น : nvidia-smi

@cheperuiz ,
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, }

์•„! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @Kwull , ๋‚˜๋Š” default-runtime ๋ถ€๋ถ„์„ โ€‹โ€‹๋†“์ณค์Šต๋‹ˆ๋‹ค ... ๋ชจ๋“  ๊ฒƒ์ด ์ง€๊ธˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :)

@uderik , runtime ๋Š” ํ˜„์žฌ 3.7 compose ํŒŒ์ผ ํ˜•์‹ ์Šคํ‚ค๋งˆ์— ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฒฐ๊ตญ Docker 19.03๊ณผ ์ผ์น˜ํ•ด์•ผํ•˜๋Š” ๋ณด๋ฅ˜์ค‘์ธ 3.8 ๋ฒ„์ „์—๋Š” ์—†์Šต๋‹ˆ๋‹ค : https://github.com/docker/compose/blob/ 5e587d574a94e011b029c2fb491fb0f4bdeef71c / compose / config / config_schema_v3.8.json

@johncolby runtime ์€ (๋Š”) 3.x ํ”Œ๋ž˜๊ทธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. 2.x ํŠธ๋ž™ (2.3 ๋ฐ 2.4)์—๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. docker-compose.yml ํŒŒ์ผ์— version: '2.3' (๊ณผ๊ฑฐ์— ์ž‘๋™ ํ–ˆ์Œ)์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ๋ฌด์‹œ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ...
ํ–ฅํ›„ ํ”„๋กœ์ ํŠธ์—์„œ GPU์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ™œ์„ฑํ™” / ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ƒฅ ๊ธฐ๋ณธ + ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด --gpus ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@johncolby 3.X์—์„œ runtime ์˜ ๋Œ€์ฒดํ’ˆ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@ Daniel451 ๋ฐฉ๊ธˆ ์ฃผ๋ณ€์„ ๋”ฐ๋ผ ์™”์ง€๋งŒ generic_resources ํ‚ค ์•„๋ž˜์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

services:
  my_app:
    deploy:
      resources:
        reservations:
          generic_resources:
            - discrete_resource_spec:
                kind: 'gpu'
                value: 2

(https://github.com/docker/cli/blob/9a39a1/cli/compose/loader/full-example.yml#L71-L74์—์„œ)
๋””์ž์ธ ๋ฌธ์„œ : https://github.com/docker/swarmkit/blob/master/design/generic_resources.md

๋‹ค์Œ์€ ์ด๋ฏธ ๋ณ‘ํ•ฉ ๋œ compose 3.8 ์Šคํ‚ค๋งˆ ์ง€์›๊ณผ ๊ด€๋ จ๋œ ์ž‘์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. https://github.com/docker/compose/issues/6530

๋ฐ๋ชฌ ์ธก์—์„œ gpu ๊ธฐ๋Šฅ์€ daemon.json ๋˜๋Š” dockerd CLI (์ด์ „ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ๋Ÿฐํƒ€์ž„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌ)์— ํฌํ•จํ•˜์—ฌ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/usr/bin/dockerd --node-generic-resource gpu=2

๊ทธ๋Ÿฐ ๋‹ค์Œ NVIDIA ๋„์ปค ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.
https://github.com/moby/moby/blob/09d0f9/daemon/nvidia_linux.go

๊ธฐ๊ณ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ์ž๋ฆฌ์—์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™” ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์—…๋ฐ์ดํŠธ?

๋˜ํ•œ ๊ณต์‹ ์ˆ˜์ • ์ „๊นŒ์ง€ bash ๊ณผ docker run --gpus ์„ (๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...

์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :)

์ข‹์•„ ... ์™œ์ด๊ฒŒ ์•„์ง ์—ด๋ ค ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. ์ด 3 ๊ฐœ์˜ ์ถ”๊ฐ€ ์ค„์€ ์Šคํ‚ค๋งˆ ๋ฒ„์ „ 3.7์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. docker๊ฐ€ ์‚ฌ์†Œํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฌธ์ œ์— ๋ฐ˜์‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ ์ด ์„ธ ์ค„์„ ์ถ”๊ฐ€ํ•˜๊ณ  python3 setup.py์—์„œ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๊ณ  docker-compose.yml์ด ๋ฒ„์ „ 3.7์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

[ruckc<strong i="6">@omnilap</strong> compose]$ git diff
diff --git a/compose/config/config_schema_v3.7.json b/compose/config/config_schema_v3.7.json
index cd7882f5..d25d404c 100644
--- a/compose/config/config_schema_v3.7.json
+++ b/compose/config/config_schema_v3.7.json
@@ -151,6 +151,7 @@

         "external_links": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
         "extra_hosts": {"$ref": "#/definitions/list_or_dict"},
+        "gpus": {"type": ["number", "string"]},
         "healthcheck": {"$ref": "#/definitions/healthcheck"},
         "hostname": {"type": "string"},
         "image": {"type": "string"},
diff --git a/compose/service.py b/compose/service.py
index 55d2e9cd..71188b67 100644
--- a/compose/service.py
+++ b/compose/service.py
@@ -89,6 +89,7 @@ HOST_CONFIG_KEYS = [
     'dns_opt',
     'env_file',
     'extra_hosts',
+    'gpus',
     'group_add',
     'init',
     'ipc',
@@ -996,6 +997,7 @@ class Service(object):
             dns_opt=options.get('dns_opt'),
             dns_search=options.get('dns_search'),
             restart_policy=options.get('restart'),
+            gpus=options.get('gpus'),
             runtime=options.get('runtime'),
             cap_add=options.get('cap_add'),
             cap_drop=options.get('cap_drop'),

์ด๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
PR์€ ํ™˜์˜๋ฐ›์Šต๋‹ˆ๋‹ค.

์ข‹์•„ ... ์™œ์ด๊ฒŒ ์•„์ง ์—ด๋ ค ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. ์ด 3 ๊ฐœ์˜ ์ถ”๊ฐ€ ์ค„์€ ์Šคํ‚ค๋งˆ ๋ฒ„์ „ 3.7์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. docker๊ฐ€ ์‚ฌ์†Œํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฌธ์ œ์— ๋ฐ˜์‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ ์ด ์„ธ ์ค„์„ ์ถ”๊ฐ€ํ•˜๊ณ  python3 setup.py์—์„œ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๊ณ  docker-compose.yml์ด ๋ฒ„์ „ 3.7์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

[ruckc<strong i="7">@omnilap</strong> compose]$ git diff
diff --git a/compose/config/config_schema_v3.7.json b/compose/config/config_schema_v3.7.json
index cd7882f5..d25d404c 100644
--- a/compose/config/config_schema_v3.7.json
+++ b/compose/config/config_schema_v3.7.json
@@ -151,6 +151,7 @@

         "external_links": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
         "extra_hosts": {"$ref": "#/definitions/list_or_dict"},
+        "gpus": {"type": ["number", "string"]},
         "healthcheck": {"$ref": "#/definitions/healthcheck"},
         "hostname": {"type": "string"},
         "image": {"type": "string"},
diff --git a/compose/service.py b/compose/service.py
index 55d2e9cd..71188b67 100644
--- a/compose/service.py
+++ b/compose/service.py
@@ -89,6 +89,7 @@ HOST_CONFIG_KEYS = [
     'dns_opt',
     'env_file',
     'extra_hosts',
+    'gpus',
     'group_add',
     'init',
     'ipc',
@@ -996,6 +997,7 @@ class Service(object):
             dns_opt=options.get('dns_opt'),
             dns_search=options.get('dns_search'),
             restart_policy=options.get('restart'),
+            gpus=options.get('gpus'),
             runtime=options.get('runtime'),
             cap_add=options.get('cap_add'),
             cap_drop=options.get('cap_drop'),

์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ๋งŽ์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ERROR: for <SERVICE_NAME>  __init__() got an unexpected keyword argument 'gpus'
Traceback (most recent call last):
  File "/usr/local/bin/docker-compose", line 11, in <module>
    load_entry_point('docker-compose==1.25.0.dev0', 'console_scripts', 'docker-compose')()
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/cli/main.py", line 71, in main
    command()
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/cli/main.py", line 127, in perform_command
    handler(command, command_options)
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/cli/main.py", line 1106, in up
    to_attach = up(False)
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/cli/main.py", line 1102, in up
    cli=native_builder,
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/project.py", line 569, in up
    get_deps,
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/parallel.py", line 112, in parallel_execute
    raise error_to_reraise
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/parallel.py", line 210, in producer
    result = func(obj)
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/project.py", line 555, in do
    renew_anonymous_volumes=renew_anonymous_volumes,
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 546, in execute_convergence_plan
    scale, detached, start
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 468, in _execute_convergence_create
    "Creating"
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/parallel.py", line 112, in parallel_execute
    raise error_to_reraise
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/parallel.py", line 210, in producer
    result = func(obj)
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 466, in <lambda>
    lambda service_name: create_and_start(self, service_name.number),
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 454, in create_and_start
    container = service.create_container(number=n, quiet=True)
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 337, in create_container
    previous_container=previous_container,
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 913, in _get_container_create_options
    one_off=one_off)
  File "/usr/local/lib/python3.6/dist-packages/docker_compose-1.25.0.dev0-py3.6.egg/compose/service.py", line 1045, in _get_container_host_config
    cpu_rt_runtime=options.get('cpu_rt_runtime'),
  File "/usr/local/lib/python3.6/dist-packages/docker-4.0.2-py3.6.egg/docker/api/container.py", line 590, in create_host_config
    return HostConfig(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'gpus'

ํŠน์ • Python docker ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@DarioTurchi ๋„ค, ์ •ํ™•ํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. HostConfig ์œ ํ˜•๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

docker-py๋„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— @ruckc ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๋ณ€๊ฒฝ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ docker-py ๋ณ€๊ฒฝ์ด ์•„์ง ์ง„ํ–‰์ค‘์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ๋ณด์•„๋ผ:
https://github.com/docker/docker-py/pull/2419

๋ณ€๊ฒฝ๋œ ์ง€์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/sigurdkb/docker-py/tree/gpus_parameter

๋”ฐ๋ผ์„œ ์ง€๊ธˆ ํŒจ์น˜ ํ•˜๋ ค๋ฉด https://github.com/sigurdkb/docker-py/tree/gpus_parameter ์—์„œ ์ˆ˜์ • ๋œ docker-py์— ๋Œ€ํ•ด docker-compose๋ฅผ ๋นŒ๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.

1) /etc/docker/daemon.json

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

ํ•˜์ง€๋งŒ runtime ํ‚ค๋Š” https://github.com/docker/compose/issues/6239 ์™€ ๊ฐ™์ด v3.x์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์‹œ๋„ํ–ˆ๋‹ค :

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

๋”ฐ๋ผ์„œ ๋” ์ด์ƒ docker-compose ์—์„œ GPU ์ง€์›์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

bertserving_1    | I:VENTILATOR:[__i:_ge:222]:get devices
bertserving_1    | W:VENTILATOR:[__i:_ge:246]:no GPU available, fall back to CPU

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜๊ธฐ ์ „์—๋Š” ์ง€๊ธˆ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

+1 docker-compose์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค!

์—ํƒ€?

๋‚ด๋ถ€์ ์œผ๋กœ https://docker.atlassian.net/browse/COMPOSE-82๋กœ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

+1์€ docker-compose์— ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ docker-compose ๋ฉ‹์ง„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‚ด ์†”๋ฃจ์…˜์€ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•˜๋Š” 2.3 ๋ฒ„์ „์˜ docker-compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  nvidia-container-runtime์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋” ์ด์ƒ nvidia-docker์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—).
๋˜ํ•œ /etc/docker/daemon.json์—์„œ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹˜).
์ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

version: '2.3'
services:
  test:
    image: nvidia/cuda:9.0-base
    runtime: nvidia

์ง€๊ธˆ ๋‚ด ์†”๋ฃจ์…˜์€ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•˜๋Š” 2.3 ๋ฒ„์ „์˜ docker-compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  nvidia-container-runtime์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋” ์ด์ƒ nvidia-docker์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—).
๋˜ํ•œ /etc/docker/daemon.json์—์„œ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹˜).
์ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

version: '2.3'
services:
  test:
    image: nvidia/cuda:9.0-base
    runtime: nvidia

@arruda daemon.json ๋ฅผ) ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ ๋‚ด ์†”๋ฃจ์…˜์€ ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•˜๋Š” 2.3 ๋ฒ„์ „์˜ docker-compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  nvidia-container-runtime์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋” ์ด์ƒ nvidia-docker์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—).
๋˜ํ•œ /etc/docker/daemon.json์—์„œ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋Ÿฐํƒ€์ž„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹˜).
์ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

version: '2.3'
services:
  test:
    image: nvidia/cuda:9.0-base
    runtime: nvidia

@arruda daemon.json ๋ฅผ) ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค.

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

์•ˆ๋…•ํ•˜์„ธ์š”

NVIDIA ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. (FROM)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
nvidia / cudagl : 10.1-runtime-ubuntu18.04

์œ„์—์„œ ๊ถŒ์žฅํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด ์ด๋ฏธ์ง€๊ฐ€ nvidia / cudagl : 10.1-runtime-ubuntu18.04 ์—์„œ ํŒŒ์ƒ ๋  ํ•„์š”๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์ฆ‰, ๊ฐ„๋‹จํžˆ (FROM) python : 3.7.3-stretch ์—์„œ ํŒŒ์ƒ์‹œํ‚ฌ ์ˆ˜
๊ทธ๋ฆฌ๊ณ  ๋Ÿฐํƒ€์ž„์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค : nvidia๋ฅผ docker-compose?

๊ฐ์‚ฌ

@rfsch ์•„๋‹ˆ์š”, ๊ทธ๊ฑด ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. docker-compose์˜ runtime: nvidia ๋Š” Docker ๋Ÿฐํƒ€์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ปจํ…Œ์ด๋„ˆ์—์„œ GPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ๋˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. runtime ์˜ nvidia/cudagl:10.1-runtime-ubuntu18.04 ๋Š” CUDA ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด CUDA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GPU (Docker๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ œ๊ณต)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฏธ์ง€์—์„œ :

Docker architecture

runtime: nvidia ๋Š” runc / containerd ๋ถ€๋ถ„์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. nvidia/cudagl:10.1-runtime-ubuntu18.04 ๋Š” ์™„์ „ํžˆ ๊ทธ๋ฆผ ๋ฐ–์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

@ Daniel451 ๋ฐฉ๊ธˆ ์ฃผ๋ณ€์„ ๋”ฐ๋ผ ์™”์ง€๋งŒ generic_resources ํ‚ค ์•„๋ž˜์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

services:
  my_app:
    deploy:
      resources:
        reservations:
          generic_resources:
            - discrete_resource_spec:
                kind: 'gpu'
                value: 2

(https://github.com/docker/cli/blob/9a39a1/cli/compose/loader/full-example.yml#L71-L74์—์„œ)
๋””์ž์ธ ๋ฌธ์„œ : https://github.com/docker/swarmkit/blob/master/design/generic_resources.md

๋‹ค์Œ์€ ์ด๋ฏธ ๋ณ‘ํ•ฉ ๋œ compose 3.8 ์Šคํ‚ค๋งˆ ์ง€์›๊ณผ ๊ด€๋ จ๋œ ์ž‘์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. # 6530

๋ฐ๋ชฌ ์ธก์—์„œ gpu ๊ธฐ๋Šฅ์€ daemon.json ๋˜๋Š” dockerd CLI (์ด์ „ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ๋Ÿฐํƒ€์ž„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌ)์— ํฌํ•จํ•˜์—ฌ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/usr/bin/dockerd --node-generic-resource gpu=2

๊ทธ๋Ÿฐ ๋‹ค์Œ NVIDIA ๋„์ปค ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.
https://github.com/moby/moby/blob/09d0f9/daemon/nvidia_linux.go

๊ธฐ๊ณ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ์ž๋ฆฌ์—์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™” ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, @johncolby , ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

ERROR: The Compose file './docker-compose.yml' is invalid because:
services.nvidia-smi-test.deploy.resources.reservations value Additional properties are not allowed ('generic_resources' was unexpected)

์–ด๋–ค ์ œ์•ˆ?

๊ฐ์‚ฌ
๋ฐ์ด๋น„๋“œ

https://github.com/NVIDIA/nvidia-container-runtime ์—์„œ nvidia-container-runtime 3.1.4.1 ์„ค์น˜ ๋ฐ ํผํŒ…

runtime: nvidia

https://docs.docker.com/compose/install/ ์—์„œ ์„ค์น˜ ํ•œ docker-compose 1.23.1 ๋ฐ 1.24.1 ๊ณผ ๊ฐ™์€ ๋ฉ์ฒญํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด dockerhub์˜ nvidia / cudagl / 10.1-base ์ปจํ…Œ์ด๋„ˆ. cuda์™€ OpenGL ๋ Œ๋”๋ง์„ ์‹œ๋„ํ•ด ๋ณด์•˜๋Š”๋ฐ ๋ชจ๋‘ ๊ฑฐ์˜ ๊ธฐ๋ณธ ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ COMPOSE-82๋กœ ์ถ”์  ๋จ
์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด docker stack (https://github.com/docker/cli/blob/master/cli/compose/types/types.go#L156)์—์„œ๋„ ๊ตฌํ˜„๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

https://github.com/NVIDIA/nvidia-container-runtime ์—์„œ nvidia-container-runtime 3.1.4.1 ์„ค์น˜ ๋ฐ ํผํŒ…

runtime: nvidia

https://docs.docker.com/compose/install/ ์—์„œ ์„ค์น˜ ํ•œ docker-compose 1.23.1 ๋ฐ 1.24.1 ๊ณผ ๊ฐ™์€ ๋ฉ์ฒญํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด dockerhub์˜ nvidia / cudagl / 10.1-base ์ปจํ…Œ์ด๋„ˆ. cuda์™€ OpenGL ๋ Œ๋”๋ง์„ ์‹œ๋„ํ•ด ๋ณด์•˜๋Š”๋ฐ ๋ชจ๋‘ ๊ฑฐ์˜ ๊ธฐ๋ณธ ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค.

docker-compose.yml์„ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, @ jdr-face,

๋‹ค์Œ์€ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— nvidia-container-runtime ๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ œ์•ˆํ•œ ๋‚ด ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

version: '3.0'

services:
  nvidia-smi-test:
    runtime: nvidia
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix 
    environment:
     - NVIDIA_VISIBLE_DEVICES=0 
     - DISPLAY
    image: vkcube

์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

       Unsupported config option for services.nvidia-smi-test: 'runtime'

andyneff๊ฐ€ ์•ž์„œ ์–ธ๊ธ‰ ํ•œ @ david-gwa :

runtime ์€ (๋Š”) 3.x ํ”Œ๋ž˜๊ทธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. 2.x ํŠธ๋ž™ (2.3 ๋ฐ 2.4)์—๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

@ david-gwa

docker-compose.yml์„ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

version: '2.3'

services:
    container:
        image: "nvidia/cudagl/10.1-base"

        runtime: "nvidia" 

        security_opt:
            - seccomp:unconfined
        privileged: true

        volumes:
            - $HOME/.Xauthority:/root/.Xauthority:rw
            - /tmp/.X11-unix:/tmp/.X11-unix:rw

        environment:
          - NVIDIA_VISIBLE_DEVICES=all

ํ•„์š”์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ์˜ต์…˜ ์ค‘ ์ผ๋ถ€๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @muru๊ฐ€ ์˜ˆ์ธกํ–ˆ๋“ฏ์ด ํŠธ๋ฆญ์€ ์ด์ „ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ์ด ๊ตฌ์„ฑ์„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @ jdr -face,
๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด v3 compose ์šฉ์ด๋ผ๊ณ  ์˜คํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด ์ „ํ†ต์ ์œผ๋กœ ๋งํ•˜๋ฉด compose v2๋Š” compose v3๋ณด๋‹ค ์˜ค๋ž˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. v3์€ ๋–ผ๋ฅผ ํ–ฅํ•œ ๋ฐ˜๋ฉด v2๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. v1์ด ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Docker์˜ ๊ธฐ๋ณธ GPU ์ง€์›์„์œ„ํ•œ Docker-compose ์ง€์›์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

runtime ์˜ต์…˜ ์ง€์›์€ ํ–ฅํ›„ GPU ์ง€์›์„์œ„ํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. NVIDIA๋Š” https://github.com/NVIDIA/nvidia-docker ์—์„œ nvidia-docker2์˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Docker 19.03 ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” NVIDIA GPU๊ฐ€ ์ด์ œ Docker ๋Ÿฐํƒ€์ž„์—์„œ ์žฅ์น˜๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜๋ฏ€๋กœ nvidia-docker2 ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ GPU ์ง€์›์€ ๋Ÿฐํƒ€์ž„์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ž์œผ๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, ์ด๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๋“  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ต๋‹ˆ๋‹ค.

๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„์€ docker swarm์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— docker-compose v3.x๋ฅผ ๊ณ ์ˆ˜ํ•ด์•ผํ•˜๋Š” ๋ฐ˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ์—์„œ GPU / CUDA๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Nvidia ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

docker-compose ํŒŒ์ผ ๋‚ด์—์„œ Nvidia ๋Ÿฐํƒ€์ž„์„ ๋ช…์‹œ ์ ์œผ๋กœ ์•Œ๋ฆฌ์ง€ ์•Š๋„๋ก /etc/docker/daemon.json ์—์„œ Nvidia๋ฅผ ๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "default-runtime":"nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

GPU ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Nvidia ๋Ÿฐํƒ€์ž„์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋น„์Šทํ•œ ์ฐจ๋‹จ์ œ์— ์ง๋ฉด ํ•œ ์‚ฌ๋žŒ์„ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, ์ด๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๋“  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ต๋‹ˆ๋‹ค.

๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„์€ docker swarm์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— docker-compose v3.x๋ฅผ ๊ณ ์ˆ˜ํ•ด์•ผํ•˜๋Š” ๋ฐ˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ์—์„œ GPU / CUDA๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Nvidia ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

docker-compose ํŒŒ์ผ ๋‚ด์—์„œ Nvidia ๋Ÿฐํƒ€์ž„์„ ๋ช…์‹œ ์ ์œผ๋กœ ์•Œ๋ฆฌ์ง€ ์•Š๋„๋ก /etc/docker/daemon.json ์—์„œ Nvidia๋ฅผ ๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "default-runtime":"nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

GPU ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Nvidia ๋Ÿฐํƒ€์ž„์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋น„์Šทํ•œ ์ฐจ๋‹จ์ œ์— ์ง๋ฉด ํ•œ ์‚ฌ๋žŒ์„ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ํ•˜๋Š” ์ผ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ž‘๋™ํ•˜์ง€๋งŒ ๋‚˜์—๊ฒŒ๋Š” ์•ฝ๊ฐ„ ์—‰๋ง์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณง ์™„์ „ํ•œ compose-v3 ์ง€์›์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. :)

์‚ฌ์šฉ์ž๊ฐ€ docker> = 19.03 ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•œ ํ›„ /etc/docker/daemon.json ์ˆ˜๋™์œผ๋กœ ์ฑ„์šฐ๊ณ  nvidia-container-toolkit ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด nvidia-docker2 ๋ฅผ ์ œ๊ฑฐํ•˜๋„๋ก ์˜๋„ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ๋งŽ์€ ์„ค์น˜๋ฅผ ๋ง๊ฐ€ ๋œจ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠนํžˆ --gpus ๋Š” compose ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—.

--gpus๋Š” compose์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
pycharm์„ ์‚ฌ์šฉํ•˜์—ฌ docker๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ tensorflow-gpu๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? --gpus๊ฐ€ ๊ณง docker-compose์—์„œ ์ง€์› ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ํŒŒ์ผ์—์„œ COMPOSE_API_VERSION=auto docker-compose run gpu ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

version: '3.7'

services:
    gpu:
        image: 'nvidia/cuda:9.0-base'
        command: 'nvidia-smi'
        device_requests:
            - capabilities:
               - "gpu"

Docker 19.03.0 Beta 2์—์„œ NVIDIA GPU์— ๋Œ€ํ•œ ์ง€์›์ด ์ƒˆ๋กœ์šด CLI API --gpus์˜ ํ˜•ํƒœ๋กœ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. docker / cli # 1714 ๋Š”์ด ์ง€์›์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ GPU ๊ฐ€์† Docker ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด --gpus ์˜ต์…˜์„ ๊ฐ„๋‹จํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker run -it --rm --gpus all ubuntu nvidia-smi
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
f476d66f5408: Pull complete 
8882c27f669e: Pull complete 
d9af21273955: Pull complete 
f5029279ec12: Pull complete 
Digest: sha256:d26d529daa4d8567167181d9d569f2a85da3c5ecaf539cace2c6223355d69981
Status: Downloaded newer image for ubuntu:latest
Tue May  7 15:52:15 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.116                Driver Version: 390.116                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   39C    P0    22W /  75W |      0MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
:~$ 

์˜ค๋Š˜๋ถ€ํ„ฐ Compose๋Š”์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NVIDIA GPU๋ฅผ ์ง€์›ํ•˜๋„๋ก Compose๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ์œ„ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด csdn ๋ธ”๋กœ๊ทธ ์ฃผ์†Œ : https://blog.csdn.net/u010420283/article/details/104055046

~ $ sudo apt-get install nvidia-container-runtime
~ $ sudo vim /etc/docker/daemon.json

๊ทธ๋Ÿฐ ๋‹ค์Œ์ด daemon.json ํŒŒ์ผ์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
"default-runtime": "nvidia"
"๋Ÿฐํƒ€์ž„": {
"nvidia": {
"๊ฒฝ๋กœ": "/ usr / bin / nvidia-container-runtime",
"runtimeArgs": []
}
}
}

~ $ sudo systemctl daemon-reload
~ $ sudo systemctl ๋„์ปค ์žฌ์‹œ์ž‘

์•ž์—์„œ ์„ค๋ช…ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•˜๋ ค๋Š” ansible ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ nvidia-container-runtime ์„ ์„ค์น˜ํ•˜๊ณ  runtime: nvidia ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก /etc/docker/deamon.json ์„ ๊ตฌ์„ฑํ•˜๋Š”

https://github.com/NVIDIA/ansible-role-nvidia-docker

(์–ด๋–ค ์ด์œ ๋กœ ์šฐ๋ถ„ํˆฌ์™€ RHEL์—์„œ๋งŒ ์‹คํ–‰๋˜์ง€๋งŒ ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค)

๊ทธ๋Ÿฐ ๋‹ค์Œ docker-compose.yml์—์„œ :

version: "2.4"
services:
  test:
    image: "nvidia/cuda:10.2-runtime-ubuntu18.04"
    command: "nvidia-smi"

GPU๋ฅผ ์ง€์›ํ•˜๋Š” ๊ณต์‹ 3.x ๋ฒ„์ „์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋ฌด๋ฆฌ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค :)

์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„ ๊ณ ์ • ํ‘œ์‹œ๊ธฐ - ํ‰์— ๋”ฐ๋ผ device_requests ๋ฌด์—‡ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ --gpus ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ์œ„ํ•œ ์—ฌ๋Ÿฌ ํ’€ ์š”์ฒญ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค (https://github.com/docker/docker-py/pull/2419, https://github.com/docker/docker-py/pull/2465, https : / /github.com/docker/docker-py/pull/2471) ๊ทธ๋Ÿฌ๋‚˜ ๊ด€๋ฆฌ์ž์˜ ๋ฐ˜์‘์ด ์—†์Šต๋‹ˆ๋‹ค. # 7124๋Š” https://github.com/docker/docker-py/pull/2471 ์„ ์‚ฌ์šฉํ•˜์—ฌ Compose์—์„œ ์ œ๊ณตํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์•„๋ฌด๋„ ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

# 7124์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด PR์„๋ณด๋‹ค ์ค€์ˆ˜ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ด€์‹ฌ์„ ๊ฑฐ์˜๋ฐ›์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์„ ์ผ์— ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค! daemon.json์—์„œ ๋Ÿฐํƒ€์ž„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜์žˆ๋Š” ์ด์ „ nevidia-docker2์— ๋” ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑธ ๋‹ค์‹œ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๋งค์šฐ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ๋ฐœ ํ•„์š” ํ•ด์š”. ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค : /

์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„ ํ•ดํ‚น์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋„๋ก ๋™์ผํ•œ ์ปดํ“จํ„ฐ์—์„œ CPU์™€ GPU ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‘ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ธ์ œ compose์—์„œ ์ž‘๋™ํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? compose์— ๋Ÿฐํƒ€์ž„ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ ์‹ฌ๊ฐํ•œ ๊ธฐ๋Šฅ ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„ ํ•ดํ‚น์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋„๋ก ๋™์ผํ•œ ์ปดํ“จํ„ฐ์—์„œ CPU์™€ GPU ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‘ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ธ์ œ compose์—์„œ ์ž‘๋™ํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? compose์— ๋Ÿฐํƒ€์ž„ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ ์‹ฌ๊ฐํ•œ ๊ธฐ๋Šฅ ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ docker cli๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (docker run --gpu ....), ๋‚˜๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ํŠธ๋ฆญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (ํ”„๋ก์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋–ผ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ต์‹  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋„์ปค ์„œ๋น„์Šค ๋ช…๋ น (๋‚ด๊ฐ€ ์•„๋Š” ๋ฐ”์™€ ๊ฐ™์ด)์ด๋‚˜ ์ž‘์„ฑ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๋–ผ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@dottgonzo . ๊ธ€์Ž„, ์˜ˆ ;-). ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•Œ๊ณ  ๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๋งค์šฐ ๋”์ฐํ•˜๊ณ  ์ด์‹์„ฑ์ด์—†๋Š” ๋ฐฉ๋ฒ•์ด๋ฏ€๋กœ ์ข€ ๋” ๋™์  ์ธ ๋ฐฉ๋ฒ•์œผ๋กœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ๊ธฐ๋Šฅ ์š”์ฒญ์ด ์•„๋‹ˆ๋ผ ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

COMPOSE_API_VERSION=auto docker-compose run gpu

@ggregoire ์–ด๋””์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๊นŒ? COMPOSE_API_VERSION = auto docker-compose run gpu?

์‰˜์˜ @joehoeller ๋Š” ๋‹ค๋ฅธ ๋ช…๋ น์— ๋Œ€ํ•ด ์ˆ˜ํ–‰

์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” 3.x ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ์ง€ ๋˜๋Š” GPU ์˜ต์…˜์ด ์—ฌ์ „ํžˆ ์ง€์›๋˜๋Š” docker-compose 2.x๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๊ฒฐ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile์—์„œ ๋‹ค๋‹จ๊ณ„ ๋Œ€์ƒ ์‹คํ–‰๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์€ GPU๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์Šฌํ”„๊ฒŒ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค!

docker-compose์—์„œ ์•„์ง / ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋Š” --gpus=all ์™€ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ docker start / run ๋ช…๋ น์— ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” docker-compose์— ๋Œ€ํ•œ "์ถ”๊ฐ€ ์˜ต์…˜"ํ•„๋“œ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ์‹  ๋„์ปค ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด compose ์‚ฌ์šฉ์ž๋Š” ์•„์ง ์ง€์›๋˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด docker ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ docker-compose๊ฐ€ ๋”ฐ๋ผ ์žก์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ์œ„ํ•ด Docker Swarm์—์„œ์ด๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Docker Swarm์ด ์œ ์šฉํ• ๊นŒ์š”?

@sebastianfelipe compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด๋ฆฌ์— ๋ฐฐํฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋น„๊ต:
docker service create --generic-resource "gpu=1" --replicas 10 \ --name sparkWorker <image_name> \"service ssh start && \ /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://<spark_master_ip>:7077\"

์ด๋Ÿฐ ์‹์œผ๋กœ

docker stack deploy --compose-file docker-compose.yml stackdemo

@sebastianfelipe compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด๋ฆฌ์— ๋ฐฐํฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋น„๊ต:
docker service create --generic-resource "gpu=1" --replicas 10 \ --name sparkWorker <image_name> \"service ssh start && \ /opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://<spark_master_ip>:7077\"

์ด๋Ÿฐ ์‹์œผ๋กœ

docker stack deploy --compose-file docker-compose.yml stackdemo

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ docker-compose yaml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ Docker Swarm๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ํ™•์‹คํ•˜๊ฒŒ : O. ๊ฐ์‚ฌ!

docker compose 2.x ์ „์šฉ

์ด ๋ฌธ์ œ์˜ ์š”์ ์€ docker-compose 3+์— ๋Œ€ํ•œ nvidia-docker GPU ์ง€์›์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›๋ž˜ ์˜๋ขฐ๋ฅผ๋ฐ›์€ ์ง€ ๊ฑฐ์˜ 1 ๋…„! ์™œ ์ง€์—ฐ ?? ์ด๊ฑธ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์„๊นŒ์š”?

ํ•‘ @KlaasH @ulyssessouza @Goryudyuma @ chris-crone. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด PR์—์„œ docker-py ์„ค์น˜ : docker / docker-py # 2471
  • ์ด PR์—์„œ docker-compose ์„ค์น˜ : # 7124

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ํŒŒ์ผ์—์„œ COMPOSE_API_VERSION=auto docker-compose run gpu ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

version: '3.7'

services:
    gpu:
        image: 'nvidia/cuda:9.0-base'
        command: 'nvidia-smi'
        device_requests:
            - capabilities:
               - "gpu"

์ €์ฒ˜๋Ÿผ ์ฐธ์„์„ฑ์ด์—†๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ์œ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ์‰ฌ์šด pip install ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

pip install git+https://github.com/docker/docker-py.git@refs/pull/2471/merge
pip install git+https://github.com/docker/compose.git@refs/pull/7124/merge
pip install python-dotenv

@yoanisgil์— ๋Œ€ํ•œ ์—„์ฒญ๋‚œ ๋ช…์„ฑ!
์—ฌ์ „ํžˆ ๊ณต์‹ ํŒจ์น˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  PR์ด ์ œ์ž๋ฆฌ์— ์žˆ์œผ๋ฉด ์–ด๋–ค ํ‘œ์ค€์—์„œ๋„ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•‘ @KlaasH @ulyssessouza @Goryudyuma @ chris-crone. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์™œ ์ „ํ™”๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒํ•ด์•ผํ•˜๋Š”์ง€ ๋งํ•ด ์ฃผ์…จ์œผ๋ฉด ํ•ด์š”?

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋„ค, ์ด์ œ 1 ๋…„์ด ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค ... ์™œ ๊ทธ๋“ค์ด docker-py์— ํ•ฉ๋ณ‘๋˜์ง€ ์•Š๋Š” ๊ฑฐ์ฃ  ...

์ œ์•ˆ ๋œ ๊ตฌํ˜„์ด Compose ํ˜•์‹์— ์ ํ•ฉํ•œ ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์†Œ์‹์€ ์šฐ๋ฆฌ๊ฐ€ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ถ”๊ฐ€ ํ•  ์˜๋„๋กœ ์ž‘์„ฑ ํ˜•์‹ ์‚ฌ์–‘์„ ์—ด์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์–‘์€ https://github.com/compose-spec ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์ œ๊ฐ€ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์‚ฌ์–‘์— ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ ํ•œ ๋‹ค์Œ ๊ณง์žˆ์„ Compose ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ์˜ ์ค‘ ํ•˜๋‚˜์—์„œ ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ( ์ด ํŽ˜์ด์ง€ ํ•˜๋‹จ์—์žˆ๋Š” ์ดˆ๋Œ€ ๋งํฌ).

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : docker run --gpus all nvidia/cudagl:9.2-runtime-centos7 nvidia-smi
๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค : docker run --runtime=nvidia nvidia/cudagl:9.2-runtime-centos7 nvidia-smi

๋‹น์‹ ์€ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค

{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

๊ณ„์† ์ž‘์—…ํ•˜๋ ค๋ฉด /etc/docker/daemon.json ์—์„œ --runtime=nvidia ์— ์—ฌ๊ธฐ์— ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€

Dockerd๋Š”์ด ๋ฐ๋ชฌ์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ธ์ƒ์—, ์ด๊ฒƒ์€ ๋ช‡ ๋…„์ด ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค : @

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค : docker run --gpus all nvidia/cudagl:9.2-runtime-centos7 nvidia-smi
@deniswal : ์˜ˆ, ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ž‘์„ฑ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ฌป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ chris-crone : ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค : ์ด๊ฒƒ์€ ์ด์ „ ๋™์ž‘์—์„œ ํšŒ๊ท€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์™œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์‚ฌ์–‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ผ๋ถ€๋Š” GPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ผ๋ถ€๋Š” ๋™์ผํ•œ ๋ฌผ๋ฆฌ์  ์ƒ์ž์—์„œ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ณ ๋ คํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ vk1z AFAIK Docker Compose๋Š” GPU๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํšŒ๊ท€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋””์ž์ธ์„ ํ•„์š”๋กœํ•˜๋Š” ๋ถ€๋ถ„์€ ์ž‘์„ฑ์˜ GPU (๋˜๋Š” ๋‹ค๋ฅธ ์žฅ์น˜) ํฌ๋งทํŒ… ๋ฐ ํŠนํžˆ ๊ฐ™์€ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์„œ๋น„์Šค์˜ ํ•„์š” ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค ์ด . ๊ทธ ํ›„์—๋Š” ๋ฐฑ์—”๋“œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆ ๋œ ๋ช‡ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด๋Ÿฐ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด @miriaford ๊ฐ€ ์ œ ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๊ณ  GPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
16GB ๋žจ์˜ i7์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ œ ๋ชฉํ‘œ๋Š” GPU ์„ฑ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ๊ฐ์‚ฌ!

@ chris-crone : ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, 2.4 ๊ตฌ์„ฑ ํ›„ ๋Ÿฐํƒ€์ž„ : ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ compose์—์„œ ์‚ฌ๋ผ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ํšŒ๊ท€๋ผ๊ณ  ๋Š๊ผˆ๋˜ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋‹ˆ, ์–ด์จŒ๋“  ์šฐ๋ฆฌ ๋ชจ๋‘ 3.x์— ์žˆ์–ด์•ผํ•˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์‚ฌ์–‘ ์ €์žฅ์†Œ์˜ ์‚ฌ์–‘์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒํ•˜๋‚˜์š”?

2.4 ๊ตฌ์„ฑ ํ›„ ๋Ÿฐํƒ€์ž„ : ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ compose์—์„œ ์‚ฌ๋ผ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ํšŒ๊ท€๋ผ๊ณ  ๋Š๊ผˆ๋˜ ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. Docker-compose ํŒŒ์ผ์—์„œ runtime: nvidia ์‚ฌ์šฉ์— ์˜์กดํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ๋Š”๋ฐ,์ด ๋ฌธ์ œ๋Š” GPU๋ฅผ ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 3.x๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ œ๋ฐœ, ์ œ๋ฐœ ๊ณ ์ณ์ฃผ์„ธ์š”.
๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์šฐ์„  ์ˆœ์œ„ -20์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, 2.4 ๊ตฌ์„ฑ ํ›„ ๋Ÿฐํƒ€์ž„ : ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ compose์—์„œ ์‚ฌ๋ผ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ํšŒ๊ท€๋ผ๊ณ  ๋Š๊ผˆ๋˜ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋‹ˆ, ์–ด์จŒ๋“  ์šฐ๋ฆฌ ๋ชจ๋‘ 3.x์— ์žˆ์–ด์•ผํ•˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ์„ ๋•Œ ์—ฌ๊ธฐ์— ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œ ๋œ ์ด์œ ๋ฅผ 100 % ํ™•์‹  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ GPU๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด NVIDIA ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‹จ์ผ ๋ฒ„์ „์˜ ์‚ฌ์–‘์„ ๋งŒ๋“ค๋ ค๋Š” ์˜๋„๋กœ ์—ฌ๊ธฐ ์—์„œ Compose v3 ์‚ฌ์–‘์„ ๋ฐœ์ „์‹œํ‚ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ถ€ v2 ๊ธฐ๋Šฅ์„ v3๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

runtime ํ•„๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋‹จ์ผ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋งค์šฐ ๊ตฌ์ฒด์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด Compose ์‚ฌ์–‘์— ์ถ”๊ฐ€๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ์›Œํฌ๋กœ๋“œ์— ๊ธฐ๊ธฐ ์š”๊ตฌ ์‚ฌํ•ญ (์˜ˆ : GPU, TPU, ๋‹ค์Œ์— ์˜ค๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ)์ด ์žˆ์Œ์„ ์ง€์ •ํ•œ ๋‹ค์Œ ์˜ค์ผ€ ์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋…ธ๋“œ์— ์›Œํฌ๋กœ๋“œ๋ฅผ ํ• ๋‹น ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์€ Python Docker Compose์™€ ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์–‘์— ๋Œ€ํ•ด ์ด๋ฃจ์–ด์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค.

@ chris-crone : ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„ ๋‹น์‹ ์˜ ์ง„์ˆ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ๊ธฐ ํ•ดํ‚น์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ž์ฒด ๋Ÿฐํƒ€์ž„์ด์žˆ๋Š” ์—์ง€ ์žฅ์น˜๊ฐ€ ๊ธ‰์ฆํ•˜๊ธฐ ๋•Œ๋ฌธ์—์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ• ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Pi์˜ TPU (Google), VPU (Intel) ๋ฐ ARM GPU๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋” ์™„์ „ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์‚ฌ์–‘์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ณ  ์ž‘์—…์„ ๋งˆ์น˜๋ฉด์ด ์Šค๋ ˆ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ์˜ค์ผ€ ์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ ๋…๋ฆฝ์ ์ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kube๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฒ”์œ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” GPUs ๋ฌธ ์‚ฌ์šฉ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ compose์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ chris-crone : ์ œ์ถœ ๋œ docker-compose ์‚ฌ์–‘ ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๋‚˜๋Š” ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ์ˆœํžˆ extra_docker_run_args ์™€ ๊ฐ™์€ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋ณธ docker run ์ธ์ˆ˜๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ํ˜„์žฌ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฏธ๋ž˜์—๋„ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. docker๊ฐ€ "XPU", โ€‹โ€‹"YPU"๋˜๋Š” ๋ฏธ๋ž˜์— ๋‚˜์˜ฌ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

docker๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ๋•Œ๋งˆ๋‹ค ๊ธด ์•ž๋’ค๋กœ ๋…ผ์˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋ฉฐ docker-compose ์™€ docker ์—…๋ฐ์ดํŠธ ์‚ฌ์ด์— ๋ถˆ๊ฐ€ํ”ผํ•œ ์ง€์—ฐ (๋ถˆํ•„์š”ํ•œ ํ˜ผ๋ž€)์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์œ„์ž„์„ ์ง€์›ํ•˜๋ฉด ํ–ฅํ›„ ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์ด ๋ฐ˜๋ณต์  ์ธ ๋ฌธ์ œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์™„ํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@miriaford ํ•ด์„๋˜์ง€ ์•Š์€ blob์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์„ ์–ธ์ ์ด๋ผ๋Š” ์ž‘์„ฑ ๊ฐœ๋…์„ ์ง€์›ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋Ÿฐํƒ€์ž„ ํƒœ๊ทธ๋Š” ์ ์–ด๋„ ๋Ÿฐํƒ€์ž„๊ณผ ๊ด€๋ จ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋„ ์ปค๊ฐ€ ์œ ํ–‰ํ•˜๋Š” ๋ฐฉํ–ฅ (docker-apps)์„ ๊ฐ์•ˆํ•  ๋•Œ ์˜ค์ผ€ ์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ ์ž„์˜์˜ blob์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์„ ์–ธ์  ๋ฐฐํฌ๊ฐ€ ๋” ์–ด๋ ค์›Œ ์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” compose์™€ docker ๊ฐ€ ๋™๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค (์ฃผ์š” ๋ฆด๋ฆฌ์Šค ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ).

@ vk1z ๋™์˜ํ•ฉ๋‹ˆ๋‹ค- compose ์™€ docker ์‚ฌ์ด์— ํ›จ์”ฌ ๋” ๋‚˜์€ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์กฐ๋งŒ๊ฐ„ ์„ค๊ณ„ ๋  ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œํŽธ, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊นŠ์ˆ™์ด ํ•ดํ‚นํ•˜์ง€ ์•Š๊ณ  ์ž์ฒด ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ์ž„์‹œ ๋ฐฉ๋ฒ•๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ˆ˜ ์œ„์ž„ ์ œ์•ˆ์ด ์„ ํƒ ์‚ฌํ•ญ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ์œ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ ์–ด๋„ _ ํ›จ์”ฌ _ ๋‚ซ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? https://github.com/docker/compose/issues/6691#issuecomment -616984053

@miriaford docker-compose๋Š” ์ธ์ˆ˜๋กœ docker Executive๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ๋กœ docker ๋ฐ๋ชฌ์— http API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” docker_py๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "๊ธฐ๋ณธ docker run "๋ช…๋ น์ด ์—†์Šต๋‹ˆ๋‹ค. Docker CLI๋Š” API๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์†Œ์ผ“ ์—ฐ๊ฒฐ์€ API ์ ‘์ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•ญ์ƒ ๊ทธ๋ ‡๊ฒŒ ์‰ฌ์šด ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ณผ๋„ํ•˜๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ปค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ํ˜ธ์ถœ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•˜๋‚˜๋Š” ์‹œ์ž‘ํ•˜๋Š” ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ docker CLI๋ฅผ ์•„๋Š” ๊ฒฝํ–ฅ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker_py ํ˜ธ์ถœ์— ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ƒ๊ฐ๋งŒํผ ์œ ์šฉ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒํ™ฉ์„ ๋”์šฑ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋•Œ๋•Œ๋กœ docker_py ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ API ๋’ค์— ์žˆ์œผ๋ฉฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ฆ‰์‹œ ํฌํ•จ๋˜์ง€ ์•Š๊ณ  ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ extra_docker_run_args ๋Š” ๋‹จ์ˆœํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค.

@andyneff ์„ค๋ช…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ €๋Š” Docker์˜ ๋‚ด๋ถ€ ์ž‘๋™์— ๋„ˆ๋ฌด ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์ˆ˜๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•ด์•ผํ•˜๋Š” 4 ๊ฐœ์˜ API ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Docker ์†Œ์ผ“ API
  2. ์†Œ์ผ“ API์— ํŒŒ์ด์ฌ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” docker_py
  3. Docker CLI (๋„์ปค ํˆด์ฒด์ธ์— ๋Œ€ํ•œ ์นœ์ˆ™ํ•œ ์ง„์ž… ์ )
  4. Docker ์†Œ์ผ“ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” Docker ์ž‘์„ฑ ์ธํ„ฐํŽ˜์ด์Šค

์ด๊ฒƒ์€ ์™œ ์ž๋™ (๋˜๋Š” ์ ์–ด๋„ ๋ฐ˜์ž๋™) ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†๋Š”๊ฐ€? 4 ๊ฐœ์˜ API์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ „ํŒŒํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง€์—ฐ๋˜๊ธฐ ์‰ฌ์šฐ ๋ฉฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

์ถ”์‹  : ์ž๋™ ๋™๊ธฐํ™”๋ฅผํ•˜๋Š” ๊ฒƒ์ด _ ๊ฐ„๋‹จํ•œ _ ์ž‘์—…์ด๋ผ๋Š” ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ฏธ๋ž˜์˜ ์‚ถ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜์žˆ๋Š” ์ž‘์—…์ด ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ข€ ํ˜„ํ•™์— ๋น ์ ธ๋“ค๊ณ  ์žˆ์–ด์š” ...ํ•˜์ง€๋งŒ ์ œ๊ฐ€ ์„ค๋ช… ํ•˜๊ฒ ์ง€๋งŒ ...

  • ๋„์ปค ์†Œ์ผ“์€ ๋„์ปค์˜ ๊ณต์‹ API์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ข…์ข… ํŒŒ์ผ ์†Œ์ผ“์ด์ง€๋งŒ TCP (๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ, socat ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒ) ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • docker CLI๋Š”์ด API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ‹์ง„ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    • Docker๋Š” API ๋ฐ CLI๋ฅผ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ๋ฆด๋ฆฌ์Šค์‹œ ํ•ญ์ƒ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. (CLI๋Š” ๋„์ปค ์ƒํƒœ๊ณ„์˜ ์ผ๋ฅ˜ ์‹œ๋ฏผ์ž…๋‹ˆ๋‹ค.)

  • docker_py ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ•ด๋‹น API๋ฅผ ๊ฐ€์ ธ ์™€์„œ ๋‹ค๋ฅธ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ฉ‹์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—†์œผ๋ฉด ์ด๋Ÿฌํ•œ ๋ชจ๋“  HTTP ํ˜ธ์ถœ์„ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ๋จธ๋ฆฌ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    • ๊ทธ๋Ÿฌ๋‚˜ docker_py๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฏ€๋กœ ์ „ํ†ต์ ์œผ๋กœ docker API๋ฅผ ๋’ค์กŒ๊ณ  ๋‚˜์ค‘์— ๋˜๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค (์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค).

  • compose๋Š” docker_py ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ).

    • ๊ทธ๋Ÿฌ๋‚˜ compose๋Š” docker_py๊นŒ์ง€ ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (๋‚ด๊ฐ€ ๋งํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

  • "yaml + compose ์ธ์ˆ˜ ์ž‘์„ฑ"-> "docker_py"-> "docker_api"
  • ๊ทธ๋ฆฌ๊ณ  CLI๋Š” ์ด๊ฒƒ์˜ ์–ด๋–ค ๋ถ€๋ถ„๋„ ์•„๋‹™๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์ €๋ฅผ ๋ฏฟ์œผ์‹ญ์‹œ์˜ค, ๊ทธ๊ฒƒ์ด ์ผ์„ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค)

๋‚˜๋Š” docker_py ๋˜๋Š” compose์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์—†์ง€๋งŒ ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์— ๊ธฐ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— docker๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฏธ์นœ ๋ฏธ์นœ ๋„์ปค ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๋”ฐ๋ผ ์žก๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ docker๋Š” go ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ด์ฌ ์ง€์›์€ (ํ˜„์žฌ) ์ผ๋ฅ˜ ์‹œ๋ฏผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ชจ๋‘ ๋„์ปค ์šฐ์‚ฐ ์•„๋ž˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์ ์–ด๋„ github ์กฐ์ง ๊ด€์ ์—์„œ ๋ณผ ๋•Œ.


๊ทธ๋ž˜์„œ ๋ชจ๋‘ ๋งํ•˜๋ฉด ... ์ €๋„ ๋™๋“ฑํ•œ --gpus ์ง€์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์œผ๋ฉฐ, ๋Œ€์‹ ์— ์ด์ „ runtime: nvidia ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ด๋™ ๊ฒฝ๋กœ๋ฅผ "a"์ œ๊ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. docker-compose 2.x์—์„œ ์•ž์œผ๋กœ.

@andyneff ์ฐธ๊ณ ๋กœ ์ตœ์‹  docker-compose์— Docker CLI ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋นŒ๋“œ ํ‚ท์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://www.docker.com/blog/faster-builds-in-compose-thanks-to-buildkit-support/

@andyneff ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•œ ๊ฐœ์š”์ž…๋‹ˆ๋‹ค! ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

@lig ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค! ์ˆ˜์ • ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ €๋Š” ์‹ค์ œ๋กœ "๋นŒ๋“œ ํ‚ท์ด์ด ๋ชจ๋“  ๊ฒƒ์— ์–ด๋–ป๊ฒŒ ๋“ค์–ด ๋งž์„๊นŒ"๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์กฐ๊ธˆ ๋†€๋ž€ ๊ฒƒ์€ docker-compose๊ฐ€ ์ƒˆ๋กœ์šด docker-app ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ๋งค์šฐ ๋ณธ์งˆ์ ์ธ ๋ถ€๋ถ„์ด๋ฉฐ ์ ์–ด๋„ ๊ทธ ์ด์œ  ๋•Œ๋ฌธ์— docker-compose์™€ docker๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ ๋Œ€์—ญํญ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์กฐ๊ธˆ ๋ฏฟ์„ ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Docker Swarm์€ @andyneff๊ฐ€ ๋ฐฉ๊ธˆ ์„ค๋ช…ํ•œ ๊ตฌ์กฐ์— ์–ด๋–ป๊ฒŒ ๋งž์Šต๋‹ˆ๊นŒ? Swarm์€ compose ํŒŒ์ผ ํ˜•์‹ ๋ฒ„์ „ 3 ( "compose"ํ”„๋กœ์ ํŠธ์—์„œ ์ •์˜?)์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ docker ?

์ด ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ฃผ์ œ๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ถ”์ ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ, ํŠน์ • ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋–ผ์—์„œ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค์— ์•Œ๋ฆฌ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋”ฐ๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. compose-file ์‚ฌ์–‘์˜ v2์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, v3์ด ํ•„์š”ํ•œ Swarm์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, docker-compose CLI๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์—๋Š” ์‹ค์ œ๋กœ ๊ด€์‹ฌ์ด ์—†์ง€๋งŒ docker swarm์—์„œ ์‚ฌ์šฉํ•˜๋Š” docker-compose.yml ํŒŒ์ผ์— ๋Œ€ํ•ด ์ •์˜ ๋œ ์‚ฌ์–‘์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค ๋–ผ, ๋„๋ง์นœ ์‚ฌ๋žŒ ... (๋‚ด๊ฒŒ์„œ). ๋ถˆํ–‰ํžˆ๋„ ๊ทธ๊ฒƒ์€ BOT์— ์˜ํ•ด ๋‹ซํžŒ # 6239์ž…๋‹ˆ๋‹ค. :( ๋ˆ„๊ตฐ๊ฐ€ # 6240์—์„œ ์‹œ๋„ํ–ˆ์ง€๋งŒ ...

@miriaford , ๋™๊ธฐํ™”์— ๋Œ€ํ•œ PR์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! # 6642 ?! (v3 ์ „์šฉ์ธ๊ฐ€์š” ???)


๋”ฐ๋ผ์„œ ์Šค์›œ์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์Šค์›œ ๋…ธ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…๊ณผํ•˜์ง€ ์•Š๋Š” ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Docker API๋Š” ์ผ๋ฐ˜์ ์ธ ์‹คํ–‰๊ณผ ๊ฐ™์ด ๋ฌด๋ฆฌ ์‹คํ–‰์—์„œ ํ•ญ์ƒ ๋™์ผํ•œ ์˜ต์…˜์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์ด ์ด๋Ÿฌํ•œ ์ž‘์—… ์ค‘ ํ•˜๋‚˜์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ด๊ฒƒ์ด ์ข…์ข… v3 (์Šค์›œ ํ˜ธํ™˜ ๋ฒ„์ „)์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์—†๊ณ  v2 (์Šค์›œ ํ˜ธํ™˜ ๋ฒ„์ „์ด ์•„๋‹Œ ๋ฒ„์ „)์—์„œ๋Š” ํ•  ์ˆ˜์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์„ ์ฝ๋Š” ์‚ฌ๋žŒ์€ ๋„ˆํฌ๋“ค์ด ๋ฌด์Šจ ๋ง์„ํ•˜๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.
์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ๊ธฐ๋Šฅ์ด์žˆ๋Š” jellyfin์„ ๋ฐฐํฌํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ๋ถ„์ด์ด ๋ฌธ์ œ๋ฅผ ์›๋ž˜๋Œ€๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์ „๊นŒ์ง€๋Š” ์„œ๋น„์Šค๋ผ๊ณ  ํ•  ๋•Œ 3.x๋Š” ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด 2.4๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ jellyfin, ez์— ํ•˜๋“œ์›จ์–ด ๊ฐ€์†์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž, ์—ฌ๋Ÿฌ๋ถ„, ์ด๊ฒƒ์— ๋Œ€ํ•œ ETA๋Š” 1 ๋…„, 2 ๋…„?

@KlaasH @ulyssessouza @Goryudyuma @ chris-crone ์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š”์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. "docker-py"์—์„œ ์ง€์›์ด ๋ˆ„๋ฝ๋˜์—ˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์—์„œ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž‘๋™ํ•˜๊ฒŒํ•˜๋ ค๋ฉด docker-compose.yml ํŒŒ์ผ์„ ํ†ตํ•ด ๊ตฌ์„ฑ์„ ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋ฅผ ๋„์™€ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ฆ‰, ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ƒˆ ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€ํ•ด์•ผํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ์„ ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ์œ„์น˜๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@fakabbir ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด COMPOSE_DOCKER_CLI_BUILD ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. docker run ์ธ์ˆ˜์˜ ์ž„์˜ ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ–ฅํ›„ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@lig ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ๋งŒ GPU์— ์•ก์„ธ์Šค

@lig AFAICS compose๋Š” docker-py docker run cli ๋Œ€์‹  docker-py ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž„์˜์˜ docker run ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ docker-py ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ : https://github.com/docker/compose/issues/6691#issuecomment -585199425

์ด ํ•˜๋‚˜์˜ ๊ฒƒ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ docker-compose์˜ ์œ ์šฉ์„ฑ์„ ํฌ๊ฒŒ ๋–จ์–ด ๋œจ๋ฆฝ๋‹ˆ๋‹ค. ํŠนํžˆ ์˜ค๋ž˜๋œ docker-compose์—์„œ ์ž‘๋™ํ–ˆ์„ ๋•Œ ๋งŽ์€ ๊ด€์‹ฌ๊ณผ ์š•๊ตฌ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋†€๋ž์Šต๋‹ˆ๋‹ค.
ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ž„์˜์˜ docker --run ์ธ์ˆ˜๋ฅผ docker-compose ํŒŒ์ผ์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ --gpus all ์˜ˆ๋ฅผ ๋“ค์–ด docker์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŠน์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๊ฒƒ์„ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฒ ํ•™์  ๋˜๋Š” ๊ธฐ์ˆ ์  ์ด์œ ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์†์„ ๋ป—์ง€ ์•Š๊ณ  ์–ด๋–ค ์‹ ์œผ๋กœ๋“  ๊ทธ๊ฒƒ์„ํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์Œ์„ ๋น„ํ‹€ ๊ฑฐ๋ฆฌ๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

@lig ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ๋งŒ GPU์— ์•ก์„ธ์Šค

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ NVIDIA_VISIBLE_DEVICES๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ œ์–ด ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํ•˜๋‚˜์˜ ๊ฒƒ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ docker-compose์˜ ์œ ์šฉ์„ฑ์„ ํฌ๊ฒŒ ๋–จ์–ด ๋œจ๋ฆฝ๋‹ˆ๋‹ค. ํŠนํžˆ ์˜ค๋ž˜๋œ docker-compose์—์„œ ์ž‘๋™ํ–ˆ์„ ๋•Œ ๋งŽ์€ ๊ด€์‹ฌ๊ณผ ์š•๊ตฌ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋†€๋ž์Šต๋‹ˆ๋‹ค.
ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ž„์˜์˜ docker --run ์ธ์ˆ˜๋ฅผ docker-compose ํŒŒ์ผ์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ --gpus all ์˜ˆ๋ฅผ ๋“ค์–ด docker์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” docker --run args ์ „๋‹ฌ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. compose ๋Š” ์‹ค์ œ๋กœ docker ์ž์ฒด๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  docker-py ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŠน์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๊ฒƒ์„ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฒ ํ•™์  ๋˜๋Š” ๊ธฐ์ˆ ์  ์ด์œ ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์†์„ ๋ป—์ง€ ์•Š๊ณ  ์–ด๋–ค ์‹ ์œผ๋กœ๋“  ๊ทธ๊ฒƒ์„ํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์Œ์„ ๋น„ํ‹€ ๊ฑฐ๋ฆฌ๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ PR์ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/docker/compose/pull/7124. "์†์„ ์žก์œผ์‹ญ์‹œ์˜ค".

๋‚˜๋Š” docker compose spec์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ compose 2.4์— ๋”ฐ๋ผ ์ด์ „ ํ˜ธํ™˜์„ฑ์œผ๋กœ ๊ณง ๋Œ์•„์™€์•ผํ•˜๋ฉฐ nvidia ๋Ÿฐํƒ€์ž„์ด ์ž‘๋™ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ TPU ๋˜๋Š” ๊ธฐํƒ€ ๊ฐ€์†๊ธฐ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์•ˆํƒ€๊น์ง€๋งŒ (๋น„์‹ผ) nvidia gpus๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ docker-py์˜ ๋…น์ƒ‰ PR์ด ๋ณ‘ํ•ฉ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/docker/docker-py/pull/2471

๋„ค! docker-py์˜ PR์ด ์Šน์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! https://github.com/docker/docker-py/pull/2471
์—ฌ๊ธฐ์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์— ๋ญ๊ฐ€ ์žˆ์–ด์š”? docker-compose์—์„œ nvidia ๋Ÿฐํƒ€์ž„์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/docker/docker-py/pull/2471 ์ด ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

docker / docker-py # 2471 ์ด ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฏ€๋กœ master์—์„œ docker-py๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ docker-compose๊ฐ€ @yoanisgil ์˜ ๋ฉ‹์ง„ [PR] (https://github.com/docker/compose/pull/7124) (Kudos!) ์ดํ›„๋กœ ๋ณ€๊ฒฝ

์ด์ „ ๋Œ“๊ธ€์„ ๋ณด์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์— ์˜จ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด :

pip install git+https://github.com/docker/docker-py.git
pip install git+https://github.com/yoanisgil/compose.git@device-requests

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž‘์„ฑ ํŒŒ์ผ์—์„œ ๋‹ค์Œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์ถœ์ฒ˜ : ์˜๊ฒฌ ) :

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ํŒŒ์ผ๋กœ COMPOSE_API_VERSION=auto docker-compose run gpu ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

version: '3.7'

services:
    gpu:
        image: 'nvidia/cuda:9.0-base'
        command: 'nvidia-smi'
        device_requests:
            - capabilities:
               - "gpu"

์ด๊ฒƒ์ด ๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Swarm๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜์—์„œ docker-compose์˜ ํŠน์ • ์ปค๋ฐ‹์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. # 7124๋ฅผ ๋ฆฌ๋ฒ ์ด์Šคํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ์šด docker-py ๋ฅผ ํ†ตํ•ฉ ํ•  ๋‹ค๋ฅธ PR์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @bkakilli ,

๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ ์ œ์•ˆ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ docker-compose๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.analysis: 'device_requests'

_ ๋‚ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ด๋˜๋Š” ๋ถ„์„ _

docker-compose.yml ๋ณ€๊ฒฝ :

version: '2.3'

services:
    analysis:
        container_name: analysis
        image: analysis:${TAG}
        runtime: nvidia
        restart: always
        ports:
            - "8000:80"

์—:

version: '3.7'

services:
    analysis:
        container_name: analysis
        image: analysis:${TAG}
        device_requests:
          - capabilities:
            - "gpu"
        restart: always
        ports:
            - "8000:80"

์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด pip install git+ ์™ธ์— ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ž˜๋ชป ํŽธ์ง‘ ํ–ˆ์Šต๋‹ˆ๊นŒ?

@frgfm ์˜ฌ๋ฐ”๋ฅธ ๋งํฌ์—์„œ compose ๋ฐ docker-py๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. yoanisgil์˜ ํฌํฌ (๋ฐ ๋ธŒ๋žœ์น˜) ๋Œ€์‹  docker-compose์˜ ์ž์ฒด ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

pip install git+https://github.com/yoanisgil/compose.git@device-requests

--upgrade ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ pip ์„ค์น˜์— ๋„ฃ์–ด๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ€์ƒ ํ™˜๊ฒฝ ์„ค์ •์ด ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ docker-compose ์„ค์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด https://docs.docker.com/compose/install/ ์—์„œ "Linux"์ง€์นจ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์— ์„ค์น˜ํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์•ˆ๋…•ํ•˜์„ธ์š”!
๋ชจ๋“  ์ •๋ณด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @bkakilli ๋ฐ docker-compose build ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹คํ–‰ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ docker-compose up ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
docker.errors.InvalidVersion: device_requests param is not supported in API versions < 1.40

๋‚ด docker_compose.yml์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

version: '3.7'

networks:
  isolation-network:
    driver: bridge

services:
 li_t5_service:
    build: .
    ports:
      - "${GRAPH_QL_API_PORT}:5001"
    device_requests:
      - capabilities:
        - "gpu"
    environment:
      - SSH_PRIVATE_KEY=${SSH_PRIVATE_KEY}
      - PYTHONUNBUFFERED=${PYTHONUNBUFFERED}
    networks: 
      - isolation-network

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@ugmSorcero ํ™˜๊ฒฝ ๋ณ€์ˆ˜ COMPOSE_API_VERSION=1.40 ํ•œ ๋‹ค์Œ ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

@ugmSorcero ๊ทธ ์˜ค๋ฅ˜๋ฅผ ๊ณ ์ณค์Šต๋‹ˆ๊นŒ? @EpicWink @bkakilli pip ์„ค์น˜์—์„œ ๋ช…์‹œ๋œ ๋ฒ„์ „์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ 1.40์œผ๋กœ ๋‚ด๋ณด๋‚ด๋„ device_requests param is not supported in API versions < 1.40 ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ ์ž‘์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ

version: "3.7"
services:
  spam:
    image: nvidia/cuda:10.1-cudnn7-runtime
    command: nvidia-smi
    device_requests:
      - capabilities:
          - gpu

์œ„์™€ ๊ฐ™์ด ์„ค์น˜๋œ docker-compose ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ Linux์˜ Bash์—์„œ ๋‹ค์Œ ๋ช…๋ น์ด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

COMPOSE_API_VERSION=1.40 docker-compose up

๋‹ค์Œ ๋ช…๋ น์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

docker-compose up

์˜ค๋ฅ˜ ์ถœ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ERROR: for tmp_spam_1  device_requests param is not supported in API versions < 1.40
...
docker.errors.InvalidVersion: device_requests param is not supported in API versions < 1.40

@EpicWink ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” docker-compose up ์ด ๊ทธ๋ ‡๊ฒŒ ์‹คํ–‰๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž๋‹ค. ๋จผ์ € COMPOSE_API_VERSION ๋ณ„๋„๋กœ ๋‚ด ๋ณด๋‚ธ 2 ๋‹จ๊ณ„๋กœ ์ทจํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์‹คํ–‰ํ•˜๋ฉด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

๊ทธ๋ž˜๋„ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. COMPOSE_API_VERSION=1.40 docker-compose run nvidiatest ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด nvidia-smi ๊ฐ€ ๊ฒฝ๋กœ์—์—†๋Š” ๋ฐ˜๋ฉด ์ด๋ฏธ์ง€์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

docker-compose ๋กœ์ปฌ ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

nvidiatest:
    image: nvidia/cuda:10.0-base
    device_requests:
      - capabilities:
        - gpu
    command: nvidia-smi

ํ˜„์žฌ ์„ค์ • (api ๋ฒ„์ „ auto ๋ฐ 1.40 ๋ชจ๋‘)์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

COMPOSE_API_VERSION=auto docker-compose -f docker-compose.yml -f docker-compose.local.yml run nvidiatest
Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"nvidia-smi\": executable file not found in $PATH": unknown

๋Œ€์ฒด ํŒŒ์ผ ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? Docker๋กœ cuda ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜๋ฉด nvidia-smi ์—์„œ ์ถœ๋ ฅ์„ ์–ป๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

docker run --gpus all nvidia/cuda:10.0-base nvidia-smi
Mon Aug 24 11:40:04 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2070    Off  | 00000000:29:00.0  On |                  N/A |
|  0%   46C    P8    19W / 175W |    427MiB /  7974MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

๊ณต์‹ ๋ฌธ์„œ์—์„œ ์„ค์น˜๋œ ๋ฒ„์ „์„ ์ œ๊ฑฐํ•œ ํ›„ git์—์„œ ์œ„์˜ ์ง€์นจ์— ๋”ฐ๋ผ docker-compose ๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋œ ๋ฒ„์ „ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pip3 show --verbose docker-compose
Name: docker-compose
Version: 1.26.0.dev0
Summary: Multi-container orchestration for Docker
Home-page: https://www.docker.com/
Author: Docker, Inc.
Author-email: None
License: Apache License 2.0
Location: /home/jurugu/.local/lib/python3.8/site-packages
Requires: docopt, docker, requests, PyYAML, texttable, websocket-client, six, dockerpty, jsonschema, cached-property
Required-by:
Metadata-Version: 2.1
Installer: pip
Classifiers:
  Development Status :: 5 - Production/Stable
  Environment :: Console
  Intended Audience :: Developers
  License :: OSI Approved :: Apache Software License
  Programming Language :: Python :: 2
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3
  Programming Language :: Python :: 3.4
  Programming Language :: Python :: 3.6
  Programming Language :: Python :: 3.7
Entry-points:
  [console_scripts]
  docker-compose = compose.cli.main:main

๋‚ด๊ฐ€ ๋†“์นœ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@jjrugui ์ด๊ฒƒ์€ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ

@EpicWink ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ฃผ์ œ์—์„œ

๋ˆ„๊ตฐ๊ฐ€ ๋‹ค๋ฅธ PR์—์„œ ์ž‘์—… ์ค‘์ด๊ฑฐ๋‚˜ PR์„ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด device-requests ๋ธŒ๋žœ์น˜๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

PR์ด ๋ฉˆ์ถ˜ ์ƒํƒœ์—์„œ ์ข…์†์„ฑ ๋“ฑ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด # 7124์—์„œ master ๋ธŒ๋žœ์น˜์˜ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ด์‹ํ–ˆ์Šต๋‹ˆ๋‹ค.- https : pip install git+https://github.com/beehiveai/compose.git ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. docker-compose.yml ์˜ ๋ฒ„์ „์„ 3.8 :

version: "3.8"
services:
  gpu-test:
    image: nvidia/cuda:10.2-runtime
    command: nvidia-smi
    device_requests:
      - capabilities:
          - gpu

์ด ์„ค์ •์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์–ด์ œ compose-spec ๊ฑฐ๋ฒ„๋„Œ์Šค ํšŒ์˜ ์—์„œ deploy ์„น์…˜์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” generic_resouces ๊ทผ์ ‘ ํ•  ์ˆ˜์žˆ๋Š” # 7124์™€ ๋น„์Šทํ•œ ๊ฒƒ์„ ์ฑ„ํƒํ•˜๊ธฐ์œ„ํ•œ ์ œ์•ˆ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ndeloof ๋Œ€๋‹จํ•ฉ๋‹ˆ๋‹ค! ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ์— ์ œ์•ˆ ๋งํฌ๋ฅผ ๊ฒŒ์‹œํ•˜์‹ญ์‹œ์˜ค. GPU ์ง€์›์ด ๋”ฅ ๋Ÿฌ๋‹ ๋ฐฐํฌ์— ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๊บผ์ด ๊ธฐ์—ฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ndeloof ์—ญ์‚ฌ์ ์œผ๋กœ ์šด์˜์œ„์›ํšŒ๊ฐ€ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋‚˜์š”? 6 ๊ฐœ์›”, 1 ๋…„?

+1

+1

@visheratin ์—ฌ๋Ÿฌ compose yml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘๋™ํ•˜๋„๋ก ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋น„ nvidia ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ docker-compose.yml์ด ์žˆ๋Š”๋ฐ, GPU๊ฐ€์žˆ์„ ๋•Œ nvidia ์ปจํ…Œ์ด๋„ˆ๋กœ ์žฌ์ •์˜ํ•˜๊ณ  ์‹ถ์ง€๋งŒ "- f ","device_requests "ํ•„๋“œ๊ฐ€ ๊ตฌ์„ฑ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

@proximous "๊ตฌ์„ฑ์—์„œ ์ œ์™ธ"๋ž€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋“  ์ž‘์„ฑ ํŒŒ์ผ์— ๋ฒ„์ „ 3.8์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋” ์‰ฝ๊ฒŒ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์ œ๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

docker-compose up๊ณผ ํ•จ๊ป˜ --scale ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ compose / service.py์˜ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์—ญ ์ถ”์  (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰) :
ํŒŒ์ผ "/ usr / local / bin / docker-compose", 11 ํ–‰, in
load_entry_point ( 'docker-compose == 1.27.0.dev0', 'console_scripts', 'docker-compose') ()
์ฃผ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/cli/main.py", 67 ํ–‰
๋ช…๋ น()
perform_command์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/cli/main.py", 123 ํ–‰
ํ•ธ๋“ค๋Ÿฌ (๋ช…๋ น, ๋ช…๋ น _ ์˜ต์…˜)
ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/cli/main.py", 1067 ํ–‰, ์œ„๋กœ
to_attach = up (False)
ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/cli/main.py", 1063 ํ–‰, ์œ„๋กœ
cli = native_builder,
ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/project.py", 648 ํ–‰, ์œ„๋กœ
get_deps,
"/usr/local/lib/python3.6/site-packages/compose/parallel.py"ํŒŒ์ผ, 108 ํ–‰, parallel_execute
error_to_reraise ๋ฐœ์ƒ
์ƒ์‚ฐ์ž์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/parallel.py", 206 ํ–‰
๊ฒฐ๊ณผ = func (obj)
ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/project.py", 634 ํ–‰, do
override_options = override_options,
execute_convergence_plan์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 579 ํ–‰
renew_anonymous_volumes,
_execute_convergence_recreate์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 509 ํ–‰
์Šค์ผ€์ผ-len (์ปจํ…Œ์ด๋„ˆ), ๋ถ„๋ฆฌ๋จ, ์‹œ์ž‘
_execute_convergence_create์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 479 ํ–‰
"๋งŒ๋“ค๊ธฐ"
"/usr/local/lib/python3.6/site-packages/compose/parallel.py"ํŒŒ์ผ, 108 ํ–‰, parallel_execute
error_to_reraise ๋ฐœ์ƒ
์ƒ์‚ฐ์ž์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/parallel.py", 206 ํ–‰
๊ฒฐ๊ณผ = func (obj)
ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 477 ํ–‰
๋žŒ๋‹ค service_name : create_and_start (self, service_name.number),
"/usr/local/lib/python3.6/site-packages/compose/service.py"ํŒŒ์ผ, 456 ํ–‰, create_and_start
์ปจํ…Œ์ด๋„ˆ = service.create_container (number = n, quiet = True)
create_container์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 333 ํ–‰
previous_container = ์ด์ „ _ ์ปจํ…Œ์ด๋„ˆ,
_get_container_create_options์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 936 ํ–‰
one_off = one_off)
_get_container_host_config์˜ ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 1014 ํ–‰
device_request [ 'capabilities']]์˜ ์š”์†Œ์— ๋Œ€ํ•œ element.split ( ',')
ํŒŒ์ผ "/usr/local/lib/python3.6/site-packages/compose/service.py", 1014 ํ–‰
device_request [ 'capabilities']]์˜ ์š”์†Œ์— ๋Œ€ํ•œ element.split ( ',')
AttributeError : 'list'๊ฐœ์ฒด์— 'split'์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋””๋ฒ„๊น… ํ›„ --scale์„ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ค ์ด์œ ๋กœ ํ•œ ์ธ์Šคํ„ด์Šค์— [ 'gpu']๋กœ device_requests [ 'capabilities']๊ฐ€ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ์ž‘๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ device_request [ 'capabilities']๋Š” ๋Œ€์‹  [[ 'gpu']]์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด compose / service.py์˜ 1010 ํ–‰์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ์—์„œ ์ž„์‹œ ์ˆ˜์ •์„ํ–ˆ์Šต๋‹ˆ๋‹ค.

```
device_requests์˜ device_request์˜ ๊ฒฝ์šฐ :
device_request์— 'capabilities'๊ฐ€์—†๋Š” ๊ฒฝ์šฐ :
๊ณ„์†ํ•˜๋‹ค
if type (device_request [ 'capabilities'] [0]) == ๋ชฉ๋ก :
device_request [ 'capabilities'] = [
device_request [ 'capabilities'] [0]]์˜ ์š”์†Œ์— ๋Œ€ํ•œ element.split ( '.')
๊ทธ๋ฐ–์—:
device_request [ 'capabilities'] = [
device_request [ 'capabilities']]์˜ ์š”์†Œ์— ๋Œ€ํ•œ element.split ( '.')

````

@proximous "๊ตฌ์„ฑ์—์„œ ์ œ์™ธ"๋ž€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋“  ์ž‘์„ฑ ํŒŒ์ผ์— ๋ฒ„์ „ 3.8์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋” ์‰ฝ๊ฒŒ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์ œ๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@visheratin ์ด ์˜ˆ์ œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป์ž…๋‹ˆ๊นŒ?

docker-compose.nogpu.yml :

version: '3.8'

services:
  df:
    build: miniconda-image.Dockerfile

docker-compose.gpu.yml :

version: '3.8'

services:
  df:
    build: nvidia-image.Dockerfile
    device_requests:
      - capabilities:
          - gpu

nogpu.yml ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

$ docker-compose -f docker-compose.nogpu.yml config
services:
  df:
    build:
      context: /home/jerry/gpu-test/miniconda-image.Dockerfile
version: '3'

gpu.yml ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

$ docker-compose -f docker-compose.gpu.yml config
services:
  df:
    build:
      context: /home/jerry/gpu-test/nvidia-image.Dockerfile
    device_requests:
    - capabilities:
      - gpu
version: '3'

GPU๊ฐ€ ์•„๋‹Œ yml๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฒด์ธ ๊ตฌ์„ฑ yml (์ฐธ๊ณ  ... ๋Ÿฐํƒ€์ž„ ๋ˆ„๋ฝ) :

$ docker-compose -f docker-compose.nogpu.yml -f docker-compose.gpu.yml config
services:
  df:
    build:
      context: /home/jerry/gpu-test/nvidia-image.Dockerfile
version: '3'

์˜ˆ์ƒ ์ถœ๋ ฅ :

$ docker-compose -f docker-compose.nogpu.yml -f docker-compose.gpu.yml config
services:
  df:
    build:
      context: /home/jerry/gpu-test/nvidia-image.Dockerfile
    device_requests:
      - capabilities:
          - gpu
version: '3'

(๋ถ„๋ช…ํžˆ ๋‚˜๋Š” โ€‹โ€‹์ข€ ๋” ์ •๊ตํ•œ ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํ–‰๋™์„ ๊ฐ•์กฐํ•˜๊ธฐ์œ„ํ•œ ๋‹จ์ˆœํ•œ ์‚ฌ๋ก€ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.)

@jlaule @proximous ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฃผ์ œ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„๊ธฐ ๋œ ์ €์žฅ์†Œ์— ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค. ์‹œ๊ฐ„์ด์žˆ์„ ๋•Œ ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์œผ๋กœ docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 30 ๋ถ„ ์•ˆ์— GPU ์ง€์›์œผ๋กœ K3S (Kubernetes์˜ ์—์ง€ ๋ฒ„์ „)๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค (์˜ˆ : ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ์— --docker ์˜ต์…˜ ์‚ฌ์šฉ). https://github.com/NVIDIA/k8s-device-plugin ์„ ํŒ”๋กœ์šฐํ•˜์—ฌ Nvidia ์žฅ์น˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.
๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@EpicWink ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ฃผ์ œ์—์„œ

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ–ˆ์Šต๋‹ˆ๊นŒ?

"/ usr / bin / nvidia-container-runtime"๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์„ค๋ช… ๋œ๋Œ€๋กœ nvidia-docker2๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ตœ๊ทผ์— ๋‹ค๋ฃจ๊ณ ์žˆ๋Š” ์ด๋“œ์™€ ๋‚˜์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ๋ฌธ์ œ๋Š” Docker ์Šคํƒ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ–ˆ๊ณ  ๋“ฃ๊ณ  ์‹ถ์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. docker compose ๋‚˜๋Š” docker api ๋ฒ„์ „ ํ•ดํ‚น์œผ๋กœ ์ž‘์—…ํ–ˆ์ง€๋งŒ ์˜ณ๋‹ค๊ณ  ๋Š๋ผ์ง€ ์•Š์•˜๊ณ  ์Šคํƒ ๋ฐฐํฌ๋Š” ์ƒ๊ด€์—†์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚ด docker compose์—์„œ ๋Ÿฐํƒ€์ž„ pr ์žฅ์น˜ ์š”์ฒญ์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  This๋ฅผ ๋‚ด ๋ฐ๋ชฌ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

{ "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "default-runtime": "nvidia", "node-generic-resources": [ "NVIDIA-GPU=0" ] }

GPU- {first part of gpu guid}๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋” ์‰ฌ์› ๋‹ค. NV ์ปจํ…Œ์ด๋„ˆ ํˆดํ‚ท์„ ์ œ์™ธํ•˜๊ณ  pip + ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋งค๋ ฅ์ฒ˜๋Ÿผ ๋ฐฐ์น˜๋˜๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Tks ๋งŽ์ด @haviduck , ๋ฐฉ๊ธˆ ๋‚ด ์ปดํ“จํ„ฐ (Ubuntu 20.04, docker CE 19.03.8)์—์„œ ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐํƒ€ : ๋„์ปค ๋ฐ๋ชฌ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@pommedeterresautee ์•„ ์ž„ ๋„ˆ๋ฌด ๊ธฐ๋ป์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค! ์žฌ ์žฅ์ „์„ ์–ธ๊ธ‰ ํ–ˆ์–ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

3 ์ฃผ๊ฐ„ ๋…ผ์Šคํ†ฑ dockering im ๊ฝค ๋‹นํ™ฉ์Šค๋Ÿฌ์›Œ์„œ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๋‹ค ..

@haviduck : ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ํฌ๊ธฐํ•œ ์žฅ์น˜ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๊ฒƒ์ด ์™€์„œ ์‹œ๋„ํ•˜๊ณ  ๋ช‡ ๋ถ„ ํ›„์— Plex์—์„œ ํ•˜๋“œ์›จ์–ด ์ฝ”๋“œ ๋ณ€ํ™˜์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ๋ฌธ์ œ์— 2 ์„ผํŠธ๋ฅผ ๋”ํ•  ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ๋งŽ์€ ํฌ์ŠคํŠธ๋ฅผ ์ฝ์—ˆ๊ณ  ๋งˆ์นจ๋‚ด ํ•ด๊ฒฐ์ฑ…์€ ๋งค์šฐ ๊ฐ„๋‹จํ–ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค : (์กฐ๊ธˆ ๋” ๋‚ฎ์•˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค-์ „ํ˜€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ...)
docker-compose ๋ฒ„์ „ 1.27.4, ๋นŒ๋“œ 40524192

  1. ๋„์ปค ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ nvidia-container-toolkit ๋ฐ nvidia-container-runtime ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.
  2. ๋„์ปค ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ : ์œ ํ˜•
    nvidia-smi ๋ฅผ ํด๋ฆญํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์— ๋‚˜ํƒ€๋‚˜๋Š” CUDA ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    image
  3. ๋„์ปค ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ : ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค : (์„ค์น˜ ํ•œ ๋ฒ„์ „์œผ๋กœ cuda ๋ฒ„์ „์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค)
    docker run --rm --gpus all nvidia / cuda : 10.1-base nvidia-smi
    ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ nvidia-smi๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์™€ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์–ป์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  4. /etc/docker/daemon.json ํŒŒ์ผ์—์„œ ๋‹ค์Œ์„ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    "runtimes": { "nvidia": { "path": "/ usr / bin / nvidia-container-runtime", "runtimeArgs": []}}
  5. docker-compose YML์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    ๋Ÿฐํƒ€์ž„ : nvidia

๊ทธ๊ฒŒ ๋‹ค์•ผ!
YML์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋ฉด docker-compose์—์„œ GPU ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

5. in your docker-compose YML you should add:
   **runtime: nvidia**

์˜ค,์ด ์ „์ฒด ์Šค๋ ˆ๋“œ๋Š” ๋Ÿฐํƒ€์ž„์ด์—†๋Š” ๋ฒ„์ „ 3์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค 1.27.0 ์ด์ƒ ์—๋Š” v2 / v3 ํŒŒ์ผ ํ˜•์‹์ด ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด์ œ ์–ด๋””์—์„œ๋‚˜ runtime ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ก์…€๋Ÿฌ๋ ˆ์ดํ„ฐ์— ๋Œ€ํ•œ ์‚ฌ์–‘๋„ ์•„์ง docker-compose ์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์ง€๋งŒ (https://github.com/compose-spec/compose-spec/pull/100) ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ๋ฌธ์ œ์— 2 ์„ผํŠธ๋ฅผ ๋”ํ•  ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ๋งŽ์€ ํฌ์ŠคํŠธ๋ฅผ ์ฝ์—ˆ๊ณ  ๋งˆ์นจ๋‚ด ํ•ด๊ฒฐ์ฑ…์€ ๋งค์šฐ ๊ฐ„๋‹จํ–ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค : (์กฐ๊ธˆ ๋” ๋‚ฎ์•˜์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค-์ „ํ˜€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ...)
docker-compose ๋ฒ„์ „ 1.27.4, ๋นŒ๋“œ 4052419

  1. ๋„์ปค ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ nvidia-container-toolkit ๋ฐ nvidia-container-runtime ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.
  2. ๋„์ปค ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ : ์œ ํ˜•
    nvidia-smi ๋ฅผ ํด๋ฆญํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์— ๋‚˜ํƒ€๋‚˜๋Š” CUDA ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    image
  3. ๋„์ปค ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ : ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค : (์„ค์น˜ ํ•œ ๋ฒ„์ „์œผ๋กœ cuda ๋ฒ„์ „์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค)
    docker run --rm --gpus all nvidia / cuda : 10.1-base nvidia-smi
    ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ nvidia-smi๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์™€ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์–ป์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  4. /etc/docker/daemon.json ํŒŒ์ผ์—์„œ ๋‹ค์Œ์„ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    "runtimes": { "nvidia": { "path": "/ usr / bin / nvidia-container-runtime", "runtimeArgs": []}}
  5. docker-compose YML์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    ๋Ÿฐํƒ€์ž„ : nvidia

๊ทธ๊ฒŒ ๋‹ค์•ผ!
YML์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋ฉด docker-compose์—์„œ GPU ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, nvidia-smi ์˜ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋ณผ ์ˆ˜์žˆ๋Š” cuda ๋ฒ„์ „์€ nvidia cuda ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „ (์ผ๋ช… nvidia ๋“œ๋ผ์ด๋ฒ„)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค (ํ˜ผ๋ž€ ์Šค๋Ÿฝ์ง€๋งŒ cuda๋ผ๊ณ ๋„ ํ•จ). docker ์ด๋ฏธ์ง€์˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ (์˜ˆ : nvidia/cuda:10.1-base nvidia-smi ๋Š” nvidia ํˆดํ‚ท ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค (๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๋™์ผํ•œ ๋ฒ„์ „ ๋ฒˆํ˜ธ ์‹œ์Šคํ…œ, ๋‹ค๋ฅธ ์ง์Šน).

๋“œ๋ผ์ด๋ฒ„๋Š” ํˆดํ‚ท๊ณผ ์—ญ ํ˜ธํ™˜๋˜๋ฏ€๋กœ <version> ์ด ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์›ํ•˜๋Š” nvidia/cuda:<version>-base nvidia-smi ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด : https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi

ARM ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์— ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” Docker Compose 1.27.4 ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

pip install docker-compose
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: docker-compose in /usr/local/lib/python3.6/dist-packages (1.26.2)

์•ˆ๋…•ํ•˜์„ธ์š” @collabnix!

pip --version ์˜ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Compose 1.27์€ Python 2์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•˜๋ฏ€๋กœ ์‹œ์Šคํ…œ์— Python 2๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ 1.27.x ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@collabnix ๋Š” ์ด๋ฏธ compose๋ฅผ ์„ค์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. pip install --upgrade docker-compose ์‹œ๋„

์ด์ œ 1.27.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pip ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @kshcherban & @ chris-crone
๋‚ด๊ฐ€ ๊ณผ๊ฑฐ์— ์ž‘์—…ํ–ˆ๊ณ  Python 2.7์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ค์ œ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์€ ๋ฏธ์นœ ์ง“์ž…๋‹ˆ๋‹ค.

docker-compose๋ฅผ 1.27.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
(๋‚˜์ค‘์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 1.19.3์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜ ์žˆ์Œ)

$ cat /etc/docker/daemon.json 
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
version: '3.5'

    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all       
    image: 'detectme'
    ipc: 'host'
    tty: true
    stdin_open: true
$ sudo docker-compose up -d --build
ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.engine: 'runtime'
$ docker-compose --version
docker-compose version 1.17.1, build unknown
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo rm /usr/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

$ sudo docker-compose up -d --build
docker-compose๋กœ ์ž˜ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์—์„œ nvidia-smi๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” GPU๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@ bttung-2020
๋ฟก
docker-hub์—์„œ dokcer-nvidia-devel (๋Ÿฐํƒ€์ž„ ์•„๋‹˜) : nvidia / cuda : 10.1-cudnn7-devel-ubuntu18.04 ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? docker-compose.yaml ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ํŽธ์ง‘ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
4 / 5 - 1 ๋“ฑ๊ธ‰