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

Proxmox에서 NVIDIA 일반 그래픽 카드의 vGPU 기능 사용하기

등짝에와이프손자국 4412

9

6

개인적으로 자료를 작성하여 저장 목적이었으나 누군가에게 도움이 될것 같아 서버포럼 가입과 동시에 글 작성을 합니다.
IT 지식이 많지 않아 틀린 부분도 있을 수 있고, 질문에 제대로 답변을 못할수도 있으나 저보다 더 잘 아시는 분들이 추가 설명을 해줄것으로 믿고 정보를 공유 하겠습니다.

vGPU기능은 NVIDIA GRID 그래픽 카드(Quardro RTX 등...)를 이용하여 가상화 시스템에 자원을 나눠쓰는 기능으로 알고 있습니다. 일반적으로 데스크톱에서 사용하는 NVIDIA 그래픽 카드는 이러한 기능을 사용못하게 막아논것으로 알고 있으나 능력자 분들이 해당 기능을 해제하는 방법을 제공하였고 많은 삽질 끝에 성공하여 해당 방법을 공유 하도록 하겠습니다.

해당 기능은 상당히 민감 부분이 있어 Proxmox의 커널 버전 및 NVIDIA 드라이버 버전등이 다 맞아 떨어 지지 않으면 제대로 동작하지 않았습니다.
그때문에 많은 삽질이 있었으며, 혹시 해보실분은 저와 최대한 동일하게 맞추신 후에 시작하시길 추천 드리며 모든 작업은 /root 에서 진행 하였습니다. 아래 사이트에서 많은 정보를 얻었으며 출처에 문제가 있을경우 삭제 하도록 하겠습니다.

 

https://www.youtube.com/watch?v=jTXPMcBqoi8&t=149s
https://wvthoog.nl/proxmox-7-vgpu-v2/#Mdevctl
https://gitlab.com/polloloco/vgpu-5.15

 

 

1. PC 사양
 - OS  : Proxmox 7.2
 - CPU : intel i-7 8700
 - RAM : 16G
 - GPU : MSI 지포스 RTX 2070 SUPER 게이밍 X D6 8GB 트윈프로져7
 
2.Proxmox 기본 설정 및 필수 패키시 설정
기본적으로 Proxmox 7.2버전을 설치하고 최신 버전으로 업데이트 진행이 완료 상태에서 시작하도록 하겠습니다. 

아래 명령어를 통해서 Proxmox 의 grub을 수정합니다.

nano /etc/default/grub 

 

GRUB_CMDLINE_LINUX_DEFAULT 항목을 아래와 같이 CPU에 맞게 수정 후 저장합니다.

INTEL CPU  :  GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
AMD CPU  : GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

1.PNG.jpg

 

grub을  update합니다.

update-grub

2.PNG.jpg

 

정확한 기능은 모르겠으나 아래 명령어를 통해 /etc/modules, /etc/modprobe.d/blacklist.conf에 추가후 initramfs를 update 합니다.

echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u

3.PNG.jpg

 

Proxmox를 재부팅하고 필요한 패키지를 아래 명령어를 통해 설치해 줍니다.

apt install -y git build-essential dkms pve-headers-`uname -r` mdevctl

 

3. VGPU_UNLOCK-RS 설치

vGPU기능을 사용하기 위해서는 vgpu_unlock-rs라는 기능을 사용해야 합니다. 해당 프로그램은 일반 그래픽 카드의 pci_id를 속여 vgpu기능을 unlock 한다고 알고 있습니다. 자세한 내용은 아래 사이이트에 정보가 있습니다.

https://github.com/mbilker/vgpu_unlock-rs

 

그러면 계속해서 진행 하도록 하겠습니다. 아래 명령어를 통해서 vgpu_unlock-rs 프로그램을 받아옵니다.

git clone https://github.com/mbilker/vgpu_unlock-rs /usr/src/vgpu_unlock-rs

 vgpu_unlock-rs에 실행 권한을 주고 아래 명령어들을 차례대로 실행합니다.

chmod -R +x /usr/src/vgpu_unlock-rs

다음 명령어를 통해서 sh파일을 실행하고 아래와 같은 화면에서 1 default를 선택합니다.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

6.PNG.jpg

 

설치가 완료되면 아래 명령어를 실행합니다.

source $HOME/.cargo/env

7.PNG.jpg

 

vgpu_unlock-rs를 받은 폴더로 이동하여 cargo를 빌드 합니다.

cd /usr/src/vgpu_unlock-rs
cargo build --release 

8.PNG.jpg

 

4. NVIDIA 그래픽 드라이버 설치

이제 vGPU를 사용하기 위해서는 해당 드라이버가 필요한데 이걸 일반적인 방법으로 구할수가 없었습니다. 많은 시간을 해당 드라이버를 찾기 위해 검색하였으나 버전이 낮거나 내 PC와 호환성이 떨어 지는등   검색해서 다운 받은 드라이버들이 제대로 설치가 안되었습니다. 해당 드라이버를 수십번 지웠다 다시 설치를 반복하던중 vgpu_unlock-rs  디스코드 커뮤니티에서 현재 제가 성공한 드라이버를 얻을수 있었습니다. 해당 드라이버는 공유를 해드리고 싶으나 방법을 몰라 추후에 찾는다면 글을 수정하여 공유 하도록 하겠습니다.

 

다운받은 드라이버는 프로그램을 통해(저는 MobaXterm 통해 바로 올렸으나 WinSCP 같은 프로그램을 이용해도 된다고합니다)  Proxmox의 root 폴더로 업로드 합니다.

10.PNG.jpg

 

아래 두 명령어를 실행하여 그래픽 드라이버를 설치합니다.

sh /root/NVIDIA-LINUX-x86_64-510.47.03.-MERGED-UNLOCKED.run --target /root/nvidia_vgpu_unlock -x
/root/nvidia_vgpu_unlock/nvidia-installer --dkms

 

설치가 끝나면 아래 명령어로 필요한 폴더를 생성해 줍니다.

mkdir /etc/systemd/system/{nvidia-vgpud.service.d,nvidia-vgpu-mgr.service.d} /etc/vgpu_unlock

아래 명령어를 통하여 해당 파일을 편집합니다. 해당 파일은 vgpu에서 사용할 profile을 설정하는 용도 입니다.

nano /etc/vgpu_unlock/profile_override.toml

아래 정보를 profile_override.toml 파일에 입력합니다. 해당 정보에 대해서 아는데로 설명을 해드리면

vgpu를 사용하기 위해서는 해당 그래픽카드의 자원을 어떤식으로 나눠쓸지 정해놓은 가이드가 있습니다. 해당 가이드의 넘버(아래에서는 259번)를 사용할수 있는데 우리는 이 정보를 커스텀(?) 한다고 보면 될것 같습니다.

여기서 중요한 정보는 젤 하단에 있는 pci_id, pci_device_id입니다. 우리는 실제 GRID그래픽 카드를 사용하지 않지만 동일한 칩셋(?)을 사용하는 일반 그래픽카드를 속이는 역할을 한다고 합니다. 제가 테스트 할때는 3000번 그래픽 카드는 unlock을 지원하지 않았으나 현재는 지원하는지는 알수가 없네요..아래 정보는 profile 생성시 원하는 값으로 변경할때 사용하는 값들입니다. 

 

===========================================================================
framebuffer = 0x76000000  # VRAM size for the VM. In this case its 2GB
# Other options:
# 1GB: 0x3B000000
# 2GB: 0x76000000
# 3GB: 0xB1000000
# 4GB: 0xEC000000
# 8GB: 0x1D8000000
# 16GB: 0x3B0000000

===========================================================================

엔비디아카드                                GPU 칩            vGPU 잠금 해제 프로필
GTX 900 시리즈(1세대)           GM107 x4               테슬라 M10
GTX 900 시리즈(2세대)           GM204 x2               테슬라 M60
GTX 1000 시리즈                       GP102                    테슬라 P40
타이탄 V,쿼드로 GV100             GV100                    테슬라 V100 16GB
RTX 2000 시리즈                        TU102                    쿼드로 RTX 6000
RTX 3000 시리즈                         GA10x                 암페어는 지원되지 않습니다

===========================================================================
PCI IDs
- pci_id = 0x####@@@@ (Device ID followed by SubSystem ID)
- pci_device_id = 0x#### (Device ID only)

 

Architecture              Card                             pci_device_id              pci_id
- Maxwell            Quadro M6000                 0x17F011A0                   0x17F0
- Pascal                Quadro P6000                  0x1B3011A0                   0x1B30
- Volta                   Quadro GV100                  0x1DBA121A                   0x1DBA
- Turing                Quadro RTX 6000             0x1E3012BA                   0x1E30
- Kepler            (currently not supported)
- Ampere             (currently not supported)

===========================================================================

위의 정보들을 가지고 아래 프로필을 작성합니다. 저의 경우는 

1920 * 1080 해상도에 60프레임 제한을 걸었고 VRAM은 4G를 사용한다고 설정하였습니다.

[profile.nvidia-259]
num_displays = 1
display_width = 1920
display_height = 1080
max_pixels = 2073600
cuda_enabled = 1
frl_enabled = 60
framebuffer = 0xEC000000
pci_id = 0x1E3012BA
pci_device_id = 0x1E30

 

아래 명령어를 실행하고 제대로 등록되었는지 확인합니다.

echo -e "[Service]\nEnvironment=LD_PRELOAD=/usr/src/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpud.service.d/vgpu_unlock.conf

echo -e "[Service]\nEnvironment=LD_PRELOAD=/usr/src/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so" > /etc/systemd/system/nvidia-vgpu-mgr.service.d/vgpu_unlock.conf

 

마지막으로 libvgpu_unlock_rs.so 파일을 복사하고 시스템을 재부팅 합니다.

cp /usr/src/vgpu_unlock-rs/target/release/libvgpu_unlock_rs.so /lib/nvidia/libvgpu_unlock_rs.so

 

5. vGPU를 VM에 적용

시스템을 재부팅하고 아래 명령어를 실행하여 캡쳐화면과 같은 정보가 나오면 설치는 제대로 됐습니다.

mdevctl types

19.PNG.jpg

 

미리 만들어둔 2개의 VM에 아래와 같이 그래픽 카드를 지정해줍니다.

20-2.png.jpg

20-3.png.jpg

 

 

MDev Type을 선택하여 위에서 우리가 프로필로 등록해서 nvidia-259를 선택합니다.

해당 프로필을 선택하면 vm에 4G VRAM을 할당하고 1920 * 1080 해상도를 사용할수 있는 그래픽카드 자원을 할당 하는것입니다.
20-5.png.jpg

 

VM을 시작하기전 우리는 Proxmox shell로 와서 아래 명령어를 실행합니다.

nano /etc/pve/qemu-server/100.conf

만약 자신의 VMID가 200번이라면  nano 200.conf의 정보를 수정해주시면됩니다. 

최상단에 아래 args를 추가해주고 동일하게  VMID에 맞게  젤마지막 3자리 숫자를 수정해줍니다.

args: -uuid 00000000-0000-0000-0000-000000000100

20.PNG.jpg

 

또다른 VMID 101번도 동일하게 작업을 해줍니다.

20-1.PNG.jpg

 

이제 VM을 시작하고 윈도우에서 장치 관리자를 확인합니다.

23-1.png.jpg

 

위와 같이 기본 디스플레이 어뎁터가 2개로 보입니다. 

이제 그래픽 드라이버를 윈도우에 설치를 해야합니다.

사이트에서 드라이버를 한번더 클릭하여 아래와 같이 버전을 선택하여 다운 받을수 있도록 드라이버를 검색합니다.

정확한 이유는 모르겠으나 최신 드라이버를 사용할 경우 제대로 동작을 하지 않습니다.

proxmox에서 설치한 510.47.03 버전과 관련이 있지 않을가 하는 추측만 있습니다.

제가 테스트해서 성공한 473.47 버전을 다운 받습니다.

 

24-1-1.png.jpg

 

24-1-2.png.jpg

 

마지막으로 모니터 화면으로 VM의 화면을 볼수가 없으므로 원격 프로그램을 설치 합니다.

개인적으로 가장 편하게 Parsec을 설치 하였으나 Moonlight, Steam Link도 사용이 가능했습니다.

Moonlight의 경우에는 geforce experience를 vGPU사용시 설치 할수가 없어(정확히는 설치는 가능하나 Moonlight 사용이 불가) Sunshine Streaming Server 를 설치하여 사용해야합니다.  Sunshine Streaming Server 설치시 조건이 까다롭긴 하였으나 성능도 좋았고 사용은 가능하였습니다. 성능은 Parsec이 제 기준에선 제일 안좋았으나 키보드 마우스를 자주 사용해야하고 설정이 편해서 테스트는 Parsec을 사용하였습니다. Parsec의 경우 Client의 Decode 능력도 좀 있어야해서 구형 PC에서는 성능이 좀 떨어지는 편입니다..

 

Parsec : https://parsec.app/

Sunshine Streaming Server : https://github.com/loki-47-6F-64/sunshine

Moonlight Streaming Client : https://moonlight-stream.org/

 

마지막으로 사운드는 vGPU사용시 따로 드라이버를 잡을수 있는 방법을 찾지 못하여 VB CABLE을 이용하였습니다.

VB CABLE : https://vb-audio.com/Cable/index.htm

 

그래픽 드라이버를 설치하고 아래와 같이 장치 관리자에서 Quardro RTX 6000이 정상적으로 설치되었는지 확인합니다.

이과정에서 에러가 발생 할 경우 거의 대부분의 그래픽 드라이버의 버전 문제 입니다. 

25-1.png.jpg

 

그래픽 드라이버가 정상적으로 설치 되면  Parsec을 이용하여 해당 VM에 정상 접속이 되는지 확인합니다. 만약 Parsec이 검정화면이 되거나 접속이 안된다면 그래픽 드라이버가 제대로 설치 안된 경우가 많습니다. 이경우 PC를 재부팅하여 장치관리자를 확인하고 오류가 있는지 확인해야합니다.

Parsec으로 접속시 정상 접속이 되면 VM을 종료합니다.

 

이제 VNC로 접속할일이 없기 때문에 아래와 같이 Primary GPU를 체크하고 VM을 시작합니다.

28.png.jpg

Proxmox shell로 이동하여 nvidia-smi 명령어를 통해 GPU의 사용량을 확인합니다.

< VM 1개  >

100.png.jpg

 

< VM 2개  >

101.PNG.jpg

 

 

6. 마무리

테스트로 VM1에서는 디아2 레저렉션, VM2에서는 디아3를 동시에 돌렸을경우 VM1에서 중옵으로 60프레임 유지는 못하였지만 디아3은 잘돌아갔습니다. 8700의 사양과 램을 각각 8기가로 지정한 VM을 생각한다면 상당히 괜찮은 성능이 나온것 같습니다. 기존에 5900x의 메인 PC에서 엘든링을 돌린적이 있었는데 PC의  자원이 충분하다면 성능이 나쁘진 않을것으로 보입니다.

동영상 첨부가 어려워 캡처화면으로 성능을 예상하셨으면 좋겠습니다. 처음 쓰는 글이라서 보기 힘들기도 하시겠지만 추후에 시간이 된다면 오타 및 잘못된 정보를 수정하도록 하겠습니다. 질문은 받겠지만 아는 지식이 많지 않아 답변을 제대로 못할것 같습니다. 쓸데없는 정보긴 하지만 누군가에게 도움 되길 바랍니다.200.png.jpg

 

201.png.jpg

 

신고공유스크랩
6
9명이 추천

등짝에와이프..
6Lv. 740P
다음 레벨까지 240P

와이프에게 등짝 맞는 취미만 가진 사람입니다.

profile image 1등
달소 2022.07.29. 19:44

와... 첫글이 이런 정성스러운글이라니...

패스스루의경우 어느정도 익숙한감이 있었는데

vGPU를 두개로 쪼개서 돌리는건 상상도 못했습니다 ㅎㅎ..

 

너무 좋은 가이드글이라고 생각합니다👍👍

2등
사군 2023.01.05. 14:50
저에게 정말 필요한 내용 이였는데, 감사합니다.
저는 업무적으로 그래픽 패스스루가 필요한데요.
zip 파일을 다운받고 싶은데, nvidia 에 gmail 로 회원 가입했더니, 계속 로그인이 안되서 zip 파일을 다운로드 못하고 있는...
Nicona 2023.01.25. 22:36
사군
사실 이 글은 그래픽 패스쓰루의 목적보다는
한개의 그래픽카드를 가상의 그래픽카드로 쪼개어서 공유하는데 의의가 있다고 봅니다 ㅎㅎ
단순 패스쓰루는 굳이 그래픽 인식을 변경할 필요는 없어보입니다
3등
fewaew 2023.03.09. 20:54
어마어마한 글이네요
3070 이렇게 써볼려고 검색해보는 줄입니다. 좋은 글 감사합니다
profile image
꾀지남편 2023.05.11. 17:13
정말 큰 도움이 되었습니다. 감사드려요.
GTX 1060 3G 와 P400을 사용 중이라 글카 기변이 생각나는 후기입니다.
저는 웹 UI 사용을 위해서 primary GPU로 사용하지 않고 화면 1만 표시 확장 화면은 복제로 설정해서 PVE 웹상에서 관리하도록 설정했습니다.
xigncode3 사용하지 않는 간단한 게임들은 돌려 놓기에도 좋겠으나 저는 패스쓰루 43 무적회피로 잘썼습니다.

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

취소 댓글 등록

cmt alert

신고

"님의 댓글"

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

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

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

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