CUDA/AI 가속 및 미디어 트랜스코딩을 위해 NVIDIA GPU를 Proxmox VE 8 컨테이너로 패스스루하는 방법

Cuda Ai Gasog Mich Midieo Teulaenseukoding Eul Wihae Nvidia Gpuleul Proxmox Ve 8 Keonteineolo Paeseuseuluhaneun Bangbeob



Proxmox VE 서버에 NVIDIA GPU가 설치되어 있는 경우 이를 Proxmox VE LXC 컨테이너에 전달하고 CUDA/AI 가속을 위해 컨테이너(예: TensorFlow, PyTorch)에서 사용할 수 있습니다. 예를 들어 Plex Media Server 또는 NextCloud가 설치된 Proxmox VE LXC 컨테이너에서 미디어 트랜스코딩, 비디오 스트리밍 등에 NVIDIA GPU를 사용할 수도 있습니다.

이 기사에서는 NVIDIA GPU를 Proxmox VE 8 LXC 컨테이너로 패스스루하여 CUDA/AI 가속, 미디어 트랜스코딩 또는 NVIDIA GPU가 필요한 기타 작업에 사용할 수 있는 방법을 보여줍니다.







목차 주제:

Proxmox VE 8에 NVIDIA GPU 드라이버 설치

NVIDIA GPU를 Proxmox VE LXC 컨테이너로 패스스루하려면 Proxmox VE 8 서버에 NVIDIA GPU 드라이버가 설치되어 있어야 합니다. Proxmox VE 8 서버에 최신 버전의 공식 NVIDIA GPU 드라이버를 설치하는 데 도움이 필요한 경우, 이 기사를 읽어보세요 .



NVIDIA GPU 커널 모듈이 Proxmox VE 8에 자동으로 로드되는지 확인

Proxmox VE 8 서버에 NVIDIA GPU 드라이버를 설치한 후에는 부팅 시 NVIDIA GPU 커널 모듈이 자동으로 로드되는지 확인해야 합니다.



먼저 '/etc/modules-load.d/' 디렉터리에 'nvidia.conf'와 같은 새 파일을 만들고 nano 텍스트 편집기로 엽니다.





$ 나노 / / 모듈-load.d / nvidia.conf

다음 줄을 추가하고 다음을 누르십시오. + 엑스 그 뒤에 'Y'와 <엔터> 'nvidia.conf' 파일을 저장하려면 다음 단계를 따르세요.



엔비디아

nvidia_uvm

변경 사항을 적용하려면 다음 명령을 사용하여 'initramfs' 파일을 업데이트하세요.

$ 업데이트-initramfs -안에

어떤 이유로 Proxmox VE 8은 '/dev/' 디렉터리에 필요한 NVIDIA GPU 장치 파일을 생성하지 않습니다. 해당 장치 파일이 없으면 Promox VE 8 LXC 컨테이너는 NVIDIA GPU를 사용할 수 없습니다.

Proxmox VE 8이 부팅 시 '/dev/' 디렉터리에 NVIDIA GPU 장치 파일을 생성하도록 하려면 '/etc/udev/rules.d/'에 udev 규칙 파일 '70-nvidia.rules'를 생성하세요. 디렉토리를 열고 다음과 같이 nano 텍스트 편집기로 엽니다.

$ 나노 / / udev / 규칙.d / 70 -nvidia.rules

'70-nvidia.rules' 파일에 다음 줄을 입력하고 다음을 누릅니다. + 엑스 그 뒤에 'Y'와 <엔터> 파일을 저장하려면:

# /dev/*에 필요한 NVIDIA 장치 파일을 생성합니다.

핵심 == '엔비디아' , 실행+= '/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*''

핵심 == 'nvidia_uvm' , 실행+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''

변경 사항을 적용하려면 다음과 같이 Proxmox VE 8 서버를 재부팅하세요.

$ 재부팅

Proxmox VE 8 서버가 부팅되면 다음 스크린샷에서 볼 수 있듯이 NVIDIA 커널 모듈이 자동으로 로드되어야 합니다.

$ lsmod | 꽉 붙잡음 엔비디아

필요한 NVIDIA 장치 파일은 Proxmox VE 8 서버의 '/dev' 디렉터리에도 채워져야 합니다. NVIDIA 장치 파일의 CGroup ID를 기록해 두십시오. Proxmox VE 8 서버에서 NVIDIA GPU를 통과시키려는 LXC 컨테이너에서 해당 CGroup ID를 허용해야 합니다. 우리의 경우 CGroup ID는 195, 237, 226입니다.

$ ㅋㅋㅋ -lh / 개발자 / 엔비디아 *

$ ㅋㅋㅋ -lh / 개발자 / 드리

NVIDIA GPU 패스스루를 위한 Proxmox VE 8 LXC 컨테이너 생성

NVIDIA CUDA 및 NVIDIA cuDNN 라이브러리는 Ubuntu 패키지 리포지토리에서 Ubuntu 22.04 LTS에 쉽게 설치할 수 있고 NVIDIA CUDA 가속이 작동하는지 테스트하기가 더 쉽기 때문에 이 기사에서는 데모를 위해 Ubuntu 22.04 LTS Proxmox VE 8 LXC 컨테이너를 사용했습니다. . 원하는 경우 다른 Linux 배포판도 사용할 수 있습니다. 이 경우 NVIDIA CUDA 및 NVIDIA cuDNN 설치 명령이 달라집니다. 원하는 Linux 배포판에 대한 NVIDIA CUDA 및 NVIDIA cuDNN 설치 지침을 따르십시오.

Proxmox VE 8 LXC 컨테이너를 만드는 데 도움이 필요하면 이 기사를 읽어보세요 .

Promox VE 8에서 NVIDIA GPU 패스스루를 위한 LXC 컨테이너 구성

NVIDIA GPU 패스스루를 위해 LXC 컨테이너(컨테이너 102)를 구성하려면 다음과 같이 nano 텍스트 편집기를 사용하여 Proxmox VE 셸에서 LXC 컨테이너 구성 파일을 엽니다.

$ 나노 / / pve / 1xc / 102 .conf

LXC 컨테이너 구성 파일 끝에 다음 줄을 입력합니다.

lxc.cgroup.devices.allow: c 195 : * rwm

lxc.cgroup.devices.allow: c 237 : * rwm

lxc.cgroup.devices.allow: c 226 : * rwm

lxc.mount.entry: / 개발자 / nvidia0          개발자 / nvidia0          없음 묶다 ,선택 과목, 만들다 = 파일

lxc.mount.entry: / 개발자 / nvidiactl        개발자 / nvidiactl        없음 묶다 ,선택 과목, 만들다 = 파일

lxc.mount.entry: / 개발자 / nvidia-modeset   개발자 / nvidia-modeset   없음 묶다 ,선택 과목, 만들다 = 파일

lxc.mount.entry: / 개발자 / nvidia-uvm       dev / nvidia-uvm       없음 묶다 ,선택 과목, 만들다 = 파일

lxc.mount.entry: / 개발자 / 엔비디아-uvm-도구 개발자 / nvidia-uvm-tools 없음 묶다 ,선택 과목, 만들다 = 파일

lxc.mount.entry: / 개발자 / 드리              개발자 / 드라이              없음 묶다 ,선택 과목, 만들다 =

LXC 컨테이너 구성 파일의 'lxc.cgroup.devices.allow' 줄에서 CGroup ID를 바꿔야 합니다. 완료되면 다음을 누르세요. + 엑스 그 뒤에 'Y'가 옵니다. <엔터> LXC 컨테이너 구성 파일을 저장합니다.

이제 Proxmox VE 8 대시보드에서 LXC 컨테이너를 시작하세요.

NVIDIA GPU 패스스루가 성공하면 LXC 컨테이너가 오류 없이 시작되고 컨테이너의 '/dev' 디렉터리에 NVIDIA 기기 파일이 표시되어야 합니다.

$ ㅋㅋㅋ -lh / 개발자 / 엔비디아 *

$ ㅋㅋㅋ -lh / 개발자 / 드리

Proxmox VE 8 LXC 컨테이너에 NVIDIA GPU 드라이버 설치

데모를 위해 Proxmox VE 8 서버에서 Ubuntu 22.04 LTS LXC 컨테이너를 사용하고 있습니다. LXC 컨테이너에서 다른 Linux 배포판을 사용하는 경우 명령이 우리 명령과 약간 다를 수 있습니다. 따라서 컨테이너에서 사용 중인 Linux 배포판에 따라 명령을 조정해야 합니다.

'nvidia-smi' 명령을 사용하여 Proxmox VE 8 서버에 설치한 NVIDIA GPU 드라이버 버전을 찾을 수 있습니다. 보시다시피 Proxmox VE 8 서버에는 NVIDIA GPU 드라이버 버전 535.146.02가 설치되어 있습니다. 따라서 LXC 컨테이너에도 NVIDIA GPU 드라이버 버전 535.146.02를 설치해야 합니다.

$ 엔비디아-smi

먼저 다음과 같이 LXC 컨테이너에 CURL을 설치합니다.

$ 적절한 업데이트 && 적절한 설치하다 곱슬 곱슬하다 -그리고

CURL은 LXC 컨테이너에 설치되어야 합니다.

NVIDIA GPU 드라이버 버전 535.146.02(가령)를 설치하려면 NVIDIA_VERSION 환경 변수를 내보내고 컨테이너에서 CURL 명령을 실행하여 필요한 NVIDIA GPU 드라이버 설치 프로그램 파일 버전을 다운로드합니다.

$ 내보내다 NVIDIA_VERSION = '535.146.02'

$ 컬 -영형 'https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .달리다'

다음 스크린샷에서 볼 수 있듯이 올바른 버전의 NVIDIA GPU 드라이버 설치 프로그램 파일을 LXC 컨테이너에 다운로드해야 합니다.

이제 다음과 같이 컨테이너의 NVIDIA GPU 드라이버 설치 프로그램 파일에 실행 권한을 추가합니다.

$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run

컨테이너에 NVIDIA GPU 드라이버를 설치하려면 “–no-kernel-module”을 사용하여 NVIDIA GPU 드라이버 설치 프로그램 파일을 실행하세요. 옵션은 다음과 같습니다:

$ . / NVIDIA-Linux-x86_64-535.146.02.run --no-kernel-모듈

이 옵션이 표시되면 '확인'을 선택하고 누릅니다. <엔터> .

'확인'을 선택하고 누릅니다. <엔터> .

'예'를 선택하고 누릅니다. <엔터> .

'확인'을 선택하고 누릅니다. <엔터> .

NVIDIA GPU 드라이버가 LXC 컨테이너에 설치되고 있습니다. 완료하는 데 몇 초 정도 걸립니다.

이 메시지가 나타나면 '예'를 선택하고 누릅니다. <엔터> .

'확인'을 선택하고 누릅니다. <엔터> . NVIDIA GPU 드라이버는 LXC 컨테이너에 설치되어야 합니다.

NVIDIA GPU 드라이버가 설치되어 작동하는지 확인하려면 LXC 컨테이너에서 'nvidia-smi' 명령을 실행하세요. 보시다시피 NVIDIA GPU 드라이버 버전 535.146.02(Proxmox VE 8 서버에 설치된 것과 동일한 버전)가 LXC 컨테이너에 설치되어 있으며 NVIDIA RTX 4070 GPU를 올바르게 감지했습니다.

$ 엔비디아-smi

Proxmox VE 8 LXC 컨테이너에 NVIDIA CUDA 및 cuDNN 설치

데모를 위해 Proxmox VE 8 서버에서 Ubuntu 22.04 LTS LXC 컨테이너를 사용하고 있습니다. LXC 컨테이너에서 다른 Linux 배포판을 사용하는 경우 명령이 우리 명령과 약간 다를 수 있습니다. 따라서 컨테이너에서 사용 중인 Linux 배포판에 따라 명령을 조정해야 합니다.

Ubuntu 22.04 LTS Proxmox VE 8 컨테이너에 NVIDIA CUDA 및 cuDNN을 설치하려면 컨테이너에서 다음 명령을 실행하세요.

$ 적절한 설치하다 빌드 필수 nvidia-cuda-toolkit nvidia-cudnn

설치를 확인하려면 'Y'를 누른 다음 누르십시오. <엔터> .

필수 패키지를 다운로드하여 설치하는 중입니다. 완료하는 데 시간이 걸립니다.

이 창이 나타나면 '확인'을 선택하고 누르십시오. <엔터> .

'동의함'을 선택하고 누르세요. <엔터> .

설치를 계속해야 합니다.

설치 프로그램이 NVIDIA에서 NVIDIA cuDNN 라이브러리 아카이브를 다운로드하고 있습니다. 파일이 커서 완성하는데 시간이 오래 걸립니다.

NVIDIA cuDNN 라이브러리 아카이브가 다운로드되면 평소대로 설치가 계속됩니다.

이 시점에서 NVIDIA CUDA 및 cuDNN은 Ubuntu 22.04 LTS Proxmox VE 8 LXC 컨테이너에 설치되어야 합니다.

Proxmox VE 8 LXC 컨테이너에서 NVIDIA CUDA 가속이 작동하는지 확인

NVIDIA CUDA가 올바르게 설치되었는지 확인하려면 다음과 같이 Proxmox VE 8 컨테이너에서 'nvcc' 명령을 사용할 수 있는지 확인하세요.

$ nvcc --버전

보시다시피 Proxmox VE 8 컨테이너에는 NVIDIA CUDA 11.5가 설치되어 있습니다.

이제 간단한 CUDA C 프로그램을 작성하고, 컴파일하고, 실행하여 모든 것이 예상대로 작동하는지 살펴보겠습니다.

먼저 Proxmox VE 8 컨테이너에 '~/code' 프로젝트 디렉터리를 만들어 파일을 정리합니다.

$ mkdir ~ / 암호

다음과 같이 '~/code' 프로젝트 디렉터리로 이동합니다.

$ CD `/ 암호

Proxmox VE 8 컨테이너의 '~/code' 디렉터리에 'hello.cu'와 같은 새 파일을 만들고 nano 텍스트 편집기로 엽니다.

$ 나노 hello.cu

'hello.cu' 파일에 다음 코드 줄을 입력하세요.

#include

__global__ void sayHello ( ) {
printf ( 'GPU에서 안녕하세요! \N ' ) ;
}

정수 메인 ( ) {
printf ( 'CPU로부터 안녕하세요! \N ' ) ;

안녕하세요 << 1 , 1 >> ( ) ;
cudaDevice동기화 ( ) ;

반품 0 ;
}

완료되면 다음을 누르세요. + 엑스 그 뒤에 'Y' 그리고 <엔터> 'hello.cu' 파일을 저장합니다.

Proxmox VE 8 컨테이너에서 'hello.cu' CUDA 프로그램을 컴파일하려면 다음 명령어를 실행하세요.

$ nvcc hello.cu -영형 안녕하세요

이제 다음과 같이 Proxmox VE 8 컨테이너에서 'hello' CUDA 프로그램을 실행할 수 있습니다.

$ . / 안녕하세요

Proxmox VE 8 컨테이너가 NVIDIA CUDA 가속을 위해 NVIDIA GPU를 사용할 수 있는 경우 프로그램은 다음 스크린샷과 같이 두 줄을 인쇄합니다.

Proxmox VE 8 컨테이너에서 NVIDIA GPU에 액세스할 수 없는 경우 프로그램은 두 번째 줄이 아닌 'Hello world from the CPU!'라는 첫 번째 줄만 인쇄합니다.

결론

이 기사에서는 Proxmox VE 8 호스트에서 Proxmox VE 8 LXC 컨테이너로 NVIDIA GPU를 패스스루하는 방법을 보여주었습니다. 또한 Proxmox VE 8 컨테이너에 Proxmox VE 호스트와 동일한 버전의 NVIDIA GPU 드라이버를 설치하는 방법도 보여주었습니다. 마지막으로 Ubuntu 22.04 LTS Proxmox VE 8 컨테이너에 NVIDIA CUDA 및 NVIDIA cuDNN을 설치하고 Proxmox VE 8 컨테이너에서 간단한 NVIDIA CUDA 프로그램을 컴파일 및 실행하는 방법을 보여주었습니다.

참고자료: