CUDA/AI アクセラレーションとメディア トランスコーディングのために NVIDIA GPU を Proxmox VE 8 コンテナにパススルーする方法

Cuda Ai Akuserareshontomedia Toransukodingunotameni Nvidia Gpu Wo Proxmox Ve 8 Kontenanipasusurusuru Fang Fa



Proxmox VE サーバーに NVIDIA GPU がインストールされている場合は、それを Proxmox VE LXC コンテナに渡し、コンテナ内で CUDA/AI アクセラレーション (つまり TensorFlow、PyTorch) のために使用できます。また、(たとえば) Plex Media Server または NextCloud がインストールされている Proxmox VE LXC コンテナーで、メディアのトランスコーディング、ビデオ ストリーミングなどに NVIDIA GPU を使用することもできます。

この記事では、NVIDIA GPU を Proxmox VE 8 LXC コンテナーにパススルーして、CUDA/AI アクセラレーション、メディア トランスコーディング、または NVIDIA GPU を必要とするその他のタスクに使用できるようにする方法を説明します。







内容のトピック:

Proxmox VE 8 への NVIDIA GPU ドライバーのインストール

NVIDIA GPU を Proxmox VE LXC コンテナにパススルーするには、Proxmox VE 8 サーバーに NVIDIA GPU ドライバーがインストールされている必要があります。最新バージョンの公式 NVIDIA GPU ドライバーを Proxmox VE 8 サーバーにインストールする際にサポートが必要な場合は、 この記事を読む 。



NVIDIA GPU カーネル モジュールが Proxmox VE 8 に自動的にロードされていることを確認する

Proxmox VE 8 サーバーに NVIDIA GPU ドライバーをインストールしたら、NVIDIA GPU カーネル モジュールが起動時に自動的にロードされることを確認する必要があります。



まず、「/etc/modules-load.d/」ディレクトリに「nvidia.conf」のような新しいファイルを作成し、nano テキスト エディタで開きます。





$ ナノ / / モジュールロード.d / nvidia.conf

次の行を追加して押します + バツ 続いて「Y」と <入力> 「nvidia.conf」ファイルを保存するには:



エヌビディア

nvidia_uvm

変更を有効にするには、次のコマンドを使用して「initramfs」ファイルを更新します。

$ 更新-initramfs -で

何らかの理由で、Proxmox VE 8 は、必要な NVIDIA GPU デバイス ファイルを「/dev/」ディレクトリに作成しません。これらのデバイス ファイルがないと、Promox VE 8 LXC コンテナは NVIDIA GPU を使用できません。

Proxmox VE 8 が起動時に「/dev/」ディレクトリに NVIDIA GPU デバイス ファイルを作成するようにするには、「/etc/udev/rules.d/」に udev ルール ファイル「70-nvidia.rules」を作成します。 ディレクトリを開き、次のように nano テキスト エディタで開きます。

$ ナノ / / udev / ルール.d / 70 -nvidia.rules

「70-nvidia.rules」ファイルに次の行を入力し、キーを押します。 + バツ 続いて「Y」と <入力> ファイルを保存するには:

# 必要な NVIDIA デバイス ファイルを /dev/* に作成します

カーネル == 「エヌビディア」 、ラン+= 「/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*'」

カーネル == 「nvidia_uvm」 、ラン+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''

変更を有効にするには、次のように Proxmox VE 8 サーバーを再起動します。

$ リブート

Proxmox VE 8 サーバーが起動すると、次のスクリーンショットに示すように、NVIDIA カーネル モジュールが自動的にロードされるはずです。

$ lsmod | グリップ エヌビディア

必要な NVIDIA デバイス ファイルも、Proxmox VE 8 サーバーの「/dev」ディレクトリに格納されている必要があります。 NVIDIA デバイス ファイルの CGroup ID をメモします。 Proxmox VE 8 サーバーから NVIDIA GPU をパススルーする LXC コンテナー上で、これらの CGroup ID を許可する必要があります。この例では、CGroup ID は 195、237、および 226 です。

$ ls -lh / 開発者 / エヌビディア *

$ ls -lh / 開発者 / ドリ

NVIDIA GPU パススルー用の Proxmox VE 8 LXC コンテナの作成

NVIDIA CUDA および NVIDIA cuDNN ライブラリは、Ubuntu パッケージ リポジトリから Ubuntu 22.04 LTS に簡単にインストールでき、NVIDIA CUDA アクセラレーションが機能しているかどうかをテストするのが簡単であるため、この記事ではデモに Ubuntu 22.04 LTS Proxmox VE 8 LXC コンテナを使用しました。 。必要に応じて、他の Linux ディストリビューションも使用できます。その場合、NVIDIA CUDA と NVIDIA cuDNN のインストール コマンドは異なります。希望する Linux ディストリビューションの NVIDIA CUDA および NVIDIA cuDNN のインストール手順に従ってください。

Proxmox VE 8 LXC コンテナーの作成に関してサポートが必要な場合は、 この記事を読む

Promox VE 8 での NVIDIA GPU パススルー用の LXC コンテナの構成

NVIDIA GPU パススルー用に LXC コンテナー (コンテナー 102 としましょう) を構成するには、次のように、nano テキスト エディターを使用して Proxmox VE シェルから LXC コンテナー構成ファイルを開きます。

$ ナノ / / ペベ / lxc / 102 .conf

LXC コンテナ構成ファイルの最後に次の行を入力します。

lxc.cgroup.devices.allow: c 195 : * rwm

lxc.cgroup.devices.allow: c 237 : * rwm

lxc.cgroup.devices.allow: c 226 : * rwm

lxc.mount.entry: / 開発者 / nvidia0 開発 / nvidia0 なし 練る 、オプション、 作成する = ファイル

lxc.mount.entry: / 開発者 / nvidiactl dev / nvidiactl なし 練る 、オプション、 作成する = ファイル

lxc.mount.entry: / 開発者 / nvidia-modeset dev / nvidia-modeset なし 練る 、オプション、 作成する = ファイル

lxc.mount.entry: / 開発者 / nvidia-uvm dev / nvidia-uvm なし 練る 、オプション、 作成する = ファイル

lxc.mount.entry: / 開発者 / nvidia-uvm-tools開発 / nvidia-uvm-tools なし 練る 、オプション、 作成する = ファイル

lxc.mount.entry: / 開発者 / ドリ 開発者 / ドリ なし 練る 、オプション、 作成する = あなた

LXC コンテナ構成ファイルの「lxc.cgroup.devices.allow」行の CGroup ID を必ず置き換えてください。完了したら、 を押します + バツ 続いて「Y」と <入力> LXC コンテナ構成ファイルを保存します。

次に、Proxmox VE 8 ダッシュボードから LXC コンテナを起動します。

NVIDIA GPU パススルーが成功すると、LXC コンテナがエラーなしで起動し、コンテナの「/dev」ディレクトリに NVIDIA デバイス ファイルが表示されるはずです。

$ ls -lh / 開発者 / エヌビディア *

$ ls -lh / 開発者 / ドリ

Proxmox VE 8 LXC コンテナへの NVIDIA GPU ドライバーのインストール

デモには、Proxmox VE 8 サーバー上の Ubuntu 22.04 LTS LXC コンテナーを使用しています。 LXC コンテナ上で別の Linux ディストリビューションを使用している場合、コマンドはここでのコマンドとは若干異なります。したがって、コンテナーで使用している Linux ディストリビューションに応じてコマンドを調整してください。

「nvidia-smi」コマンドを使用して、Proxmox VE 8 サーバーにインストールした NVIDIA GPU ドライバーのバージョンを確認できます。ご覧のとおり、NVIDIA GPU ドライバー バージョン 535.146.02 が Proxmox VE 8 サーバーにインストールされています。したがって、NVIDIA GPU ドライバー バージョン 535.146.02 を LXC コンテナーにもインストールする必要があります。

$ nvidia-smi

まず、次のように CURL を LXC コンテナにインストールします。

$ 適切なアップデート && 適切な インストール カール -そして

CURL は LXC コンテナにインストールする必要があります。

NVIDIA GPU ドライバー バージョン 535.146.02 (たとえば) をインストールするには、NVIDIA_VERSION 環境変数をエクスポートし、(コンテナー上で) CURL コマンドを実行して、必要なバージョンの NVIDIA GPU ドライバー インストーラー ファイルをダウンロードします。

$ 輸出 NVIDIA_VERSION = 「535.146.02」

$カール -O 'https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} 。走る'

次のスクリーンショットに示すように、正しいバージョンの NVIDIA GPU ドライバー インストーラー ファイルを LXC コンテナーにダウンロードする必要があります。

次に、次のように、コンテナ上の NVIDIA GPU ドライバー インストーラー ファイルに実行権限を追加します。

$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run

NVIDIA GPU ドライバーをコンテナーにインストールするには、「-no-kernel-module」を指定して NVIDIA GPU ドライバー インストーラー ファイルを実行します。 次のようなオプション:

$ / NVIDIA-Linux-x86_64-535.146.02.run --no-カーネルモジュール

このオプションが表示されたら、「OK」を選択して を押します。 <入力>

「OK」を選択して を押します <入力>

「はい」を選択して を押します <入力>

「OK」を選択して を押します <入力>

NVIDIA GPU ドライバーは LXC コンテナーにインストールされます。完了するまでに数秒かかります。

このプロンプトが表示されたら、「はい」を選択して を押します。 <入力>

「OK」を選択して を押します <入力> 。 NVIDIA GPU ドライバーは LXC コンテナーにインストールする必要があります。

NVIDIA GPU ドライバーがインストールされ、動作しているかどうかを確認するには、LXC コンテナーで「nvidia-smi」コマンドを実行します。ご覧のとおり、NVIDIA GPU ドライバー バージョン 535.146.02 (Proxmox VE 8 サーバーにインストールされているものと同じバージョン) が LXC コンテナーにインストールされており、NVIDIA RTX 4070 GPU が正しく検出されました。

$ nvidia-smi

Proxmox VE 8 LXC コンテナへの NVIDIA CUDA と cuDNN のインストール

デモには、Proxmox VE 8 サーバー上の Ubuntu 22.04 LTS LXC コンテナーを使用しています。 LXC コンテナ上で別の Linux ディストリビューションを使用している場合、コマンドはここでのコマンドとは若干異なります。したがって、コンテナーで使用している Linux ディストリビューションに応じてコマンドを調整してください。

NVIDIA CUDA と cuDNN を Ubuntu 22.04 LTS Proxmox VE 8 コンテナーにインストールするには、コンテナーで次のコマンドを実行します。

$ 適切な インストール ビルド必須の nvidia-cuda-toolkit nvidia-cudnn

インストールを確認するには、「Y」を押してから、 <入力>

必要なパッケージがダウンロードされ、インストールされています。完了するまでにしばらく時間がかかります。

このウィンドウが表示されたら、「OK」を選択して を押します <入力>

「同意する」を選択して押してください <入力>

インストールは続行されます。

インストーラーは、NVIDIA から NVIDIA cuDNN ライブラリ アーカイブをダウンロードしています。ファイルが大きいので、完了までに時間がかかります。

NVIDIA cuDNN ライブラリ アーカイブがダウンロードされると、インストールは通常どおり続行されます。

この時点で、NVIDIA CUDA と cuDNN が Ubuntu 22.04 LTS Proxmox VE 8 LXC コンテナーにインストールされている必要があります。

NVIDIA CUDA アクセラレーションが Proxmox VE 8 LXC コンテナで動作しているかどうかを確認する

NVIDIA CUDA が正しくインストールされているかどうかを確認するには、次のように「nvcc」コマンドが Proxmox VE 8 コンテナで使用できるかどうかを確認します。

$ nvcc - バージョン

ご覧のとおり、Proxmox VE 8 コンテナーには NVIDIA CUDA 11.5 がインストールされています。

次に、単純な CUDA C プログラムを作成、コンパイル、実行して、すべてが期待どおりに動作するかどうかを確認してみましょう。

まず、ファイルを整理しておくために、Proxmox VE 8 コンテナ上に「~/code」プロジェクト ディレクトリを作成します。

$ mkdir / コード

次のように「~/code」プロジェクト ディレクトリに移動します。

$ CD `/ コード

Proxmox VE 8 コンテナの「~/code」ディレクトリに「hello.cu」のような新しいファイルを作成し、nano テキスト エディタで開きます。

$ ナノ こんにちは。

「hello.cu」ファイルに次のコード行を入力します。

#include

__global__ void SayHello ( ) {
プリントフ ( 「GPU から Hello world! \n ) ;
}

整数メイン ( ) {
プリントフ ( 「CPU から Hello world! \n ) ;

こんにちはと言う << 1 1 >> ( ) ;
cudaデバイス同期 ( ) ;

戻る 0 ;
}

完了したら、 を押します + バツ 続いて「Y」 そして <入力> 「hello.cu」ファイルを保存します。

Proxmox VE 8 コンテナ上で「hello.cu」CUDA プログラムをコンパイルするには、次のコマンドを実行します。

$ nvcc hello.cu -O こんにちは

これで、次のように Proxmox VE 8 コンテナ上で「hello」 CUDA プログラムを実行できるようになります。

$ / こんにちは

Proxmox VE 8 コンテナーが NVIDIA CUDA アクセラレーションに NVIDIA GPU を使用できる場合、プログラムは次のスクリーンショットに示すように 2 行を出力します。

Proxmox VE 8 コンテナから NVIDIA GPU にアクセスできない場合、プログラムは「Hello world from the CPU!」という最初の行のみを出力し、2 行目は出力しません。

結論

この記事では、NVIDIA GPU を Proxmox VE 8 ホストから Proxmox VE 8 LXC コンテナーにパススルーする方法を説明しました。また、Proxmox VE ホストと同じバージョンの NVIDIA GPU ドライバーを Proxmox VE 8 コンテナーにインストールする方法も説明しました。最後に、NVIDIA CUDA と NVIDIA cuDNN を Ubuntu 22.04 LTS Proxmox VE 8 コンテナーにインストールし、Proxmox VE 8 コンテナーで単純な NVIDIA CUDA プログラムをコンパイルして実行する方法を説明しました。

参考文献: