Skip to content

190ikp/libvirt-gpu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libvirt + vagrant による仮想マシンへのGPUパススルー

を参照

構築手順

Vagrantのインストール

setup_host.shsetup_vagrantを実行

カーネルの設定変更

setup_host.shsetup_kernelを実行

完了したらホストを再起動する

仮想マシンで使用するGPUをブラックリストに追加

使用するGPUがNVIDIA製の場合

  1. lspci -nn | grep -i nvidiaでGPUのPCI IDを表示

    以下のような表示が出てくる

    $ lspci -nn | grep -i nvidia
    3b:00.0 VGA compatible controller [0300]: NVIDIA Corporation GV102 [10de:1e07] (rev a1)
    3b:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10f7] (rev a1)
    3b:00.2 USB controller [0c03]: NVIDIA Corporation Device [10de:1ad6] (rev a1)
    3b:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device [10de:1ad7] (rev a1)
    af:00.0 VGA compatible controller [0300]: NVIDIA Corporation GV102 [10de:1e07] (rev a1)
    af:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10f7] (rev a1)
    af:00.2 USB controller [0c03]: NVIDIA Corporation Device [10de:1ad6] (rev a1)
    af:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device [10de:1ad7] (rev a1)

    この場合では10de:1e0710de:10f710de:1ad610de:1ad7が使用するPCI ID

  2. /etc/modprobe.d/vfio.confにPCI IDを記載

    options vfio-pci ids=<PCI IDのリスト>を書き込む

    今回の場合は

    $ cat /etc/modprobe.d/vfio.conf
    options vfio-pci ids=10de:1e07,10de:10f7,10de:1ad6,10de:1ad7
  3. sudo update-initramfs -uを実行する

  4. ホストを再起動

  5. dmesg | grep -i vfioを実行する.出力が得られればOK

NVIDIA GPUの場合,1-3まではsetup_host.shsetup_vfioを実行することで自動で行われる

仮想マシンの起動

  1. Vagrantfileを修正する

    環境に合わせてv.pciの行を書き換える

    今回の場合で例えば3b:00.0のGPUを仮想マシンに割り当てるなら

    v.pci :domain => '0x0000', :bus => '0x3b', :slot => '0x00', :function => '0x0'

    また,仮想マシンにはGPUのVGAデバイスだけではなく,AudioなどのGPUに付随しているすべてのデバイスを割り当てる必要がある

    今回の場合は

    v.pci :domain => '0x0000', :bus => '0x3b', :slot => '0x00', :function => '0x0'
    v.pci :domain => '0x0000', :bus => '0x3b', :slot => '0x00', :function => '0x1'
    v.pci :domain => '0x0000', :bus => '0x3b', :slot => '0x00', :function => '0x2'
    v.pci :domain => '0x0000', :bus => '0x3b', :slot => '0x00', :function => '0x3'

    となる

    NVIDIA GPUの場合はsetup_host.shprint_vgpuを実行することでフォーマット済みの文字列を出力できる

  2. vagrant upを実行

    cuda-driversnvidia-container-toolkitdockerがインストールされた状態の仮想マシンが立ち上がる

    仮想マシン内へはvagrant ssh <仮想マシン名>でアクセスできる

注意点

  • 1つのGPUは1つの仮想マシンにのみ割り当てられる
  • 仮想マシンに割り当てられたGPUは,仮想マシンの起動中にホスト上で使用できない
  • 先にGPU関連のパッケージをアンインストールしておく必要がある(cuda-driversnvidia-conatainer-toolkitなど)
    • でないと仮想マシンの起動時にNVRM: Attempting to remove minor device 1 with non-zero usage count!を吐いてフリーズする