2024年以降、NVIDIAのドライバが大きく再構築されました。
特にr560以降では、オープンGPUカーネルモジュールがデフォルトとなり、自動セットアップを簡素化するためのnvidia-driver-assistantユーティリティが登場しました。
本記事はインストール手順書ではなく、機械学習向けのGPUサーバを管理するために、ドライバ構造、「open / server / proprietary」ドライバの違い、そしてFabric Managerが必要となる条件を個人的に整理したものです。 内容に誤りや改善点があれば、コメント等でご指摘いただけると嬉しいです。
ドライバアーキテクチャの概要 #
r580時点で、NVIDIAドライバスタックは「2つのカーネル空間実装」と「1つのユーザー空間コンポーネント」で構成されています。
| 区分 | コンポーネント | 説明 |
|---|---|---|
| カーネル空間 | Open GPU Kernel Modules | Turing以降のGPU向けのオープンソース実装。 MIT/GPLv2デュアルライセンス。 |
| Proprietary GPU Kernel Modules | Maxwell〜Volta向けのクローズドソース実装。 | |
| ユーザー空間 | CUDA Driver / Runtime | CUDA APIやGPU管理機能を提供するプロプライエタリのバイナリ。 |
- GPUの世代やパッケージ構成に応じて、openまたはproprietaryのカーネルモジュール実装が利用されます。
- CUDAドライバおよびランタイムは、CUDA APIを提供するユーザー空間コンポーネントであり、現在もプロプライエタリです。
nvidia-driver-serverはデータセンター/サーバ向けドライバストリームであり、HGX/DGXなどのNVSwitchベース環境で一般的に利用されます。- NVSwitchシステムでは、GPUファブリックの初期化・管理のためにFabric ManagerおよびNSCQコンポーネントが必要です。
Open / Server / Proprietary パッケージの比較 #
| パッケージ | 役割 | 備考 |
|---|---|---|
| nvidia-open | Open GPU kernel moduleスタック | Turing以降で推奨 |
| nvidia-driver | 標準NVIDIAドライバスタック | ディストリビューションやリポジトリ構成によってopen/proprietaryが切り替わる場合あり |
| nvidia-driver-server | データセンター/サーバ向けドライバストリーム | HGX/NVSwitch環境で一般的 |
| cuda-toolkit | CUDA SDK / 開発ツール群 | nvcc、CUDAライブラリ、開発ツールを含む |
| cuda-runtime | CUDA runtimeライブラリ | 実行時向けユーザー空間コンポーネント |
| cuda-drivers | NVIDIAドライバ導入用メタパッケージ | Ubuntuではopen-driverと競合する場合あり |
Open GPU Kernel Modulesは、カーネル空間のGPUドライバ層のみを置き換えます。 CUDA userspaceコンポーネント(libcuda.so や libnvidia-ml.so など)は現在もプロプライエタリです。
Fabric Managerが必要となる場合とその理由 #
Fabric ManagerはNVSwitchベースのシステムでのみ必要となります。
Fabric Managerを利用するためには、nvidia-driver-serverの使用が必須となり、nvidia-openや標準のnvidia-driverではFabric Managerがサポートされていません。
PCIe GPU(例:H100 PCIe、L40S)では、Fabric Managerは不要です。
NVLinkとNVSwitchの違い #
| 種別 | 名称 | 機能 |
|---|---|---|
| リンク層 | NVLink | 2〜4 GPU構成で使用されるポイントツーポイント接続 |
| ファブリック層 | NVSwitch | 8 GPU以上を全結合するスイッチ |
NVLinkのみのシステムでは通常Fabric Managerは不要です。 一方、NVSwitchシステムではGPUファブリック管理のためにFabric Managerが必要となります。
nvidia-driver-assistantユーティリティ #
r580で登場したnvidia-driver-assistantは、GPUおよびOSバージョンを自動検出し、適切なドライバ等をインストールします。
sudo apt install nvidia-driver-assistant
nvidia-driver-assistant --install
# プロプライエタリモジュールを明示的に指定する場合:
sudo nvidia-driver-assistant --install --module-flavor closed選定ルール #
NVSwitch ベース(HGX / DGX) #
- nvidia-driver-server
- nvidia-fabricmanager
必要に応じて:
- cuda-toolkit
非 NVSwitch(通常の ML 計算ノード) #
- nvidia-open(Turing以降で推奨) または
- nvidia-driver(proprietaryドライバを利用する場合)
CUDA開発用途:
- cuda-toolkit
Ubuntuでopen GPU kernel modulesを維持したい場合は、汎用メタパッケージであるcuda-driversは避けた方が安全です。
コンテナ環境(Docker / Kubernetes / Slurm) #
- ホスト
- nvidia-open(またはnvidia-driver)
- 必要に応じてcuda-toolkit
- コンテナ
- cuda-runtime
ホスト側でNVIDIAカーネルドライバおよび/dev/nvidia*を提供します。
コンテナ内では通常、CUDA userspaceライブラリのみ利用します。
トラブルシューティング #
CUDA runtime error (802): system not yet initialized #
このエラーが、NVSwitchベースのシステムでFabric Managerサービスがインストールされていない場合に発生することがあります。
NVSwitchインターコネクトの初期化と管理に必要となるので、Fabric Managerが正しくインストールされているか確認してください。
参考文献 #
詳細なインストール手順および最新のパッケージコマンドについては、NVIDIA公式ドキュメントを参照してください。 Driver Installation Guide