관련 이것저것/docker

[Docker] docker swarm gpu할당

agingcurve 2023. 7. 23. 15:19
반응형

 

단일 nvidia docker로 docker 내부에서 nvidia gpu 사용시 --gpus all(또는 번호)  명령어를 붙여주면 gpu 사용이 가능하다.

docker run -it --gpus all {image}:{tag} nvidia-smi

 

그런데 docker swarm에는 --gpus all처럼 gpu를 할당하는 명령어가 없다. swarm에서 gpu할당하여 docker service를 올려야 했기 때문에 docker swarm에 gpu를 할당하는 방법들을 찾아보았다.

 

OS : ubnutu 18.04

설치 : docker, nvidia-docker 두가지 설치 된 상태

 

https://gist.github.com/tomlankhorst/33da3c4b9edbde5c83fc1244f010815c

 

Instructions for Docker swarm with GPUs

Instructions for Docker swarm with GPUs. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

해당 git issue 내용을 기반으로 진행해보았는데,

/etc/docker/daemon.json 파일에 gpu의 uuid를 추가하는 방식이였다.

cmd 창에

nvidia-smi -a | grep UUID

gpu uuid를 알 수 있다.

이 gpu uuid를 docker의 deamon.json에 작성해준다.

이후, /etc/nvidia-container-runtime/config.toml 파일에서 2번째줄 swarm-resource 주석을 제거하거나, 해당 구문을 추가한다.

swarm-resource = "DOCKER_RESOURCE_GPU"

 

이후 docker 서비스를 restart 해준다.

 

docker swarm을 생성 후, docker service로 실행하며, docker service create시, --generic-resource에 “NVIDIA-GPU = 0“ 추가 해준다.

이때, 이미지는 반드시 nvidia-container 사용! (cuda 지원 안되는 이미지는 gpu 인식이 안됨)

docker service create \
    --name {name} \
    --generic-resource "NVIDIA-GPU=2" \
    {image}

 

2. 

https://gist.github.com/coltonbh/374c415517dbeb4a6aa92f462b9eb287

 

Docker Swarm GPU Support

Docker Swarm GPU Support. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

해당 게시물을 보다가 이런 의견을 보았다.

NVIDIA_VISIBLE_DEVICES를 설정하면 --generic-resourcee "NVIDIA-GPU=1"과 상관없이 gpu를 할당할 수 있다고 한다.

그래서 할당을 해보았는데,

docker service create --name test2 -p 8000:8000 --replicas 4 -e NVIDIA_VISIBLE_DEVICES='ALL' {image}

gpu 할당이 된다. 

 

NVIDIA_VISIBLE_DEVICES 인자에 숫자를 입력하면 해당 gpu만 할당이 가능하다.