• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
Proxmox

Proxmox LXC에 Nvidia GPU 패스쓰루

DarkAcid 1364

3

3

안녕하세요

서버를 다시설치하는 와중에 기존에 문제가 있었던 플랙스 하드웨어 트랜스코딩을 해결하고자 LXC컨테이너로 옮기게 되었습니다. 덕분에 기존의 패스쓰루 방식이 아닌 LXC 컨테이너로 GPU를 넘기는 방법을 찾다  발경한 유튜브를 글로 옮겨볼까합니다.

(25) Passing a GPU through to a Proxmox container - YouTube
목차

1. Proxmox 커널 업데이트

2. Proxmox GPU 드라이버 블랙리스트

3.  Nvidia 드라이버 설치 및 세팅 (udev 룰 변경을 통해 드라이버가 666의 권한으로 실행되게 만드는 것)

4. LXC 설정파일 변경으로 하드웨어 및 c그룹 액세스

5. LXC 컨테이너 내부에 Nvidia 드라이버 설치

 

1. Proxmox 커널 업데이트

먼저 해당하는 노드에 updates 메뉴에 Refresh와 upgrade를 통해서 Proxmox node를 업데이트합니다.

image.png.jpg

이후 아래 명령어를 통해 Proxmox 커널 버젼을 찾습니다

image.png.jpg

uname -r

이후 업데이트 할 proxmox의 버젼을 아래 명령어로 불러옵니다

image.png.jpg

apt-cache search pve-header
여기서 해당하는 커널의 이름을 해당 명령어에 교체해 업데이트 해줍니다

image.png.jpg

 apt install pve-headers-*.*.*-*-pve

이렇게 커널 업데이트를 완료합니다

 

2. Proxmox GPU 드라이버 블랙리스트

Proxmox 쉘에 GPU 사용을 제한하는 설정을 합니다.

아래 명령어로 blacklist 파일에 쓰기합니다.

image.png.jpg

nano /etc/modprobe.d/blacklist.conf

아래 명령어를 추가해줍니다

image.png.jpg

blacklist nouveau

 

저장 후 initramfs를 아래 명령어로 업데이트 합니다.

image.png.jpg

update-initramfs -u

재부팅합니다.

 

3.  Nvidia 드라이버 설치 및 세팅 (udev 룰 변경을 통해 드라이버가 666의 권한으로 실행되게 만드는 것)

먼저 드라이버에서 필요한 어플리케이션을 설치하기 위해서 아래 명령어로 기본 패키지를 설치합니다

image.png.jpg

apt install build-essential

당연히 y로 해당 패키지 설치를 허가해줍니다.

 

이제 다른 브라우저에서 Nvidia 웹사이트에서 드라이버를 받기위해서 아래 웹사이트에서 설치하려는 gpu 모델의 드라이버를 찾아줍니다

Official Drivers | NVIDIA

image.png.jpg

 

Proxmox는 리눅스 운영체제임으로 linux64용으로 드라이버를 찾아준 뒤 검색으로 드라이버 페이지를 로딩합니다. 여기서 다운로드를 누르시면 실 다운로드 페이지가 로딩됩니다. 이곳에서 다운로드 버튼을 오른쪽 클릭하시고 링크를 복사해줍니다.  

image.png.jpg

 

다시 proxmox로 돌아와서 wget커맨드로 해당 드라이버를 다운해줍니다.

image.png.jpg

wget (드라이버 다운경로)

 

다운로드한 파일을 실행하기 위해 chmod를 통해 권한을 변경해줍니다.

image.png.jpg

 chmod +x (파일 이름)

팁. 파일 이름은 N을 입력 후 tab을 눌러주시면 자동으로 채워집니다

 

드라이버를 설치하기 위한 커맨드는

image.png.jpg

./(파일 이름입니다)

팁. 드라이버 이름은 N을 입력 후 tab을 눌러주시면 자동으로 채워집니다

 

드라이버 설치시 몇가지 추가 질문이 나옵니다 대부분 yes를 눌러주면 되지만 x를 사용하겠냐는 질문에는 no를 추천드립니다. 예시로 아래 스크린샷을 올려드립니다.

image.png.jpg

image.png.jpg

image.png.jpg

 

아래 화면이 나오면 정상석으로 설치 된것입니다.image.png.jpg

 

nvidia-smi 명령어를 입력하실때 설치된 그래픽카드의 정보가 나오게 되면 잘 설치된겁니다! 

image.png.jpg

 

해당 드라이버가 proxmox가 시작시 잘 실행되기 위해서는 모듈에 nvidia관련 드라이버들을 추가해줘야합니다.

아래 명령어로 modules.conf를 수정해줍니다.

image.png.jpg

nano /etc/modules-load.d/modules.conf

image.png.jpg

아래 라인들을 추가해줍니다

#  Nvidia modules
nvidia
nvidia-modeset
nvidia_uvm

 

다시 한번 initramfs를 업데이트 해줍니다

image.png.jpg

update-initramfs -u

 

이제 udev룰을 변경해 드라이버 관련 프로세서들이 666의 권한을 가지고 실행할 수있게 해줄건데요 이 부분은 lxc의 previlaged 컨테이너에서 사용 할 수있게 권한 레벨을 변경해주는 겁니다.

 

아래 명령어로 udev에 룰을 만들어줍니다. 

image.png.jpg

 nano /etc/udev/rules.d/70-nvidia.rules

 

아래 명령어들을 해당 파일에 추가해줍니다
KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'"
KERNEL=="nvidia_modeset", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -m && /bin/chmod 666 /dev/nvidia-modeset*'"
KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 666 /dev/nvidia-uvm*'"
 

재부팅 후에 nvidia-smi로 드라이버의 정상 작동을 확인해주세요!

 

4. LXC 설정파일 변경으로 하드웨어 및 c그룹 액세스

제 Plex는 Proxmox Helper 스크립으로 설치해서 해당 커맨드로 설치 진행해보겠습니다 (본인이 만든 스크립트 외 모든 스크립트는 주의를 요합니다)

tteck/Proxmox: Proxmox Helper Scripts (github.com)
제가 쓰는 스크립트는 포럼에도 소개되었던 tteck님의 스크립트입니다.

 오리지널은 위 웹사이트에 Media에 Plex를 찾아주시면됩니다.

쉘에 해당 명령어로 Plex LXC를 생성해줍니다.

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/plex-v4.sh)"

기본 설정은 cpu 코어2개 8gb 저장장치 2gb램입니다. 저는 램을 temp를 대신하여 트랜스코딩된 것들을 쓰기에 8gb(그리고 swap도)로 늘려줬습니다. 

 

해당 컨테이너 생성 후 종료하시고 proxmox shell에 접속해주세요.

 

아래 명령어로 gpu의 정보을 캡쳐해줍니다. 

image.pngls -l /dev/nv*

해당 명령어로 나온 정보는 캡쳐하시고 열어주세요. 

 

아래 명령어로 컨테이너의 설정파일을 수정합니다.

 nano /etc/pve/lxc/(YOURCONTAINERID).conf

주의.해당 파일을 잘못건드리면 lxc가 작동하지 않기때문에 백업을 만드는것을 추천드립니다.

(백업 명령어 cp /etc/pve/lxc/(YOURCONTAINERID).conf /etc/pve/lxc/(YOURCONTAINERID).conf/bak)

 

위에 방법으로 plex를 설치하셨다면 아래와 같은 명령어들이 있을 겁니다 전부 지워주세요

 

# Allow cgroup access
lxc.cgroup2.devices.allow = c 195:0 rw
lxc.cgroup2.devices.allow = c 195:255 rw
lxc.cgroup2.devices.allow = c 195:254 rw
lxc.cgroup2.devices.allow = c 509:0 rw
lxc.cgroup2.devices.allow = c 509:1 rw
lxc.cgroup2.devices.allow = c 10:144 rw

# Pass through device files
lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry = /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
lxc.mount.entry = /dev/nvram dev/nvram none bind,optional,create=file

 

정확히는 cgroup과 mount.entry관련 명령어들을 지우시면 됩니다.

 

정상적인 상태는 아래와 같습니다.

image.png.jpg

 

이 후 위에 내용을 메모장에 복사하신 뒤 수정해주셔야합니다. cgroup의 내용을 자세히보시면 제가 올린 스크린샷의 내용과 같은 부분이 있습니다. 제가 배경색상 지정해둔 곳을 본인의 시스템의 맞게 수정하시면됩니다. 

image.png.jpg

 

컨테이너를 시작하신뒤 아래 명령어로 업데이트해주세요

apt update && apt upgrade -y

 

이제 lxc에 드라이버를 설치하셔야하는데 lxc는 커널이 없기때문에 설치시 명령어가 틀리니 주의해주세요

 

Nvidia 웹사이트에서 드라이버를 받기위해서 아래 웹사이트에서 설치하려는 gpu 모델의 드라이버를 찾아줍니다

Official Drivers | NVIDIA

image.png.jpg

 

lxc는 리눅스 운영체제임으로 linux64용으로 드라이버를 찾아준 뒤 검색으로 드라이버 페이지를 로딩합니다. 여기서 다운로드를 누르시면 실 다운로드 페이지가 로딩됩니다. 이곳에서 다운로드 버튼을 오른쪽 클릭하시고 링크를 복사해줍니다.  

image.png.jpg

 

다시 lxc로 돌아와서 wget커맨드로 해당 드라이버를 다운해줍니다.

image.png.jpg

wget (드라이버 다운경로)

 

다운로드한 파일을 실행하기 위해 chmod를 통해 권한을 변경해줍니다.

image.png.jpg

 chmod +x (파일 이름)

팁. 파일 이름은 N을 입력 후 tab을 눌러주시면 자동으로 채워집니다

 

드라이버를 설치하기 위한 커맨드는

image.png.jpg

./(파일 이름입니다) --no-kernel-module

팁. 드라이버 이름은 N을 입력 후 tab을 눌러주시면 자동으로 채워집니다

여기서 kernal 명령어를 반드시 포함해주세요

 

해당 설치화면시 위와 같은 옵션으로 설치해주시면 되는데 추가적으로  --no-kernel-module 명령어의 확인을 하게 됩니다. yes로 넘겨주세요 

 

재부팅 후 nvidia-smi 명령어를 입력 후 설치된 그래픽카드의 정보가 나오게 되면 잘 설치된겁니다! 

image.png.jpg

 

이 후 plex에 http://ipaddress:32400/web으로 접속해주시면됩니다. 만드시 /web을 붙이셔야 xml정보가 아니라 config으로 넘어갑니다. 전부 설정해주신 뒤 플랙스 설정 페이지에 트랜스코더 옵션을 찾습니다

image.png.jpg

 

해당 페이지에서 가능할 경우 하드웨어가속 사용을 체크해주시면 준비가 완료된겁니다.

image.png.jpg

 

저는 재부팅 후 파일하나를 틀어 대쉬보드에서 HW로 하드웨어 트랜스코딩을 확인해 주 었습니다

image.png.jpg

 

lxc로 패스쓰루는 그래도 vm보다 작동이 잘되는 것을 확인 후 사용해보았습니다.   

 

이상 Lo-Res DIY님의 비디오 가이드를 한국어로 번역해보았습니다!

 

 

 

 

 

신고공유스크랩
3
3명이 추천

DarkAcid
31Lv. 20061P
다음 레벨까지 419P

서버운영 초보

메인컴퓨터: 5800x/x570itx/16G/1080evga se

서버컴퓨터1: Proxmox/2700x/B450m/24GB/1060 msi 3gb

- Plex, Docker, Pihole, Xenology, Home Assistant

서버컴퓨터2: Proxmox/2400G/B450ITX ASUS/16GB

- Xenology, Canvas, Window

 

클라우드

Oracle: Zerotie, Vultr: Pritunl, AWS: 미디어 프로덕션

profile image 1등
달소 2022.11.01. 13:07

와.. 완전 정성이담긴 상세한 가이드 감사드립니다!

이거면 초보자도 쉽게 패스쓰루해서 사용할수있겠네요 ㄷㄷ

DarkAcid 글쓴이 2022.11.02. 01:34
moonss

저도 참고 많이 했습니다 제가 구성할때는 안타깝게도 가격이 많이 올라와있을 때라 저렴하게 1060 3gb 갔는데 지금 생각하면 p2200을 갔어야할거 같아요 :(

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

본 게시판은 서버구축 게시판과 통합되었습니다.

서버구축 게시판 이동하기
분류 제목 글쓴이 날짜 조회 추천
공지 서버OS(ESXi/Linux/Router 등) 게시판 이용안내. 달소 21.11.16.17:43 585 +1
ESXi 공지 ESXi 관련 추천글 모음 5 달소 21.04.23.12:19 3746 +6
ESXi USB LAN으로 ESXi8 설치하기.(Feat. Realtek LAN) 15 달소 23.01.01.18:51 2172 +2
Assistant OS 당신이 알아야할 새로운 스탠다드 Matter란 무엇인가 5 DarkAcid 22.12.30.02:38 736 +1
Proxmox 인텔 igpu는 gvt-g를 이용해 두개 이상의 가상머신에 패스스루 해줄 수 있네요. 13 니즛 22.12.23.02:19 1365 +1
질문
normal
초코코알라 23.05.06.18:14 662 0
Proxmox
image
굿럭 23.01.05.12:59 1423 0
Linux
image
달소 23.01.05.10:23 361 0
질문
image
swift89 23.01.04.14:05 378 0
질문
image
DarkAcid 23.01.04.12:34 438 0
Linux
image
콜라 23.01.03.23:07 615 0
질문
normal
ENTJ도플랜 23.01.03.13:15 305 0
Proxmox
image
eyeball 23.01.02.14:42 1222 0
ESXi
image
달소 23.01.01.18:51 2172 +2
질문
normal
누구냐 23.01.01.00:06 460 0