ESXi6.7+CentOS7+GPUパススルー+cuda11.0インストールしてみる

テーマ的には新鮮味のないエントリーですが、nvidia-xconfigするとCentOS7のXウィンドウズが起動しないという事実を突き止めることができたので備忘録としてメモ。

環境要件
ハードウェア富士通 TX1310 M3
仮想化ESXi6.7 Update3
グラフィックボードNVIDIA GTX1050Ti
ゲストOSCentOS7.8
ドライバーNVIDIA-Linux-x86_64-450.51.run
CUDACUDA 11.0.3

Yahoo!ショッピングで購入した中古のNVIDIA GeForce GTX1050Ti

補助電源を必要とせず、富士通 TX1310 M3のコンパクトな筐体に収まるショート基盤のPalit GeForce GTX1050Ti です。マザーボードに差してDisplay Portから変換ケーブルでHDMIディスプレイに接続すると何もせずに映りましたが、今回は ESXi のゲストOSにコンソールでログインしてXウィンドウを起動してnvidia-smi コマンドが通ることを目標にしました。

1.ESXi のGPUパススルー設定

グラフィックボードをVMから認識できるようにする設定をしていきます。左ペインの[ホスト]-[管理]をクリックして[ハードウェア]-[PCIデバイス]-[NVIDIA Corporation GP107[GeForce GTX 1050Ti]] を選択して[パススルーの切り替え]をクリック。同様にAudio デバイスもパススルーして再起動します。

2.VMの新規作成

「ML Server」という名前でCentOS7.isoからEFI起動オプションのVMを新規作成します。

仮想ハードウェア 要件
CPU 4
メモリ 16GB(すべてのゲストメモリを予約(すべてロック)
ハードディスク 100GB

[仮想マシンオプション]から[起動オプション]-[ファームウェア]-[EFI]を選択。

ゲストOSを起動してインストーラーを開始。今回は「サーバー(GUI使用)」をベースとします。

ここからはCentOS での作業となります。

3.nouveau を無効にする

GUI起動したらroot からCUIログインに変更して再起動します。

# systemctl set-default multi-user.target

/etc/modprobe.d/modprobe.conf と/etc/modprobe.d/blacklist-nouveau.conf ファイルでOS起動と同時に立ち上がる標準のグラフィックドライバー nouveau をブラックリストに登録します。

# vi /etc/modprobe.d/modprobe.conf

blacklist nouveau

# vi /etc/modprobe.d/blacklist-nouveau.conf

options nouveau modeset=0
blacklist nouveau

yum で最新のカーネルに更新してnouveau ドライバーを無効にした起動イメージを作ります。

# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) 

CentOS によるdracut では明示的に–omit-drivers nouveau しないとだめでした。

# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
# dracut --force --omit-drivers nouveau /boot/initramfs-$(uname -r).img $(uname -r)

いったん、VMをシャットダウンしてPCIデバイスとしてグラフィックボードを追加します。

Audioデバイスもついでに追加して[仮想マシンオプション]-[詳細]-[構成の編集]から下記設定をします。(何故だかは分かりません。)

hypervisor.cpuid.v0 FALSE

4.VMを起動→CUDAをインストール

CUDAをインストールするため、再びのCentOSでの作業となります。nouveauがロードされていないことを確認します。

$ lsmod | grep nouveau
何も表示されなければOK
$ lspci | grep -i nvidia
13:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) 13:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)

つづいてCUDAのコンパイルに必要なgcc gcc-c++ dkms などをyum で一気に揃えます。

# yum install epel-release
epelリポジトリを導入
# yum install --enablerepo=epel dkms
# yum install pciutils gcc gcc-c++ libglvnd libglvnd-devel
# yum install centos-release-scl
scl(Software Collection) を導入
# yum install devtoolset-9
# yum install llvm-toolset-7
rhel ツールセットを導入
# scl enable devtoolset-9 bash
# scl enable llvm-toolset-7 bash

あらかじめhttps://developer.nvidia.com/cuda-toolkit からwgetでクライアントにダウンロードしたcuda_11.0.3_450.51.06_Linux.run ファイルをscp で転送して実行権限を与えて実行します。

$ wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_Linux.run
$ chmod 705 ./cuda_11.0.3_450.51.06_Linux.run
$ sudo sh ./cuda_11.0.3_450.51.06_Linux.run

cudaインストールのついでにグラフィックドライバーもインストールできる優れものなのですが、nvidia-xconfig をオプションで有効にするとXウィンドウズが 「no screens found」となり起動しません。(/var/log/Xorg.0.log を良く読む。)最終的にはnvidia-uninstallしてドライバーのアンインストールが必要でした。このあたりの細かい設定は再調査が待たれます。ここでは、drm-kernelオプションと共に無効にしてインストールしました。

パスを登録してVMを再起動します。

$ vi .bashrc
export PATH=/usr/local/cuda-11.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ source ~/.bashrc
$ echo $PATH
パス確認
# shutdown -r now

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.

エラーでドライバーが認識されていない模様。NVIDIA公式から単体でNVIDIA-Linux-x86_64-450.51.runをダウンロード、インストール、再起動すると良かったようです。

$ startx

# nvidia-smi が通りました。こんどは、anaconda, cuDNN, TensorFlow インストールしたいですね。

参考URL

インストールガイド CentOS 7.5 minimal with MATE & Nvidia CUDA 9.2 – 脱N00Bしたいエンジニア

ESXi6.7でGPUパススルーしてCUDA10とChainer4.4を使ってみる – Qiita

OS付属コンパイラが古すぎて困った人へ | HPCシステムズ Tech Blog

slurm+mpich+cudaの設定(CentOS7) – 株式会社バイオモデリングリサーチ

CentOS6.10 GUI起動、完了です。

yum update するとグラフィックボードのドライバーが書き換わりGUI 起動ができなかったのですが、ふと他の方のブログを検索した結果、Radeon のfglrx-uninstall.sh を使えばドライバーを上書きせずにアンインストールすることができると判明。

【centos6】Radeonドライバー再設定で嵌ってしまった!

早速、試したところドライバーのアンインストール、yum によるカーネルのバージョンアップ、ドライバーの再インストールに成功した結果、件の課題をクリアすることができました。

まず [F2] 押下からBIOSを起動、 Onboad のグラフィックボードを有効にして再起動、シングルユーザーモードに入って/boot/grub/grub.conf のカーネルオプション行末の、nouveau.modeset=0 を削除、init 3 でランレベル3でroot でCUI ログインします。(ディスプレイケーブルはオンボードのVGA端子に接続する)

/etc/yum.conf でカーネルアップデートをexclude しているときは行頭を# コメントアウトして yum update 、すべての更新を掛けます。

/usr/share/ati/ ディレクトリに移動してドライバー削除スクリプト、fglrx-uninstall.sh を実行後、/usr/share/ati/ をディレクトリごと削除、再起動。

ふたたびシングルユーザーモードでgrub.conf のnouveau.modeset=0 をカーネルオプションの行末に加えて再起動。

[F2] BIOS で外付けグラフィックボード[External Video] を有効にして(ディスプレイケーブルをグラフィックボードのVGA端子に接続する)

シングルユーザーモードからinit 3 でCUI ログイン。

あらかじめユーザーディレクトリにコピーしておいた、AMD-Catalyst-15.9-Linux-installer-15.201.1151-x86.x86_64.run を実行、エラーが出たら必要なパッケージを別のPCからでもダウンロード、フラッシュドライブにコピーしておく。(ここはトライアンドエラーもやむなしです。)

エラーログから必要なドライバーに当たりをつけやっと、本体のドライバーのインストールに成功しました。最後に#aticonfig –initial して再起動するとカーネルのアップデートされたCentOS6.10 でXウィンドウが起動してGUI 表示できました。

ありがとうございました。

ランレベル

サーバー機でひさびさにyum update を掛けてGUIログインしようとしたら画面が固まりました。

シングルユーザーモードから

# telinit 3

でCUIログインしようとするとパスワードではねられてログインできない、ふぐっ、ちりりぃ。
察するに、yum でグラフィックボードのドライバーが更新されて不整合を起こしているんだと推理してます。
再びシングルユーザーモードでパスワードリセットして、アカウントのロックアウトポリシーを解除。root でCUIログイン成功。

# pam_tally2 -u root --reset

どうしても、telinit 5 や、startx ができないのでyum で不整合を起こしたドライバーのエラーログ何かないかと探したのですが原因不明。強制的にドライバーを再インストールしたところ画面表示が壊れました。もうダメポ。バックアップから復元。yum update は諦めました。復旧に際し、6時間にわたり通信障害が起きたことをお詫び申し上げます。

ASRock Thunderbolt 3 AIC

これからWindowsもThunderbolt 3 ポートの時代が来るのでしょうか。

USB Type-C 端子で 40Gbps の転送速度、4K × 2 解像度ディスプレイ出力、USB PDなどを内包するThunderbolt 3 ポート拡張ボード ASRock Thunderbolt 3 AIC を、Z370 pro4 のPCIe×4 スロットに取り付けてみようと思います。

開封の儀

中には拡張ボード本体とThunderbolt ヘッダーケーブルと呼ばれる専用端子ケーブルと、デイジーチェーン用にグラフィックボードのDisplayPort 端子とボードを接続するケーブル2種類とドライバーCD が同梱されていました。

公式ページ(Thunderbolt 3 AIC は簡単な手順で取り付けることができます! )を参考に早速、セットアップ!

マニュアルから Z370 Pro4 のthunderbolt ヘッダー端子の位置を確認して、

カードを挿入。

ケースを元に戻してDisplayPort to Mini DisplayPort 接続ケーブルを配線して

電源投入。UEFI を起動して

[Intel Thunderbolt Technology] を有効にしてから再起動。

ドライバーのインストールして完了なのですが、手持ちのThunderbolt 対応デバイスがないので性能検証ができません。

ぐぬぬっ。(これってもしかして、要らない子では?)

ありがとうございました。

Radeon HD6450のインストール

ASUSのフルHDディスプレイをHDMIでCentOS6.9 に接続するため、先週注文したグラフィックボードが届きました。早速、開封。

まずは、AMDのサイトhttp://support.amd.com/us/gpudownload/Pages/index.aspx からamd-catalyst-15.9-linux-installer-15.201.1151-x86.x86_64.zip ドライバファイルをダウンロード、解凍してからWinSCPでサーバーに転送。

次に、/boot/grub/grub.conf の起動オプションに nouveau.modeset=0 を追加してオンボードのLinux グラフィックドライバを無効にしてシャットダウン。

 

PCI Express(x8) スロットにHD6450グラフィックボードを取り付けました。

シングルユーザーモードから init 3 でランレベル3でroot でログイン。(最初、パスワードをハネられログインできず焦りましたが、http://d.hatena.ne.jp/yohei-a/20081116/1226786415 を参考に/etc/pam.d/login に以下の行を追加して解決。)

session required /lib64/security/pam_limits.so

その他、適宜必要なパッケージをダウンロード、インストール。kernel-devel など。詳細は以下のサイトを参考にしました。(libX11.so.6, libXext.so.6 はyum からrpmインストールしておくと良いかもしれません。)

CentOS 6.0 でのマルチモニタ設定 その1 (CentOS 6.0 64bit)

以下のコマンドでドライバインストールのダイアログが始まります。

# chmod a+x AMD-Catalyst-15.9-Linux-installer-15.201.1151-x86.x86_64.run
# ./AMD-Catalyst-15.9-Linux-installer-15.201.1151-x86.x86_64.run

ダイアログを進めて、ドライバインストールが完了しました。再起動後、BIOSに入るため、[F2]キーを押してビデオドライバの設定をします。

自機のBIOSでは、[Advanced]-[Onboard Device Configuration]-[Onboard Video] の項目を[Auto] から[Enabled]に。[Primary Video] を[Onboard] から [External Video]にして設定を保存、再起動。するとフルHDで無事、Xウィンドウが起動しました。