Proxmox 로 홈 서버 구축하기: (10) iGPU Passthrough 사용하기

미니PC가 옛날 사양 AMD Ryzen 7 7840HS(780M iGPU) 이고, proxmox trixie 는 최신 드라이버라 proxmox 패키지와 충돌이 발생하여 해결한 과정을 기록해보려 한다.

 

 

1. proxmox host server 에서 해야 할 설정

(1) CPU 및 iGPU 드라이버 상태 확인

# CPU 확인
lscpu | grep "Model name"

# iGPU 및 드라이버 로드 상태 확인
lspci -nnk | grep -i vga -A3

# IOMMU 그룹 분리 상태 확인
find /sys/kernel/iommu_groups/ -type l

iGPU 를 쓰고 싶다면 VM 이 아니라 LXC(LXC 설치방법은 여기)를 사용해야 하고, root 계정으로 접속해야한다.

결과
# CPU 확인
Model name: AMD Ryzen 7 7840HS w/ Radeon 780M Graphics

# iGPU 및 드라이버 로드 상태 확인
c5:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 [1002:15bf] (rev c2)
Subsystem: Device [1f66:0031]
Kernel driver in use: amdgpu
Kernel modules: amdgpu

# IOMMU 그룹 분리 상태 확인
/sys/kernel/iommu_groups/17/devices/0000:c5:00.0
.
.
.
/sys/kernel/iommu_groups/27/devices/0000:c7:00.0

확인 결과,  AMD Ryzen 7 7840HS(780M iGPU) 를 사용 중이며,  IOMMU Group 17에  VGA 컨트롤러(c5:00.0) 가 독점 할당되어 있다.

 

(2) CA 인증서 시간 동기화

# CA 인증서 및 시간 동기화
apt install -y ca-certificates && update-ca-certificates
# Proxmox 템플릿 저장소로 이동
cd /var/lib/vz/template/cache
# 수동으로 Noble(24.04) 표준 템플릿 다운로드 (인증서 검증 무시 옵션 포함)
wget --no-check-certificate https://images.linuxcontainers.org/images/ubuntu/noble/amd64/default/20260201_07:42/rootfs.tar.xz -O ubuntu-24.04-noble.tar.xz

 

(3) LXC SSH 허용

apt update && apt install -y openssh-server
systemctl enable --now ssh

# 원하는 비밀번호를 두 번 입력 (화면에는 안 보입니다)
passwd root

# nano 가 설지 안되어있을시 이거 먼저
apt install nano
# nano 가 설치 되어있을 시 이것만
nano /etc/pve/lxc/100.conf

# 파일 수정
nano /etc/ssh/sshd_config

# 찾을 내용: #PermitRootLogin prohibit-password
# 수정 내용: PermitRootLogin yes (앞의 # 주석을 반드시 지워야 합니다!)

systemctl restart ssh
ls -l /dev/dri/renderD128
crw-rw---- 1 root render 226, 128 Feb  5 18:23 /dev/dri/renderD128
결과
crw-rw---- 1 root render 226, 128 Feb  5 18:23 /dev/dri/renderD128

 

(4) iGPU(780M) 사용을 위한 호스트 설정

# CT 생성 후 LXC 설정 파일 수정. LXC 번호가 100번이라면
nano /etc/pve/lxc/100.conf

# 호스트의 그룹 ID(GID) 확인
ls -l /dev/dri/renderD128
getent group render | cut -d: -f3
  • 100.conf 맨 하위에 추가할 내용
### 추가
# 1. 780M iGPU 장치 경로 및 주소 설정 (226, 128 사용)
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
# 2. 권한 매핑 (GID 993 기준 정밀 계산본)
lxc.idmap: u 0 100000 65536
lxc.idmap: g 0 100000 993 lxc.idmap: g 993 993 1
lxc.idmap: g 994 100994 64542
결과
# 호스트의 그룹 ID(GID) 확인. render 가 그룹, 226 혹은 128 가 장치의 '주소(Major/Minor 번호)'
crw-rw---- 1 root render 226, 128 Feb  5 18:23 /dev/dri/renderD128
# 993 가 장치를 사용할 '자격(GID)'  (Group ID) : 비특권 컨테이너(Unprivileged)는 이 993이라는 자격증을 호스트에서 컨테이너 안으로 배달해줘야만 iGPU를 쓸 수 있음
993

 

(5) 권한 개방

# 권한 등록 확인
cat /etc/subgid

# 권한 개방
echo "root:993:1" >> /etc/subgid

# 컨테이너 재시작
pct stop 100
pct start 100

 

 

2. LXC 내부에서 실행

apt update && apt install -y mesa-va-drivers
clinfo clinfo | grep -i "Device Name"

clinfo | grep -i "Device Name" 이거 결과가 안보일때 장치 파일(통로)은 뚫렸지만 그 통로를 통해 GPU와 대화할 '통역사(라이브러리)'가 컨테이너 안에 없음. OpenCL로 해석할 라이브러리가 있어야 한다.

 

(1) OpenCL ICD 로더 설치 및 장치 그룹ID의 권한 변경

# 1. 패키지 업데이트 및 OpenCL ICD 로더 설치
apt update
apt install -y clinfo mesa-opencl-icd ocl-icd-libopencl1
# 2. RDNA 3 가속을 위한 펌웨어/드라이버 라이브러리 추가
apt install -y mesa-va-drivers mesa-vdpau-drivers libvulkan1 mesa-vulkan-drivers

# LXC 내부에서 render 그룹의 ID를 993으로 강제 변경
groupmod -g 993 render # 이미 존재한다고 뜨면 할필요 x
# root 사용자를 render 그룹에 추가
usermod -aG render root

# 내부 다시 확인
clinfo | grep -i "Device Name"
ls -l /dev/dri/renderD128
결과
crw-rw---- 1 nobody kvm 226, 128 Feb  5 09:23 /dev/dri/renderD128

ls -l 결과가 nobody kvm으로 나온다는 것은 현재 "통로는 열렸지만, 열쇠가 맞지 않는 상태"이므로, 권한을 주면 된다. 그리고 로그아웃(exit)후에 다시 로그인하기.

# clinfo | grep -i "Device Name" 명령어
  Device Name                                     AMD Radeon 780M Graphics (radeonsi, phoenix, LLVM 20.1.2, DRM 3.64, 6.17.4-2-pve)
    Device Name                                   AMD Radeon 780M Graphics (radeonsi, phoenix, LLVM 20.1.2, DRM 3.64, 6.17.4-2-pve)
    Device Name                                   AMD Radeon 780M Graphics (radeonsi, phoenix, LLVM 20.1.2, DRM 3.64, 6.17.4-2-pve)
    Device Name                                   AMD Radeon 780M Graphics (radeonsi, phoenix, LLVM 20.1.2, DRM 3.64, 6.17.4-2-pve)

 

(2) ROMC 라이브러리 설치

apt update
apt install -y libhsa-runtime64-1 rocminfo

# GPU 나오는지 확인
rocminfo | grep "Device Type"

 

(3) host 에서 컨테이너 내부 장치 권한을 강제로 개방

chmod 666 /var/lib/lxc/100/rootfs/dev/kfd
chmod 666 /var/lib/lxc/100/rootfs/dev/dri/renderD128

# 수정
nano /etc/pve/lxc/100.conf
  • 100.conf 에서 추가해야할 부분
# 기존 hook 줄을 지우고 아래 내용을 한 줄씩 정확히 넣으십시오.
lxc.autodev: 1
lxc.hook.autodev: sh -c "chmod 666 ${LXC_ROOTFS_MOUNT}/dev/kfd || true"
lxc.hook.autodev: sh -c "chmod 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 || true"

※ 이게 가장 중요!!! 이 권한이 열리지 않으면 iGPU 사용 불가.

 

 

3. ollama 설치

# 1. 패키지 리스트 업데이트 및 zstd 설치
apt update
apt install -y zstd

# 2. 다시 Ollama 설치 스크립트 실행
curl -fsSL https://ollama.com/install.sh | sh

# 3. 환경변수 설정
### 1. 오버라이드 폴더 생성
mkdir -p /etc/systemd/system/ollama.service.d
### 2. 설정 파일 작성
cat <<EOF > /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=11.0.2"
Environment="HIP_VISIBLE_DEVICES=0"
EOF
### 3. 변경사항 적용 및 서비스 시작
systemctl daemon-reload
systemctl enable ollama
systemctl restart ollama

# 4. 호스트 또는 LXC 내부 어디서든 실행 가능
apt update && apt install -y nvtop
nvtop

 

 

4. LLM 모델 설치 후, GPU 사용량 확인

(1) GPU 모드인지 CPU 모드인지 확인

ollama ps
결과
NAME          ID              SIZE      PROCESSOR    CONTEXT    UNTIL              
qwen2.5:3b    357c53fb659c    2.4 GB    100% GPU     4096       3 minutes from now

 

(2) GPU 실시간 사용량 확인 가능

/opt/rocm/bin/rocm-smi
결과
WARNING: AMD GPU device(s) is/are in a low-power state. Check power control/runtime_status

========================================= ROCm System Management Interface =========================================
=================================================== Concise Info ===================================================
Device  Node  IDs              Temp    Power     Partitions          SCLK  MCLK     Fan  Perf  PwrCap  VRAM%  GPU%  
              (DID,     GUID)  (Edge)  (Socket)  (Mem, Compute, ID)                                                 
====================================================================================================================
0       1     0x15bf,   4505   39.0°C  25.064W   N/A, N/A, 0         N/A   2800Mhz  0%   auto  N/A     2%     0%    
====================================================================================================================
=============================================== End of ROCm SMI Log ================================================

우측의 VRAM%GPU% 가 실시간으로 변하는 것을 확인할 수 있다.