Upgrade to Pro — share decks privately, control downloads, hide ads and more …

勘違いから始まったProxmox on ProxmoxでGPUパススルー【JPmoxs勉強会#...

勘違いから始まったProxmox on ProxmoxでGPUパススルー【JPmoxs勉強会#7】/JPmoxs7_GPU_Passthrough_on_Proxmox_on_Proxmox-A_Journey_That_Started_with_a_Misunderstanding

JPmoxs勉強会#7の登壇資料です。
https://jpmoxs.connpass.com/event/354625/

Avatar for 月見

月見

May 23, 2025
Tweet

Other Decks in Technology

Transcript

  1. 4 「VMware Cloud on AWS」の代替環境を構築できないか? (VM on Proxmox on ProxmoxなNested構成を作り、さらにGPUも扱いたい)

    なぜNestedなのか?(1/2) vCenter + vSANクラスタ VM VM VM VM ESXi ESXi ESXi  代替 できる? vCFの エコシステム + Nitro Hypervisor ⇨勘違い部分 (i3.metalは 物理マシン) VM VM VM VM 各種OSS & 努力 + Proxmoxクラスタ + Cephクラスタ 勘違いから始まっているのが力不足を物語っていますが Nested構成のつまづきポイントやベンチマーク結果を共有します Amazon EC2(i3.metalインスタンス)
  2. 5 • 物理マシン1台でクラスタ化やCephを検証できる • 導入費用やスペースも小規模で済む なぜNestedなのか?(2/2) 検証の コスト削減 インフラの サービス化

    • 学習用やセルフサービス用の環境として提供できる • 仮想化基盤のレンタルサービス(真のIaaS?)を提供できる 検証の 柔軟性向上 • ProxmoxがVMになるのでバージョンアップ検証を何度でも試せる • 複数のハイパーバイザーも同時に試せる(Proxmox, VMware, Hyper-V)
  3. 8 IOMMU有効化のための設定箇所はセキュアブートがON/OFFかで異なる 構築のポイント・ハマりどころ(1/3) セキュアブート:ON セキュアブート:OFF Proxmoxのブート順 UEFI → shim →

    GRUB2 → Linux UEFI → systemd-boot → Linux カーネルパラメータの 設定方法 /etc/default/grub を編集 ↓ update-grub ↓ reboot ↓ (/proc/cmdlineへ反映される) /etc/kernel/cmdline を編集 ↓ proxmox-boot-tool refresh ↓ reboot ↓ (/proc/cmdlineへ反映される) 検証環境ではセキュリティ関係を「OFF」にしがちですが ON/OFFが混在していると思わぬハマりどころになります。 この点さえ理解しておけばネストされた構成でも手順は同じです。
  4. 9 GPUの型番が表示されないとき 構築のポイント・ハマりどころ(2/3) # 接続されているPCIデバイスを確認 lspci -nn | grep -i

    nvidia # pciutilsをインストール sudo apt update sudo apt install --reinstall pciutils sudo update-pciids # 再度確認 lspci -nn | grep -i nvidia pciutilsをインストールする 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:25b0] (rev a1) 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA107GL [RTX A1000] [10de:25b0] (rev a1) GPUの型番が表示できていない (この状態でもドライバインストールやGPU利用は可能) 型番が表示されるようになった
  5. 10 ドライバがうまく動いていないとき 構築のポイント・ハマりどころ(3/3) NVIDIA公式の手順(右図)ではなく、 サードパーティのドライバ・CUDAを試してみる nouveauドライバを読み込まないようにする(私の場合は不要でした) nvidia-smi --- NVIDIA-SMI has

    failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. --- sudo apt install -y ¥ nvidia-headless-565-server ¥ nvidia-utils-565-server cat << 'EOS' | sudo tee /etc/modprobe.d/blacklist- nouveau.conf blacklist nouveau options nouveau modeset=0 EOS sudo update-initramfs –u && sudo reboot 上記のNVIDIA公式の手順では動作せずでした
  6. 12 ベンチマーク方法(1/2) • ベアメタル、VM、Nested VMのそれぞれの構成のスコアを比較 • 各5回計測し、スコアの平均値・標準偏差・統計的有意差を算出 CPUやGPUを用いた様々な処理を実行し、 総合的なスコアを測定するベンチマーク。 •

    マルチプラットフォーム対応 (Win/Mac/Linux/Android/iOS) • 測定対象:CPU、GPU(OpenCL) CUDAを対象にするには有料ライセンスが必要 GeekBench 6 https://www.geekbench.com/download/ llm-benchmark ローカルLLMを実行するollamaを用いて テキスト生成速度※を測定するベンチマーク。 ※LLMの推論はGPU(特にCUDA)を多用する。 https://github.com/aidatatools/ ollama-benchmark
  7. 13 ベンチマーク方法(2/2) llm-benchmark # 環境構築(llm-benchmarkはPyPIで公開されている) uv init uv add llm-benchmark

    # 設定ファイルを作成 cat << 'EOS’ > benchmark_setting.yml file_name: "benchmark_setting.yml" version: 1 models: - model: "llama3.1:8b" - model: "phi4:14b-q4_K_M" EOS # 実行 uv run llm_benchmark run ¥ --no-sendinfo ¥ --custombenchmark=benchmark_setting.yml # ダウンロードしたtar.gzをSCPなどで転送 # 解凍 tar zxf Geekbench-6.4.0-Linux.tar.gz cd Geekbench-6.4.0-Linux/ # OpenCLをインストール sudo apt install -y ocl-icd-libopencl1 clinfo # 実行(CPU関連) sudo ./geekbench_x86_64 # 実行(GPU関連) sudo ./geekbench_x86_64 --gpu GeekBench 6
  8. 14 ベンチマーク結果 OpenCL :ほぼ性能低下なし ローカルLLM:数%~20%近く低下(大きいモデルほど顕著) ※推論速度の投稿情報やPassMarkのスコアを調査すると1世代で25%ほど差がある CPU関連 :ネスト毎に数%低下 =CUDAを多用するワークロードではGPU 1世代分※の性能低下もありえる

    1,500 1,600 1,700 1,800 1,900 2,000 ベアメタル VM Nested Geekbench 6 Score Single-Core Score 7,000 8,000 9,000 10,000 11,000 12,000 ベアメタル VM Nested Geekbench 6 Score Multi-Core Score 50,000 51,000 52,000 53,000 54,000 55,000 ベアメタル VM Nested Geekbench 6 Score OpenCL Score 25.00 26.00 27.00 28.00 29.00 ベアメタル VM Nested tokens/second llama3.1:8b Speed -1.9% ** -3.8% -5.6% ** 2.00 4.00 6.00 8.00 10.00 12.00 ベアメタル VM Nested tokens/second phi4:14b-q4_K_M Speed ***** -6.5% -7.0% -13.1% +0.5% -0.1% +0.5% -0.2% -1.1% -1.3% -9.2% -9.5% -17.8% CPU関連 GPU関連 ***** ***** ******** * ** ***** *** ****** **********
  9. 15 1. SR-IOVやvGPU →コンシューマ向けGPUでも自己責任で可能!? 参考:Proxmox VEとコンシューマ向けGPUでvGPUを無料で試す | ふうせん https://www.fusenstage.com/2023/02/try-vgpu-with-consumer-gpu-on-pve/ 2.

    SDN, VXLAN まとめ 期待できそうな用途 成果 • ネストされた構成でもGPUパススルーを実現できた • 性能低下の度合いも把握できた • VMwareのリッチなエコシステムは必要としないインフラ構築 • 計算科学、レンダリング、画像処理 領域でのGPU利用 今後チャレンジしたいこと
  10. 16 この場をお借りして感謝申し上げます。 参考にさせていただいた記事 • ProxmoxVEの仮想マシンにGPUパススルー設定 | システムワークス株式会社 https://blog.systemworks.co.jp/?p=2155 • Proxmox

    VE で PCI Passthrough する | naa0yama's Blog https://blog.naa0yama.com/p/38w23-75e4w90p/ • 【第56回】例のミニPC「MS-01」にNVIDIA RTX A1000をセットして Stable Diffusionを動かしてみる | Ubuntu Japanese Team/株式会社 創夢 柴田充也 https://pc.watch.impress.co.jp/docs/column/ubuntu/1609191.html • ProxmoxVEでVMからGPUにアクセスする | @disksystem https://qiita.com/disksystem/items/0879f379e2bbc7a08675
  11. 20 3. GPUのPCIバスアドレス、デバイスIDをメモしておく 構築手順(3/9) lspci -nn | grep -i nvidia

    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA107GL [RTX A1000] [10de:25b0] (rev a1) 01:00.1 Audio device [0403]: NVIDIA Corporation GA107 High Definition Audio Controller [10de:2291] (rev a1) 4. カーネルパラメータを変更し、IOMMUを有効化する GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off" • セキュアブートONの場合⇨/etc/default/grubを書き換え(grub-editenvコマンドでも可能) • セキュアブートOFFの場合⇨/etc/kernel/cmdlineへ追記 quiet intel_iommu=on iommu=pt video=efifb:off update-grub proxmox-boot-tool refresh ホストOS(Proxmox) VM(Proxmox)
  12. 21 構築手順(4/9) 5. VFIO(Virtual Function I/O)モジュールを起動時にロードするように設定 cat << ‘EOS‘ >>

    /etc/modules vfio vfio_iommu_type1 vfio_pci vfio_virqfd EOS echo "options vfio-pci ids=10de:25b0,10de:2291 disable_vga=1" ¥ > /etc/modprobe.d/vfio.conf vfio-pciへGPUのデバイスを割り当て、ホストでGPUを利用しないよう設定する update-initramfs -u 起動時にモジュールをロードするようinitramfsへ反映 6. シャットダウン shutdown –h now PCIデバイスをVMへアタッチできるのは停止時のみのためシャットダウンする ホストOS(Proxmox) VM(Proxmox)
  13. 23 構築手順(6/9) 8. IOMMUが有効になっているか確認する dmesg | grep -e DMAR -e

    IOMMU | grep "IOMMU enabled" 「DMAR: IOMMU enabled」と表示されればOK。 表示されない場合は、作業を見返す(BIOSやVMの設定や、セキュアブートがOn/Offでの相違)。 9. GPUのドライバーとしてvfio-pciモジュールがアサインされているか確認する lspci -nnk | grep -A2 -e 25b0 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA107GL [RTX A1000] [10de:25b0] (rev a1) Subsystem: NVIDIA Corporation GA107GL [RTX A1000] [10de:1878] Kernel driver in use: vfio-pci デバイスIDは手順3で確認した値へ置き換えて下記を実行 Kernel driver in useに「vfio-pci」と表示されればOK。 もし「nouveau」となっている場合は、p.10の手順でブラックリストへ登録する。 ホストOS(Proxmox) VM(Proxmox)
  14. 25 構築手順(8/9) 11.GPUドライバ・CUDAをインストールする sudo apt update sudo apt install -y

    ¥ nvidia-headless-565-server ¥ nvidia-firmware-565-server-565.57.01 ¥ nvidia-utils-565-server sudo update-initramfs –u sudo reboot NVIDIA公式手順ではうまくインストールできなかったため、サードパーティのものを使用 セキュアブートを有効化している場合、インストール途中でこの後の鍵登録に用いるためのパ スワード入力を問われるので入力する。 再起動後、Proxmoxのコンソール(UEFI画面)でMokManagerの操作を行う必要がある。 (デフォルトの「Continue boot」ではなく「Enroll MOK」を選ぶ必要があるため注意) MokManager では「Enroll MOK」→「Continue」→「Yes」→パスワード入力→Rebootの順に 操作する。 Nested VM(Ubuntu)
  15. 26 構築手順(9/9) 12.(これで完了)GPUやCUDAを利用できる nvidia-smi Sat May 10 16:27:31 2025 +-----------------------------------------------------------------------------------------+

    | NVIDIA-SMI 565.57.01 Driver Version: 565.57.01 CUDA Version: 12.7 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA RTX A1000 Off | 00000000:01:00.0 Off | N/A | | 33% 59C P0 N/A / 50W | 1MiB / 8188MiB | 17% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+ Nested VM(Ubuntu)