단일 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
해당 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
해당 게시물을 보다가 이런 의견을 보았다.
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만 할당이 가능하다.
'관련 이것저것 > docker' 카테고리의 다른 글
[Docker] docker service와 fastapi를 활용한 YOLOv5 inference 서버 구축하기(1) (0) | 2023.08.19 |
---|---|
[Docker] yolov8 docker 설치해보기 (0) | 2023.01.23 |
[Docker] Illegal instruction(core dumped) error 해결 (Jetson Xavier Nx) (0) | 2022.11.22 |
[Docker] Could not connect to any X display 오류 해결 (ROS_Docker) (0) | 2022.10.23 |