ブログ書かなきゃ・・・
最近色々やったんですが特にブログに残せてなかったの悲しい。
今回はProxmoxのVMでGPU使ってOllama動かせたのでメモがてらやったことを書いていきます。
環境#
あとRTX3060のOCモデル
Proxmox上以外で事前にやっておくこと#
- IOMMUを有効にする(Intel VT-dとかAMD-Vi)
- BIOSから有効にできるよ
手順#
1. そもそもGPU刺さってるか確認する#
認識されてないみたいなこともあるかもだしね。
lspci
はPCIデバイスを一覧するコマンド。
lspci -nn
でデバイス名とデバイスIDが出力される。
大体以下のような感じで出力される。
xxxx:xxxx
とyyyy:yyyy
はあとで使うのでメモっておく。
2. IOMMUを有効化する#
(Optional) IOMMUが有効化されているか確認する
確認コマンドは以下の通り。
dmesg
はカーネルの起動時の出力を見るコマンド。そこにIOMMUに関する情報がでていなかったら有効になってなさそう。
AMDのCPU使ってるならこんな感じの表示が出る
参考:PCI Passthrough - Proxmox VE
VMにGPUパススルーをするにはPCIパススルーが必要で、PCIパススルーをするにはIOMMUを有効化する必要がある。これによってVM上でホストマシンのデバイスを使うことができる。
IOMMUを有効化するにはカーネルパラメータを弄る必要があって、それはブートローダーの設定/etc/default/grub
を弄ることで実現できる。
本題#
好きなエディタで/etc/default/grub
を開く
以下のようになっている行を見つける
ここを編集するのだが、Intel CPUを使っているかAMD CPUを使っているかで設定内容が異なる。
自分はAMD CPUを使っているので以下のように設定した。
Intel CPUを使っている場合は以下の通り
変更し、保存したら以下のコマンドを実行
設定を反映するために一度再起動する
参考:OVMF による PCI パススルー - ArchWiki。
参考:カーネルパラメータ - ArchWiki
3. VFIOモジュールのロード#
VFIOと呼ばれるカーネルモジュールをロードする。VFIOを使えば非特権のユーザスペース(=VM内)でも安全にデバイスが扱えるらしい。
/etc/modules
に以下を追記する。
そしてVFIOの設定ファイル/etc/modprobe.d/vfio.conf
を作成する。
先ほどのlspci -nn | grep -i nvidia
で取得したidをここで使う。
以下の「xxxx:xxxx」や「yyyy:yyyy」を置き換えて追記する。
次に、既存のドライバを無効化しておく。これによりホストOS(Proxmox)がGPUを使用しなくなり、VMのみが使用するようにできる。 VM
initramfs
の情報を更新する。initramfs
は初期RAMイメージで、上記更新前のGPUドライバの情報などを持っているため、更新する必要がある。
最後に再起動してホストOSの設定はおしまい。
4. VMのセットアップ#
対象のVMを決める#
GPUパススルーをするVMを新規作成。もしくは決める。GPUパススルーできるのはVM一つだけらしい。
決めたらProxmoxのWeb UIからVMの設定で「ハードウェア」タブに移動し、「PCIデバイスを追加」を選択。NvidiaのGPUを選択する。
「すべての機能(All Functions)」にチェックをして保存する。
VMにドライバをインストール#
VM内で以下のコマンドを実行する
そこで表示されたNvidia GPUドライバをapt install
する。
nvidia-driver
をインストールする場合は以下の通り
再起動
インストールが正しく完了していれば以下のコマンドが使えるようになっている
まとめ#
なんか途中転けた場面もあった記憶があったけど端折ってます。大体これでいけるはず。