>  기사  >  운영 및 유지보수  >  엔비디아 docker2가 뭐죠?

엔비디아 docker2가 뭐죠?

藏色散人
藏色散人원래의
2021-12-08 17:27:524215검색

nvidia-docker2.0은 docker의 구성 파일 "/etc/docker/daemon.json"을 수정하여 주로 docker가 NVIDIA Container 런타임을 사용할 수 있도록 하는 간단한 패키지입니다.

엔비디아 docker2가 뭐죠?

이 문서의 운영 환경: Windows 10 시스템, Docker 버전 20.10.11, Dell G3 컴퓨터.

NVidia Docker 소개

NVIDIA는 NVIDIA GPU를 사용하여 컨테이너를 활성화하기 위해 2016년에 NVIDIA-Docker를 설계하기 시작했습니다. nvidia-docker1.0의 1세대는 docker 클라이언트의 캡슐화를 구현하고 컨테이너가 시작될 때 필요한 GPU 장치 및 라이브러리를 컨테이너에 마운트했습니다. 그러나 이 설계 방법은 Docker 런타임과 밀접하게 결합되어 있으며 유연성이 부족합니다. 기존 결함은 다음과 같습니다.

디자인은 docker와 밀접하게 결합되어 있으며 다른 컨테이너 런타임을 지원하지 않습니다. 예: 향후 추가될 수 있는 LXC, CRI-O 및 컨테이너 런타임.

Docker 생태계에서는 다른 도구를 더 잘 활용할 수 없습니다. 예: docker compose.

GPU는 유연한 스케줄링을 위해 스케줄링 시스템의 리소스로 사용될 수 없습니다.

컨테이너 런타임 중 GPU 지원을 개선합니다. 예: 사용자 수준 NVIDIA 드라이버 라이브러리, NVIDIA 커널 모듈, 장치 주문 등을 자동으로 가져옵니다.

위에 설명된 단점을 기반으로 NVIDIA는 차세대 컨테이너 런타임인 nvidia-docker2.0의 설계를 시작했습니다.

nvidia-docker 2.0의 구현 메커니즘

먼저 nvidia-docker 2.0, Containerd, nvidia-container-runtime, libnvidia-container 및 runc 간의 직접적인 관계를 간략하게 소개합니다.

그들 사이의 관계는 다음 그림을 통해 연관될 수 있습니다:

엔비디아 docker2가 뭐죠?

nvidia-docker 2.0

nvidia-docker2.0은 주로 docker 구성 파일 /etc /docker/daemon을 수정하는 간단한 패키지입니다. .json을 사용하면 Docker가 NVIDIA 컨테이너 런타임을 사용할 수 있습니다.

nvidia-container-runtime

nvidia-container-runtime은 libnvidia-container 라이브러리를 호출하기 위해 원본 Docker 컨테이너 런타임 runc를 기반으로 사전 시작 후크를 추가하는 실제 핵심 부분입니다.

libnvidia-container

libnvidia-container는 Linux 컨테이너에서 NVIDIA GPU를 사용하는 데 사용할 수 있는 라이브러리와 간단한 CLI 도구를 제공합니다.

Containerd

Containerd는 주로 다음을 담당합니다.

  • 컨테이너의 수명 주기 관리(컨테이너 생성부터 폐기까지)

  • 컨테이너 이미지 가져오기/푸시

  • 스토리지 관리(이미지 관리) 및 컨테이너 데이터 저장)

  • runc를 호출하여 컨테이너 실행

  • 네트워크 인터페이스 및 컨테이너의 네트워크 관리

엔비디아 docker2가 뭐죠?

containerd가 요청을 받은 후 관련 준비를 하고 호출을 선택할 수 있습니다. runc는 스스로 컨테이너d-shim을 생성한 다음 runc를 호출할 수도 있으며, runc는 OCI 파일을 기반으로 컨테이너를 생성합니다. 위는 일반적인 컨테이너 생성의 기본 과정이다.

RunC

RunC는 컨테이너를 실행하는 데 사용되는 경량 도구입니다. 한 가지 작업을 수행하는 데만 사용됩니다. 도커 엔진을 통하지 않고 컨테이너를 직접 실행할 수 있는 명령줄 가젯으로 생각할 수 있습니다. 실제로 runC는 표준화의 산물이며 OCI 표준에 따라 컨테이너를 생성하고 실행합니다. OCI(Open Container Initiative) 조직은 컨테이너 형식 및 런타임에 대한 개방형 산업 표준을 개발하는 것을 목표로 합니다.

RunC 명령줄을 직접 사용하여 컨테이너를 생성하고 간단한 상호 작용 기능을 제공할 수 있습니다.

위에서 각 구성 요소의 기능과 관계를 소개했습니다. 다음은 다음 그림을 통해 자세히 설명합니다.

엔비디아 docker2가 뭐죠?

일반적인 컨테이너 생성 과정은 다음과 같습니다.

docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process

Docker 클라이언트 컨테이너 요청은 dockerd로 전송됩니다. dockerd는 요청 작업을 수신하면 확인하고 확인한 후 컨테이너d-shim을 시작하거나 자체적으로 컨테이너 프로세스를 시작합니다.

GPU를 사용하는 컨테이너 만들기

GPU 컨테이너를 만드는 과정은 다음과 같습니다.

docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process

Docker의 기본 런타임이 다음과 같다는 점을 제외하면 기본 프로세스는 GPU를 사용하지 않는 컨테이너와 유사합니다. NVIDIA 자체 nvidia-container-runtime 으로 대체되었습니다.

이런 방식으로 nvidia-container-runtime은 컨테이너를 생성할 때 먼저 nvidia-container-runtime-hook 후크를 실행하여 컨테이너가 GPU를 사용해야 하는지 확인합니다(환경 변수 NVIDIA_VISIBLE_DEVICES로 판단). 필요한 경우 libnvidia-container를 호출하여 GPU를 컨테이너에 노출합니다. 그렇지 않으면 기본 runc 논리가 사용됩니다.

이 시점에서 nvidia-docker2.0의 일반적인 메커니즘은 기본적으로 명확합니다. 다만, 본 글에서는 nvidia-container-runtime, libnvidia-container, Containerd, runc에 관련된 프로젝트를 하나씩 소개하지 않겠습니다. 관심이 있으시면 스스로 탐색하고 학습하실 수 있습니다. 이 프로젝트의 주소는 기사에 링크되어 있습니다.

추천 학습: "Docker Video Tutorial"

위 내용은 엔비디아 docker2가 뭐죠?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.