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

Proxmox DebianVM에서 n100 vgpu 사용하게 만들기

binn328 545

1

16

반갑습니다. 

 

오늘은 제가 Proxmox의 debianVM에서 vGPU를 사용할 수 있도록 삽질했던 과정을 적어보고자합니다.

 

 


 

 

저는 처음에 Docker를 LXC로 사용을 했었는데요, LXC는 가볍다는 장점이 존재하기는 하지만, 권한없는 컨테이너로 생성돼서 일부 작업들이 권한에 막혀 진행이 되지 않는 경우가 많습니다. 

 

권한있는 컨테이너로 바꾸면 해결이 되긴 하지만... 해외의 질문글을 보면 모두 보안에 문제가 있다면서 절대로 하지 말라고 하더군요. 

 

그래서 이참에 debianVM을 새로 올리고 Docker도 그쪽으로 옮겼습니다.

 

덕분에 nfs 마운트도 잘 되고 tailscale도 문제없이 동작을 하네요. 

 

여기에 더해서 n100의 igpu를 DebianVM에서 사용할 수 있도록 만들어보고자 합니다.

 

 

관련 자료들을 검색하다보니 이런 글을 발견했습니다.

 

 

GPU를 VM에 넘겨주면 그 VM만 GPU를 독점적으로 사용하게 된다는 문제점이 있는데, 인텔의 vGPU 기술을 사용하면 여러 VM, LXC에서 GPU 하나를 나눠서 사용할 수 있다는 것입니다. 

 

 

이 github의 설명을 따라 PVE 호스트에서의 설치를 마치면 총 7개의 gpu를 확인할 수 있었습니다.

 

image.png.jpg

 

다음은 debianVM에서 해당 gpu를 사용하도록 해주면 되는데... 여기서 오랜 시간을 묶여있었습니다.

 

debian은 일부 컴파일 되지 않는 커널이 존재해서 설정을 변경하고 새로 컴파일을 해주어야한다고 하더군요.

 

 


 

1. VM 백업하기

우선 VM을 백업해야합니다. 

 

여러번 실패하고, 한 번은 뭘 잘못건드려서 부팅이 안되는 상황이 발생했습니다... 다행히 작업 전에 백업해둔게 있어서 백업 시점으로 돌아와 몇 번이고 다시 시도하는게 가능했습니다.

 

꼭 백업을 해주세요.

 

2. 커널을 가져와 빌드하고 설치하기

그 다음은 커널을 빌드해야합니다.

 

VM에서 우선 필요한 패키지들을 설치합니다.

 

apt install dkms dwarves git linux-source-6.1 pahole vaifo 

 

그 다음 /usr/src 디렉터리로 이동해 linux-source-6.1.tar.xz의 압축을 풉니다.

 

cd /usr/src
tar xJvf linux-source-6.1.tar.xz 

 

현재 커널의 빌드 정보를 .config라는 이름으로 가져옵니다.

현재 커널 정보는 uname -r 로 알 수 있습니다.

image.png.jpg

cp /boot/config-6.1.0-18-amd64 /usr/src/linux-source-6.1/.config 

 

가져온 파일을 수정합니다.

 

파일이 길어서 검색이 필요하니 vim을 사용하겠습니다.

 

vim /usr/src/linux-source-6.1/.config 

 

:? CONFIG_INTEL_MEI_PXP

:? CONFIG_DRM_I915_PXP

 

로 검색해서 아래와같이 바꿔주시면 됩니다.

 

image.png.jpg

image.png.jpg

 

저는 CONFIG_DRM_I915_PXP가 없어서 적당한 곳에 추가해주었습니다.

 

수정이 완료되었다면 :wq로 저장하고 나옵니다.

 

 

이제 커널을 빌드할 시간입니다.

 

cd /usr/src/linux-source-6.1
make deb-pkg LOCALVERSION=-sriov KDEB_PKGVERSION=$(make kernelversion)-1 

 

커널 빌드는 한참이 걸립니다. 

 

켜두고 잠시 다른일 하다 오시면 좋습니다.

 

VM 디스크 용량이 30GB였는데 꽉차서 중간에 멈춰버렸습니다....

 

빌드 전에 용량 많이 할당하고 하시는걸 추천드립니다. 안그러면 4시간 할거 8시간 걸려요...

 

image.png.jpg

 

오후 1시에 시작해서 오전 00시에 빌드가 끝났습니다. -j 옵션을 이용해서 병렬 처리 하시는걸 추천드립니다...

 

image.png.jpg

 

빌드가 끝났으니 설치할 시간입니다. 설치후에 재부팅을 해줍니다.

 

dpkg -i /usr/src/*.deb
reboot 

 

재부팅이 끝나면 uname -r 명령어로 빌드한 커널이 실행 중인지 확인합니다.

 

image.png.jpg

 

3. 드라이버 빌드 후 설치하기

이제 드라이버를 빌드해서 설치하면 됩니다.

 

우선 소스코드를 받아옵니다.

 

cd /usr/src
git clone https://github.com/strongtz/i915-sriov-dkms i915-sriov-dkms-6.1
 

 

그런 다음 소스코드에서 dkms.conf 파일을 수정합니다.

 

PACKAGE_NAME과 PACKAGE_VERSION 을 수정합니다.

 

vim i915-sriov-dkms-6.1/dkms.conf 
PACKAGE_NAME="i915-sriov-dkms" # 여기와
PACKAGE_VERSION="6.1"     # 여기를 수정해주면 됩니다.

MAKE[0]="make -j$(nproc) -C ${kernel_source_dir} M=${dkms_tree}/${PACKAGE_NAME}//
${PACKAGE_VERSION}/build KVER=${kernelver}"
CLEAN="make -j$(nproc) -C ${kernel_source_dir} M=${dkms_tree}/${PACKAGE_NAME}/${{
PACKAGE_VERSION}/build KVER=${kernelver} clean"

BUILT_MODULE_NAME[0]="i915"
DEST_MODULE_LOCATION[0]=/kernel/drivers/gpu/drm/i915

AUTOINSTALL=yes 

 

이제 드라이버를 설치합니다.

 

dkms install --force -m i915-sriov-dkms -v 6.1 

 

드라이버 설치가 완료되면 grub을 수정해주고 재부팅합니다.

 

vim /etc/default/grub 

 

GRUB_CMDLINE_LINUX_DEFAULT 뒤에 quiet i915.enable_guc=3 을 붙여주시면 됩니다.

 

image.png.jpg

 

 

수정을 완료하면 grub을 업데이트하고 VM을 종료합니다.

 

update-grub
update-initramfs -u 

 

하드웨어 탭에서 PCI 장치를 추가합니다.

 

image.png.jpg

 

이제 VM을 다시 시작합니다.

 

그리고 GPU가 잘 붙었는지 확인합니다.

 

lspci | grep -i vga
lspci -vs 00:10.0 

 

Kernel driver in use 가 존재하면 성공입니다.

 

image.png.jpg

 

dmesg | grep i915
ls /dev/dri/render* 

 

잘 동작하고 있네요

 

image.png.jpg

 

4. Docker에서 gpu 사용가능하게 하기

하드웨어 가속이 동작하는지 확인하기 위해 젤리핀을 설치했습니다.

 

version: "3.5"
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    #user: uid:gid
    network_mode: host
    volumes:
      - ./config:/config
      - ./cache:/cache
      - ./media:/media
      #- ./media2:/media2:ro
    restart: unless-stopped
    ports:
      - 8096:8096
    # Optional - alternative address used for autodiscovery
    environment:
      - JELLYFIN_PublishedServerUrl=192.168.0.64
    # Optional - may be necessary for docker healthcheck to pass if running in host network mode
    devices:
      - /dev/dri:/dev/dri
    extra_hosts:
      - host.docker.internal:host-gateway
networks: {} 

 

devices:

   - /dev/dri:/dev/dri

를 추가해주면 컨테이너에서 장치에 접근할 수 있게 된다고 합니다.

 

image.png.jpg

 

로그를 살펴보니 vaapi로 잘 되고 있는 것 같습니다.

 

qhd -> 1080p 로 테스트를 해봤는데 속도도 빠르고 CPU도 얼마 안먹네요. 

 

잘 된 것 같습니다!

 

젤리핀 설치한 김에 한 번 제대로 구축을 해봐야겠습니다.

 

 


5. 마무리

 

다른 배포판 VM의 경우는 그냥 드라이버만 설치해주면 되는데, Debian은 커널 컴파일이 필요해서 상당히 오랜시간이 걸렸네요. 중간에 용량부족으로 한 번 끊긴게 너무 컸네요. 

 

부족한 글 읽어주셔서 감사합니다.

신고공유스크랩
16
binn328 글쓴이 2024.02.13. 14:20
사다리
패스스루하면 다른데서는 못쓰니 걱정했는데, 그걸 해결하는 기술이 있어서 적용해봤더니 좋습니다
binn328 글쓴이 2024.02.13. 14:20
행복구슬
드라이버 이름이 i915니 i915 이름을 사용하는 친구들은 되지 않을까합니다. 일단 제가 가진 pc는 n100 뿐이라서 다른 친구들은 잘 모르겠네요
profile image 3등
jerry80 2024.02.13. 14:17
에고 어려운 길을 가셨군요. 꼭 debian 이 필요한 상황이 아니면 ubuntu 22.04 로 하시면 커널 컴파일 하지 않으셔도 될겁니다.
저는 그나마 커널 빌드를 i7 8세대 머신에서 해서 deb 패키지로 n100 에 올렸었습니다. 지금은 그냥 lxc에 올려서 쓰고있고 VM에 올리는 것은 MInt Edge 버전으로 테스트만 했습니다.
binn328 글쓴이 2024.02.13. 14:21
jerry80
우분투는 이상한데서 말썽부리는 경험이 많아서 데비안을 선호하게 되었습니다...
profile image
jerry80 2024.02.13. 14:26
binn328
예.. 데비안이 제일 안정적이기는 한데, 커널 업데이트는 제일 느리지요. ^^
sriov 기능이 6.2 커널 버전부터는 기본 포함 되어있다고 하니까 debian bookworm 의 커널만 올리면 커널 컴파일 ㅗ과정이 필요없을 것 같기는 한데, 직접해보지는 않았네요.
binn328 글쓴이 2024.02.13. 14:35
jerry80
bookworm VM을 사용중인데, 처음 시도때 커널 컴파일없이 진행을 했었는데 동작하지 않았던걸 보면 bookworm도 커널 컴파일이 필요한 것으로 보입니다... 어려운길 가긴 했지만 성공해서 기분은 좋네요!
profile image
jerry80 2024.02.13. 14:40
binn328
bookworm 기본 커널은 6.1 인가 6.0 일겁니다. (커널 빌드 필요) 제가 말씀드린것은 bookworm의 커널만 6.2 이후 버전으로 올리는 것을 말씀드린 거였습니다.
binn328 글쓴이 2024.02.13. 14:41
jerry80

아하, 그렇군요!
만약 나중에 또 하게 되면 시도해보겠습니다.

riverflow 2024.02.13. 16:17

GRUB_CMDLINE_LINUX_DEFAULT뒤 추가하는 파라메터가 i195.enable_guc=3.. 이 아니라.. i915.enable_guc=3 인거 같은데.. ^^; 저도 이방법으로 해보았는데.. 10세대 igpu의 경우 i915.enable_guc 값을 2로 해야더군요. (n100은 12세대라 3)근데 그렇게해도 pms 하드웨어 디코딩시 알수 없는 memory leak이 생겨서.. lxc passthrough는 포기했습니다 ㅜㅜ 혹시나 jellyfin 하드웨어 디코딩시 메모리 사용량이 계속 올라가시는지 확인한번 해주시면 감사하겠습니다..

 

https://wiki.archlinux.org/title/intel_graphics

 

i915.enable_guc 옵션 설명이 나와있습니다. cpu별로 설정이 좀 다릅니다

binn328 글쓴이 2024.02.13. 18:05
riverflow
어엇, 확인해보니 오타가 나있네요, 덕분에 수정할 수 있었습니다. 감사합니다.
메모리는 유튜브 영상을 하나 받아 해상도를 계속 변경해가면서 확인해보았습니다.
VM에 할당된 메모리는 8GB 입니다.

VM 부팅 시 : 메모리 약 2GB
젤리핀 구동 시 : 메모리 약 5.41GB 유지
유튜브 영상 재생 테스트 시 : 메모리 약 6.45GB 유지
유튜브 영상 재생 종료 시 : 메모리 약 5.41GB 유지

20분정도 테스트해보았을 때 메모리가 지속적으로 증가하는 문제는 보이지 않았습니다.
따로 검색을 해보니 Jellyfin에서 알려진 메모리 관련 문제는 없다고 하네요.
Jellyfin으로 다시 시도해보시면 좋을 것 같습니다!
이치로운 2024.02.14. 12:44
좋은 가이드 감사합니다 실력이 미천하여 porxmox에 헤놀 올리고 여기에 도커를 구성해서 사용중입니다 헤놀에 vGPU할당은 별도의 빙법을 찾아야 하는건지요
binn328 글쓴이 2024.02.14. 18:09
이치로운
sa6400인가 라는 모델로 구성하면 헤놀에서 n100 igpu를 받아줄 수 있다고 여기서 봤던거같아요. 그러면 vGPU를 헤놀에 넘겨주면 잘 동작할것같습니다!
(해보진 않아서 확실하지는 않지만요)
binn328 글쓴이 2024.02.14. 18:11
이치로운
목적에 따라 다르긴 하겠지만, 헤놀은 단순히 저장공간 관리용으로 사용하고 다른 서비스는 VM을 하나 파서 사용하는게 개인적으로는 더 편했습니다.

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

취소 댓글 등록

cmt alert

신고

"님의 댓글"

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

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story
쓰기
태그 : docker
번호 분류 제목 글쓴이 날짜 조회 추천
잡담 iventoy pxe는 속도가 엄청 느리군요.. nohdd는 왜 빠르지.. 음... purndal 1일 전00:52 137 +2
잡담 proxmox로 갈아탔습니다 7 기현 2일 전07:34 411 +2
잡담 Immich가 FUTO에 합류했습니다.(Immich 핵심 팀은 정규직으로 근무합니다.) 4 달소 3일 전11:38 307 +1
43 가이드
image
ljr10 5일 전08:20 179 0
42 후기
normal
ljr10 24.04.26.21:18 175 0
41 질문
normal
감자칩 24.04.19.18:55 162 0
40 후기
image
추주비 24.04.18.10:33 376 +1
39 후기
normal
N4100 24.04.15.18:56 548 +4
38 질문
normal
감자칩 24.04.04.20:23 260 0
37 오픈소스
image
달소 24.03.30.22:45 464 +3
36 잡담
normal
달소 24.03.30.22:32 385 +2
35 질문
normal
DDOCCKER 23.05.29.12:48 347 0
34 질문
normal
very 24.02.29.11:10 233 0
33 질문
image
ljr10 24.03.01.18:53 97 0
32 정보
normal
서맹 24.03.08.15:15 182 +1
31 질문
normal
모랄로 24.03.04.17:54 509 0
30 후기
image
purndal 24.03.02.20:08 635 +3
29 오픈소스
image
달소 24.03.02.17:00 562 +5
28 질문
normal
very 24.03.01.11:37 170 0
27 후기
image
ljr10 24.02.28.13:04 365 0
26 질문
normal
adminator 24.02.28.13:02 105 0
25 질문
normal
very 24.02.22.21:27 93 0
24 질문
normal
very 24.02.20.12:50 253 0