이 DRA 리소스 드라이버는 현재 활발한 개발 중이며 아직 생산 사용을 위해 설계되지 않았습니다. 우리는 (때때로) 더 안정적인 것을 가질 때까지 main
위로 커밋을 밀기로 결정할 수 있습니다. 자신의 위험에 사용하십시오.
이 Repo에서 제공하는 GPU에 대한 DRA 지원의 문서 및 데모는 다음과 같습니다.
문서 | 데모 |
---|---|
이 섹션에서는 NVIDIA GPU DRA 드라이버의 기능을 데모하기 위해 kind
사용하는 것을 설명합니다.
먼저 GPU 지원으로 종류를 출시하므로 다음과 같은 전제 조건이 충족되도록하십시오.
kind
설치됩니다. 여기에서 공식 문서를 참조하십시오.
NVIDIA 컨테이너 툴킷이 시스템에 설치되어 있는지 확인하십시오. 이것은 여기에서 지침을 따르면 수행 할 수 있습니다.
NVIDIA 컨테이너 런타임을 기본 Docker 런타임으로 구성하십시오.
sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
변경 사항을 적용하려면 Docker를 다시 시작하십시오.
sudo systemctl restart docker
accept-nvidia-visible-devices-as-volume-mounts
옵션을 /etc/nvidia-container-runtime/config.toml
파일에서 true
로 설정하여 nvidia 컨테이너 런타임을 구성하여 볼륨 마운트를 사용하여 선택한 장치를 선택하여 컨테이너.
sudo nvidia-ctk config --in-place --set accept-nvidia-visible-devices-as-volume-mounts=true
기계에 현재 GPU 세트를 표시하십시오.
nvidia-smi -L
우리는 먼저이 저장소를 복제하고 cd
로 시작합니다. 이 데모에 사용 된 모든 스크립트 및 예제 포드 사양은 demo
하위 디렉토리에 있으므로 잠시 시간을내어 다양한 파일을 탐색하고 사용 가능한 내용을 확인하십시오.
git clone https://github.com/NVIDIA/k8s-dra-driver.git
cd k8s-dra-driver
다음은 DRA를 설치하고 구성하는 방법을 보여주는 데모입니다. Linux 워크 스테이션의 kind
클러스터에서 포드를 실행하는 방법입니다.
다음은 상세하고 단계별 지침입니다.
먼저, 데모를 실행할 kind
클러스터를 만듭니다.
./demo/clusters/kind/create-cluster.sh
여기에서 예제 리소스 드라이버의 이미지를 작성합니다.
./demo/clusters/kind/build-dra-driver.sh
이것은 또한 제작 된 이미지를 kind
클러스터에 사용할 수있게합니다.
이제 NVIDIA GPU DRA 드라이버를 설치합니다.
./demo/clusters/kind/install-dra-driver.sh
이것은 nvidia-dra-driver
네임 스페이스에서 실행되는 두 개의 포드를 보여 주어야합니다.
kubectl get pods -n nvidia-dra-driver
NAME READY STATUS RESTARTS AGE
nvidia-k8s-dra-driver-kubelet-plugin-t5qgz 1/1 Running 0 44s
마지막으로 demo/specs/quickstart
폴더에 포함 된 다양한 예제를 실행할 수 있습니다. Kubernetes v1.31에 대한 최신 업데이트 로이 폴더의 첫 3 가지 예제 만 현재 작동합니다.
다음과 같이 실행할 수 있습니다.
kubectl apply --filename=demo/specs/quickstart/gpu-test{1,2,3}.yaml
포드의 상태를 얻으십시오. 사용 가능한 GPU에 따라 처음 세 예제를 실행하면 다음과 유사한 출력이 생성됩니다 ...
참고 : 친절하게 알려진 문제가 있습니다. 친절한 클러스터에서 실행중인 포드의 로그를 꼬리려는 동안 오류가 표시 될 수 있습니다 failed to create fsnotify watcher: too many open files.
fs.inotify.max_user_watches
의 값을 증가시킴으로써 문제가 해결 될 수 있습니다.
kubectl get pod -A -l app=pod
NAMESPACE NAME READY STATUS RESTARTS AGE
gpu-test1 pod1 1/1 Running 0 34s
gpu-test1 pod2 1/1 Running 0 34s
gpu-test2 pod 2/2 Running 0 34s
gpu-test3 pod1 1/1 Running 0 34s
gpu-test3 pod2 1/1 Running 0 34s
kubectl logs -n gpu-test1 -l app=pod
GPU 0: A100-SXM4-40GB (UUID: GPU-662077db-fa3f-0d8f-9502-21ab0ef058a2)
GPU 0: A100-SXM4-40GB (UUID: GPU-4cf8db2d-06c0-7d70-1a51-e59b25b2c16c)
kubectl logs -n gpu-test2 pod --all-containers
GPU 0: A100-SXM4-40GB (UUID: GPU-79a2ba02-a537-ccbf-2965-8e9d90c0bd54)
GPU 0: A100-SXM4-40GB (UUID: GPU-79a2ba02-a537-ccbf-2965-8e9d90c0bd54)
kubectl logs -n gpu-test3 -l app=pod
GPU 0: A100-SXM4-40GB (UUID: GPU-4404041a-04cf-1ccf-9e70-f139a9b1e23c)
GPU 0: A100-SXM4-40GB (UUID: GPU-4404041a-04cf-1ccf-9e70-f139a9b1e23c)
앞 단계에서 생성 된 클러스터를 제거하십시오.
./demo/clusters/kind/delete-cluster.sh