setodaNote

忘れる用のメモ書き for Cybersecurity

VMware ESXi 7.0 での GPU パススルー設定手順

ESXi ホストに搭載されているグラフィックボードを仮想マシンで使えるようにするための手順についてまとめました。

環境

【CPU】Intel Core i5 9400
【マザーボード】ASRock H370M Pro4
【ビデオカード】GeForce GTX 1660 (GIGABYTE GV-N1660OC-6GD)
【サウンド】なし(オンボード)

【ESXi】7.0.1 (ビルド番号:17325551)

UEFI の設定(ASRock)

グラフィックボードの利用設定とハードウェアの仮想化支援機能である VT-d の有効化、またパススルー設定の妨げにならないように内蔵グラフィックスを無効化しておきます。 「アドバンスド」のページに移り、以下の3つの項目を設定します。 *1 *2

  1. プライマリグラフィックアダプター -> [PCI Express]
  2. VT-d -> [有効]
  3. IGPU マルチモニタ -> [無効]

f:id:soji256:20210117230552p:plain:w520
UEFI の設定(1/2)

f:id:soji256:20210117230626p:plain:w520
UEFI の設定(2/2)

なお、内蔵オーディオを無効にしないとうまくいかないという記事がいくつかありましたが、手元の環境ではこの設定値の差による影響は確認できませんでした。 ただ、グラフィックボードはオーディオ周りにも影響するようなので、気になる場合は無効にしておくといいかもしれません。 *3

ESXi の設定

グラフィックボードのパススルー設定

PCI の管理画面から目的のグラフィックボードをパススルーするように設定します。管理画面には VMware Host Client から以下のようにしてアクセスできます。

  • ナビゲータ -> ホスト -> 管理
    • ハードウェア -> PCI デバイス

f:id:soji256:20210117235936p:plain:w520
PCI デバイスの管理画面

PCI デバイスの管理画面ではパススルー設定が可能なデバイスだけが有効状態で表示されているはずです。 今回設定した GTX 1660 の場合は4つの項目がセットで表示されていました。

f:id:soji256:20210118001517p:plain:w520
PCI 管理画面の表示例(GTX 1660 の場合)

パススルー設定をするにはチェックボックスにチェックを入れ、表の上部にある「パススルーの切り替え」を押す必要があるのですが、 不具合があるようでこのままの状態でその操作すると表示が乱れてうまく設定できません。 *4

これを防ぐために右上の検索ボックスに gtx などと入力して項目を1つに絞り込んでおきます。

f:id:soji256:20210118001045p:plain:w520
表示を1つにしてからチェックボックスを選択する

表示されている項目が1つのみであることを確認した上で、チェックボックスにチェックを入れてから「パススルーの切り替え」を押下してパススルーの設定を行います。

これにより残り3つの項目もセットでパススルーされる設定に切り替わります。 4つの項目のパススルー設定が「アクティブ」になっていれば OK です。 *5

f:id:soji256:20210118001318p:plain:w520
パススルー設定

ESXi の再起動後にもパススルー設定を継続させる

上記手順が完了していればグラフィックボードを仮想マシンで使うための設定はできているのですが、 ESXi をシャットダウンや再起動してしまうとこの設定が正しく認識されないという問題が発生してしまいます。

f:id:soji256:20210117232807p:plain:w520
再起動するとパススルー設定が正しく動作しない

この状態になった場合は、一度パススルー設定を解除してから再度パススルー設定をすることで正常に動作するようになります。 ですが、再起動の度にこの操作をするのは少し面倒です。

調べてみると標準の VGA ドライバーを無効化することで事象を回避することができるようです。

ESXi ホストに SSH などでアクセスし、以下のコマンドを入力することで VGA ドライバーを無効化します。

# VGA ドライバーを無効化するためのコマンド:
esxcli system settings kernel set -s vga -v FALSE

# 戻す場合のコマンド:
# esxcli system settings kernel set -s vga -v TRUE

注意として、VGA ドライバーを無効にした状態だと ESXi ホスト機器のディスプレイ出力につないだ画面は以下のような表示になってしまいます。 そのためディスプレイ出力からはダイレクトコンソールの利用が不可になります。

f:id:soji256:20210118220832p:plain:w520
VGA ドライバーが無効化されている場合の画面表示

ESXi の起動処理の途中でこの表示に切り替わるため、ちゃんと起動しているか不安になりますが、 処理自体は裏で継続しているので焦らず待てば VMware Host Client などが立ち上がってきてくれるので、別の端末から Web ブラウザなどでアクセスできます。

以上で ESXi ホストの設定は完了です。あとは GPU を利用したい仮想マシンごとに設定をしていきます。

仮想マシンの設定(Windows 10)

Windows 10 の仮想マシンではパススルーによりグラフィックボードを利用可能にした状態で再起動をするとグラフィックボードのドライバが「エラーコード 43」で異常停止してしまうという不具合があるため、これを回避する対策も併せて設定します。

仮想マシンの設定の編集から以下の項目を設定していきます。

  • 仮想ハードウェア -> CPU -> 「ハードウェア アシストによる仮想化をゲスト OS に公開」のチェックをオフ
  • 仮想ハードウェア -> メモリ -> 「すべてのゲスト メモリを予約 (すべてロック)」のチェックをオン
  • 仮想ハードウェア -> その他のデバイスの追加 -> PCI デバイス (目的のグラフィックボードを追加)
  • 仮想マシンオプション -> 詳細 -> 設定の編集 -> パラメータの追加 -> 「hypervisor.cpuid.v0 : FALSE」を追加

また仮想マシンの起動後に以下の作業を行います。

  • NVIDIA の公式サイトから最新のドライバーをインストール
  • 再起動時の「エラーコード 43」対策のために「devcon.exe」が自動実行されるよう設定
  • hashcat のインストール(オプション)

具体的な設定手順は以下の通りです。

CPU の設定

CPU の設定を展開して「ハードウェア アシストによる仮想化をゲスト OS に公開」のチェックがオフであることを確認にします。 *6

f:id:soji256:20210118222305p:plain:w520
「ハードウェア アシストによる仮想化をゲスト OS に公開」をオフに

このチェックがオンの状態で仮想マシンを起動しようとすると「ネストされたハードウェア アシストによる仮想化が有効な場合、PCI パススルー デバイスは追加できません。」とエラーが表示され起動に失敗します。

f:id:soji256:20210118222435p:plain:w520
「ハードウェア アシストによる仮想化をゲスト OS に公開」が有効な場合のエラー表示

メモリの設定

メモリの設定を展開して「すべてのゲスト メモリを予約 (すべてロック)」のチェックがオンであることを確認します。

f:id:soji256:20210118002540p:plain:w520
「すべてのゲスト メモリを予約 (すべてロック)」のチェックをオンに

PCI デバイスとしてグラフィックボードを追加

PCI デバイスの追加からパススルー設定したグラフィックボードを仮想マシンに割り当てます。

設定の編集の右上にある「その他のデバイスの追加」から「PCI デバイス」を選択することで、 設定の最下段の項目に PCI デバイスの欄が追加されます。

f:id:soji256:20210118003438p:plain:w520
PCI デバイスの追加

他のデバイスがなければ初期選択でグラフィックボードが選択されていると思いますが、 目的のデバイスと異なる場合はプルダウンメニューになっているので適切なデバイスに変更します。

f:id:soji256:20210118003531p:plain:w500
目的のグラフィックボードが追加されていることの確認

なお PCI デバイスの欄は設定の保存後にグレーアウトしてしまうので、 変更するには一度その PCI デバイスの項目を削除(右端の X ボタンを押下)してから改めて新規追加する必要があります。

hypervisor.cpuid.v0 パラメータの追加

最後に「仮想マシンオプション」のタブに移って「hypervisor.cpuid.v0」というパラメータを追加します。 「詳細」の項目を展開し「設定の編集」をクリックします。

f:id:soji256:20210118003739p:plain:w520
パラメータの設定

左上の「パラメータの追加」を押下すると最下段に「クリックして編集」という項目が追加されます。 この文字はクリックしても消えないので、自分で消してキーに「hypervisor.cpuid.v0」、値に「FALSE」を上書きして OK を押下して設定内容を保存します。

f:id:soji256:20210118003844p:plain:w440
hypervisor.cpuid.v0 のパラメータを追加

このパラメータはソフトウェアなどが仮想マシン上で実行されていることを認識できるようにするかどうかの設定値らしく、 TRUE の場合に仮想マシン上であると認識できるようになるようです。

NVIDIA のドライバーは仮想環境を検知すると非標準構成と判断してドライバーを停止させてしまうらしく、これを防ぐために FALSE に設定しておく必要があります。 *7

以上で仮想マシンの設定はひとまず終わりです。引き続き、起動させてからの設定を行っていきます。

起動後の作業:最新のドライバーをインストール

仮想マシンを起動し、NVIDIA の公式サイトから利用するグラフィックボードに対応した最新のドライバーをダウンロードしてインストールします。

f:id:soji256:20210118014011p:plain:w520
NVIDIAドライバダウンロード

基本的に初期選択されている項目のまま次へと進めていけばいいですが、特に必要なければ GeForce Experience はインストールしなくても構いません。

f:id:soji256:20210118235745p:plain:w520
NVIDIAドライバーのインストール

起動後の作業:「エラーコード 43」対策( devcon.exe の自動実行設定)

ドライバーをインストールした時点でグラフィックボードは利用可能な状態になっています。

ですが、Windows 10 の場合はこのままだと仮想マシンをシャットダウンや再起動した際にグラフィックボードのドライバーが「エラーコード 43」として停止してしまいます。 この状態になると ESXi ホストを再起動しないと復旧しないなど手間がかかります。 *8 *9

f:id:soji256:20210118015247p:plain:w520
エラーコード43

対処法としては、シャットダウンや再起動前にデバイスマネージャーからグラフィックボードのドライバを無効化しておくことで事象を回避することができます。 この方法はエラーが発生していない状態で実行した場合のみに有効で、エラーが発生してからこの手順を踏んでもエラーは解消されません。

これを毎回手動でするのは手間なので devcon.exe という Windows Driver Kit (WDK) に含まれているデバイスを操作するツールを利用して自動化します。 *10

Windows Driver Kit (WDK) はそれなりのファイル容量があるため、そのまま導入するには手間がかかります。 必要なのは devcon.exe のみなので、以下のリンクからこのファイルが含まれるアーカイブのみをダウンロードします。

アーカイブに含まれている「filbad6e2cce5ebc45a401e19c613d0a28f」というファイルが devcon.exe なのでファイル名を「devcon.exe」に戻し、パスの通っている場所に保存します。 とりあえずは %USERPROFILE%\AppData\Local\Microsoft\WindowsApps あたりに放り込んでおいてもいい気がします。 *11

次に、仮想マシンの起動時/終了時にグラフィックボードのドライバが有効化/無効化するためのスクリプトを作成します。

  • スタートアップ時のスクリプト:enableGPU.bat
devcon enable "PCI\VEN_10DE&DEV_2184"
  • シャットダウン時のスクリプト:disableGPU.bat
devcon disable "PCI\VEN_10DE&DEV_2184"

指定する引数はデバイスごとに異なります。上記は GTX 1660 の場合のスクリプトです。 必要な情報はデバイスインスタンスパスで確認できます。

f:id:soji256:20210118013236p:plain:w465
デバイスインスタンスパスの確認方法

f:id:soji256:20210119004757p:plain:w463
ベンダーIDとデバイスID

ベンダーIDとデバイスIDを渡しておけば問題ないと思いますが、 コマンドが正常に動作することを事前に管理者権限のコマンドプロンプト上で確認をしておくとよいと思います。

f:id:soji256:20210119010726p:plain:w520
コマンドの動作確認

無事に動作することが確認できたら、このスクリプトが仮想マシンの起動時/終了時に実行されるように設定します。

  • スタートメニュから「gpedit」を入力し、ローカルグループポリシーエディタを起動します
  • コンピュータの構成 -> Windows の設定 -> スクリプト(スタートアップ/シャットダウン) と選択します

f:id:soji256:20210118014719p:plain:w520
スクリプトの登録方法

それぞれシャットダウン時に「disableGPU.bat」を、スタートアップ時に「enableGPU.bat」を設定します。

f:id:soji256:20210119011011p:plain:w463
スクリプトの登録

スクリプトは登録の際にデフォルトで開かれるようになっていた、以下のフォルダに保存しました。

  • C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
  • C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown

これでシャットダウンしたとしてもエラーコード43でドライバーが停止することがなくなります。

なお、FF15 のベンチマークなどは VMware Host Client のコンソールからではまともに動作しません。 リモート接続などから実行するとよいと思います。 *12

以上で設定は完了です。

hashcat のインストール(オプション)

GPU を利用するツールとして hashcat という有名なパスワードリカバリーツールがあります。 これを導入して性能検証してみます。

まず hashcat の本体を以下からダウンロードします。ここでの最新版は v6.1.1 でした。

f:id:soji256:20210119232020p:plain:w520
hashcat - advanced password recovery

ダウンロードした圧縮ファイルを展開して hashcat.exe をそのまま実行しても動きはしますが、いくつか警告が表示されます。

# ベンチマークモードの実行
# [ctrl]+C で止めることができます。
hashcat.exe -b

CUDA SDK Toolkit のインストール

一つ目は CUDA SDK Toolkit がインストールされていないことによるものです。

* Device #1: CUDA SDK Toolkit installation NOT detected.
             CUDA SDK Toolkit installation required 
             for proper device support and utilization
             Falling back to OpenCL Runtime

以下のサイトから CUDA Toolkit をダウンロードしてインストールするこで解消されます。

f:id:soji256:20210120001315p:plain:w515
CUDA Toolkit 11.2 Downloads | NVIDIA Developer

インストール自体は初期選択のまま次へをクリックしていくことで完了しますが、インストールには一時的に 20GB 程度の空き容量が必要になります。

インストール後は再起動をした方が無難です。

Kernel exec timeout の無効化

二つ目は Kernel exec timeout 無効化されていないことによるものです。

* Device #1: WARNING! Kernel exec timeout is not disabled.
             This may cause "CL_OUT_OF_RESOURCES" or related errors.
             To disable the timeout, see: https://hashcat.net/q/timeoutpatch

While running hashcat with extreme performance settings (-w 3 or -w 4) users may experience crashes, followed by automatic recovery of the GPU(s) via driver reset. This is caused by kernel runtimes that exceed the 2-second limit. This feature is useful for preventing screen freezes, but not useful for hash cracking.

上記によると画面がフリーズするのを避けるための仕組みのようです。 hashcat の動作の妨げになるので、特に問題なければこれを無効化します。

テキストエディタなどに以下の内容コピペし、ファイル名を「patch.reg」などで保存してダブルクリックするとレジストリを更新できます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"TdrLevel"=dword:00000000

改めてベンチマークモードで hashcat を実行するとエラーなく実行されます。 *13

仮想マシンの設定(Ubuntu 20.04)

仮想マシンの設定の編集から以下の項目を設定します。 これらについては Windows の場合と同様なので具体的な手順は前述の Windows の記載をご参照ください。

  • 仮想ハードウェア -> CPU -> 「ハードウェア アシストによる仮想化をゲスト OS に公開」のチェックをオフ
  • 仮想ハードウェア -> メモリ -> 「すべてのゲスト メモリを予約 (すべてロック)」のチェックをオン
  • 仮想ハードウェア -> その他のデバイスの追加 -> PCI デバイス (目的のグラフィックボードを追加)
  • 仮想マシンオプション -> 詳細 -> 設定の編集 -> パラメータの追加 -> 「hypervisor.cpuid.v0 : FALSE」を追加

仮想マシンの起動後に以下の作業を行います。

  • NVIDIA のドライバーをインストール
  • hashcat の導入(オプション)

具体的な手順は以下の通りです。

起動後の作業:NVIDIA のドライバーをインストール

念のためにグラフィックボードが認識されているか確認します。

$ lspci -nn | grep -i nvidia
0b:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU116 [GeForce GTX 1660] [10de:2184] (rev a1)

次にインストールすべきドライバーを確認します。 基本的には「recommended」とあるものを選べばよいと思います。

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:16.0/0000:0b:00.0 ==
modalias : pci:v000010DEd00002184sv00001458sd00003FC8bc03sc00i00
vendor   : NVIDIA Corporation
model    : TU116 [GeForce GTX 1660]
driver   : nvidia-driver-455 - third-party free
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-440-server - distro non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-450 - distro non-free
driver   : nvidia-driver-460 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin

== /sys/devices/pci0000:00/0000:00:0f.0 ==
modalias : pci:v000015ADd00000405sv000015ADsd00000405bc03sc00i00
vendor   : VMware
model    : SVGA II Adapter
manual_install: True
driver   : open-vm-tools-desktop - distro free

「driver : nvidia-driver-460 - distro non-free recommended」とあるので、これをインストールします。 なお数GB程度の空き容量が必要になります。

sudo apt install nvidia-headless-460

インストール後に再起動します。

再起動後に以下のコマンドを実行してグラフィックボードが正しく動作していることを確認します。 ずらずらと表示されていればとりあえず OK です。 うまく認識されていないときは Not Found 的な表示になります。 *14

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.32.00    Driver Version: 455.32.00    CUDA Version: 11.1     |
|-------------------------------+----------------------+----------------------+
| 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  GeForce GTX 1660    On   | 00000000:0B:00.0 Off |                  N/A |
|  0%   49C    P8     9W / 130W |      5MiB /  5944MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A       892      G   /usr/lib/xorg/Xorg                  4MiB |
+-----------------------------------------------------------------------------+

以上で設定は完了です。

hashcat のインストール(オプション)

GPU を利用するツールとして hashcat という有名なパスワードリカバリーツールがあります。 これを導入して性能検証してみます。

まず hashcat の本体を導入します。

git clone https://github.com/hashcat/hashcat.git
cd hashcat
make
sudo make install

次に CUDA Toolkit を導入します。

NVIDIA の公式サイトからインストール先の環境をポチポチ選択していくと適切なコマンドを教えてくれます。

f:id:soji256:20210120010131p:plain:w520
CUDA Toolkit 11.2 Downloads | NVIDIA Developer

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda-repo-ubuntu2004-11-2-local_11.2.0-460.27.04-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-2-local_11.2.0-460.27.04-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-2-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

なお、インストールのためには 15GB 程度の空き容量が必要です。

これで hashcat が動作するようになります。 *15

# ベンチマークモードの実行
# [ctrl]+C で止めることができます。
hashcat -b

動作確認

hashcat でハッシュ値の解析をしてみます。

# md5 の解析
hashcat -a 3 -m 0 35e5d160921d131d9114f1b4ee5f9d55

数秒で「hash123」が元の値であるという結果が得られます。

35e5d160921d131d9114f1b4ee5f9d55:hash123

Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 35e5d160921d131d9114f1b4ee5f9d55
Time.Started.....: Wed Jan 20 xx:xx:xx 2021 (1 sec)
Time.Estimated...: Wed Jan 20 xx:xx:xx 2021 (0 secs)
Guess.Mask.......: ?1?2?2?2?2?2?2 [7]
Guess.Charset....: -1 ?l?d?u, -2 ?l?d, -3 ?l?d*!$@_, -4 Undefined
Guess.Queue......: 7/15 (46.67%)
Speed.#1.........:  7711.3 MH/s (11.29ms) @ Accel:32 Loops:128 Thr:1024 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 6459228160/134960504832 (4.79%)
Rejected.........: 0/6459228160 (0.00%)
Restore.Point....: 0/1679616 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:8832-8960 Iteration:0-128
Candidates.#1....: 8zueran -> 653z2lb
Hardware.Mon.#1..: Temp: 58c Fan: 21% Util: 91% Core:1920MHz Mem:4001MHz Bus:16

参考文献

エラーコード43 関連の記事

ESXi で GPU を扱う仕組み周り

再起動時にパススルー設定が正しく持続しない問題の解決策

devcon.exe 関係

その他

付録

UEFI と EFI の関係について

UEFI の仕様策定などを担っている団体「Unified EFI Forum」の QA に記載がされていました。 元々はインテルが著作権を有する EFI という仕様があり、それを業界全体に普及させるためにフォーラムに帰属する形で発展させたものが UEFI ということのようです。

WHAT IS THE RELATIONSHIP BETWEEN EFI AND UEFI?
The UEFI specification is based on the EFI 1.10 specification published by Intel®, with corrections and changes managed by the UEFI Forum. Intel still holds the copyright on the EFI 1.10 specification, but has contributed it to the Forum so that the Forum can evolve it. There will not be any future versions of the EFI specification, but customers who license it can still use it under the terms of their license from Intel. The license to the Unified EFI Specification will come from the Forum, not from Intel.

VT-d とは

I/O 仮想化支援機能のひとつで、正式名称を「ダイレクト I/O 向けインテル® バーチャライゼーション・テクノロジー」といい、 この仕組みのおかげで I/O 処理をソフトウェアでエミュレートする必要がなくなり、多数の仮想マシンを搭載したサーバなどでもパフォーマンスの低下を防ぐことができるというもののようです。

f:id:soji256:20210118211159p:plain:w675
Software Emulation based I/O vs. Hardware based Direct Assignment I/O (出典:Intel 社サイト)

ESXi に SSH 接続する

Web クライアントのホストのページ上で右クリックするか、歯車アイコンをクリックすると SSH を有効化するメニューが表示されます。

f:id:soji256:20210117235140p:plain:w449
SSH の有効化

PCI デバイスのベンダIDとデバイスIDの調べ方

ベンダIDとデバイスIDは以下のサイトで確認できます。

エラー:仮想マシンのパワーオンに失敗しました。モジュール「DevicePowerOn」のパワーオンに失敗しました。

ひとつのグラフィックボードを同時に複数の仮想マシンで利用しようとした場合に表示されるエラーです。 グラフィックボードは複数の仮想マシンに設定することはできますが、同時に利用することはできません。

グラフィックボードを利用している稼働中の仮想マシンを停止することで解消されます。

f:id:soji256:20210119010048p:plain
仮想マシンのパワーオンに失敗しました。モジュール「DevicePowerOn」のパワーオンに失敗しました。

更新履歴

  • 2021/01/18 新規作成
  • 2021/01/19 記載を刷新
  • 2021/01/20 Ubuntu 20.04 の手順を追記、hashcat に関する記載を追記、一部誤記の修正

*1:ASRock の場合は起動時に [F2] か [Del] キーを押すことで設定画面に入れます。

*2:内蔵グラフィックスを有効にした状態での挙動については確認していません。

*3:例えばグラフィックボードを ESXi につなぐと「TU116 High Definition Audio Controller」という項目が PCI デバイスの一覧に表示されます。

*4:表示が乱れた場合は表の操作が困難になりますが、左側にある「電源管理」などを選択して画面を切り替えると直ります。

*5:パススルー設定の反映にはホストの再起動が必要という記事もありましたが、ESXi 7.0.1 では再起動は不要でした。

*6:仮想マシンオプションにある「仮想化ベースのセキュリティの有効化」にチェックが入っている場合はグレーアウトされて変更できません。

*7:この設定がされていない場合は起動後にグラフィックボードが「エラーコード 43」として停止します。 エラーが発生しているかどうかはデバイスマネージャーで確認できます。

*8:ちなみにですが、この状態でグラフィックボードのパススルー設定を切り替えようとすると ESXi ホストがクラッシュしてしまい強制電源 OFF をするはめになります。

*9:手元の環境では適切にグラフィックボードのパススルー設定がされた Ubuntu 20.04 を起動して終了することでもでも正常な状態に戻りました。

*10:なお、この問題は数年前から発生しているようで、これを回避する方法については海外の掲示板で活発に議論されていました。その中には仮想マシンを ESXi 6.5 の仮想マシンとして作成した上で ESXi の設定ファイル /etc/vmware/passthrough.conf を適切なものに修正することで回避できると記載されたものもありましたが、手元の環境ではどうしても再現できませんでした。

*11:スクリプト側を修正してファイルの置いてあるパスを叩く形にしてもいけるはずです。

*12:ちゃんと検証はしていませんが、出力がグラフィックボードではなく標準の VGA ドライバー経由になるためだと思います。

*13:冒頭の色付きのメッセージが気になる場合は hashcat.exe -O -w 3 などと引数を指定して実行すると消えます。

*14:CUDA Toolkit の導入した後の表示なので、表示内容が異なる部分があるかもしれません。

*15:「CL_OUT_OF_RESOURCES」に関する警告表示がされると思います。xorg.conf.d あたりの設定ファイルを修正することで解消できますが、もともとある設定値を削除しないといけないようなので、エラーが発生しなければ特に無視してよいと思います。