https://github.com/NVIDIA/nvidia-docker/issues/1268 의
klueska의 답변- 귀찮은 건 생략 -
nvidia-docker는 다음의 패키지를 묶어서 일컫는 말이다 (위에서 부터 아래로 의존성이 있다)
- nvidia-docker2
- nvidia-container-runtime
- nvidia-container-toolkit
- libnvidia-container
하지만 여러 프로젝트에서 비일관적인 설명을 하고 시간에 따라 정보가 틀려지기도 한다.
몇몇은 nvidia-docker2가 docker 19.03+에서는 deprecated되었다고 nvidia-container-toolkit을 설치해야한다고 한다.
다른 사람들은 nvidia-docker2가 필요하다고 한다.
두 이야기는 둘 다 기술적으로 옳다. 하지만 그렇기 때문에 헷갈린다.
바닥부터 얘기하자면, 다음 문단에서 각각의 요소를 설명하겠다.
+ libnvidia-container
container가 nvidia CUDA를 쓸 수 있도록 준비해준다. 서로 다른 run-time에서 nvidia GPU를 쓸 수 있도록 API와 잘 래핑된 CLI를 제공한다.
+ nvidia-container-toolkit
runC, prestart hook에서 필요한 언터페이스 구현 스크립트를 제공한다. container 생성 뒤 runC에 의해 호출된다. config.json 에 접근해서 libnvidia-container를 호출한다. container에 어떤 GPU장치를 설정할 지 정한다.
+ nvidia-container-runtime
runC에서 NIVIDA에 특화된 fork이다. 현재는 runC의 래핑이다. runC의 spec을 입력으로해서 nvidia-container-toolkit 스크립트를 prestart hook으로 하고 native runC를 호출하여 수정된 runC spec을 hook set과 함께 넘겨준다. docker specific한 것은 아니다. runC에는 specific하다.
+ nvidia-docker2
유일하게 docker-specific한 패키지이다. nvidia-container-runtime을 docker의 /etc/docker/daemon.json 에 채워넣는다. docker run --runtime=nivida를 할 수 있게 하고 자동으로 GPU를 container에 추가한다. native docker 스크립트를 래핑하여 nvidia-docker라하는 매번 --runtime-nvidia없이도 gpu를 쓸 수 있게 해준다. 또한 NV_GPU라는 host 환경변수를 설정해서 container에 어떤 GPU가 포함될지 설정하게 해준다.
이와 같은 구조를 본다면 nvidia-container-toolkit만 설치한다면nvidia-container-runtime 은 없다는 것을 알 수 있다. 따라서 --runtime=nivida 는 할 수 없게 된다. 하지만 Docker 19.03+ 에서는 문제가 없다. 이 버전에서는 --gpus 옵션을 주면 자동으로 nvidia-container-runtime에 의존하지 않고 nvidia-container-toolkit를 쓸 수 있게 해준다.
하지만 --gpus 플래그를 지원하지 않는 시스템(e.g. Kubernetes with Docker 19.03) 을 사용할 경우 nvidia-docker2를 사용해야한다.
=> 엥간해선 nvidia-docker2 깔면 편하게 갈 수 있을 거 같다.
'기술관련 기록' 카테고리의 다른 글
ubuntu 서버 갑자기 재부팅 - larynx (0) | 2022.03.03 |
---|---|
VS code remote ssh 안됨 (0) | 2022.02.07 |
Ubuntu16.04, RTX3090, nvidia-smi 로 서로 다른 gpu 인식 안됨 (0) | 2021.09.16 |
DeprecationWarning: `np.float` is a deprecated alias for the builtin `float` (0) | 2021.08.13 |
Cross-Correlation (0) | 2021.03.18 |