メインコンテンツへスキップ

NVIDIA GPUドライバのアーキテクチャとサーバ構成の理解

·1 分·
Makoto Morinaga
著者
Makoto Morinaga
技術メモ、コーディング、環境構築のための個人ノート。
目次

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の世代に応じて、オープンまたはプロプライエタリのカーネルモジュールを使用。
  • CUDAドライバおよびランタイムはユーザー空間で動作し、プロプライエタリ。
  • nvidia-driver-server パッケージはNVSwitchベースのシステム向け。NVSwitchを完全にサポートするためには、Fabric ManagerやNSCQといった追加コンポーネントのインストールが必要で、プロプライエタリなカーネルモジュールに依存。

Open / Server / Proprietary パッケージの比較
#

パッケージ モジュールタイプ 用途 備考
nvidia-open open 標準環境向け(Turing+) openに特化
nvidia-driver open(デフォルト) / proprietary(任意) 汎用環境向け --module-flavorで切替可
nvidia-driver-server proprietary NVSwitch / HGXシステム向け Fabric Managerを利用するために必須
cuda-drivers proprietary CUDAツールキット含む実行/開発環境 ドライバ+ツールキットを含む構成
cuda-runtime proprietary 計算専用ノード(グラフィックスなし) グラフィックスなしで実行ライブラリのみ

CUDAドライバはプロプライエタリ
#

CUDAドライバ(cuda-driver)はクローズドソースのコンポーネントです。 カーネルモジュールがオープンソース化されましたが、libcuda.solibnvidia-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システムでは必須となります。

nvidia-driver-assistantユーティリティ
#

r580で登場したnvidia-driver-assistantは、GPUおよびOSバージョンを自動検出し、適切なドライバ等をインストールします。

bash
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-drivers(ML用途では必須)

非 NVSwitch(通常の ML 計算ノード)
#

  • nvidia-driver(またはnvidia-open)
  • cuda-drivers

コンテナ環境(Docker / Kubernetes / Slurm)
#

  • ホスト
    • nvidia-driver(またはnvidia-open)
    • cuda-drivers
  • コンテナ
    • cuda-runtime(またはcuda-drivers)

トラブルシューティング
#

CUDA runtime error (802): system not yet initialized
#

このエラーが、NVSwitchベースのシステムでFabric Managerサービスがインストールされていない場合に発生することがあります。

NVSwitchインターコネクトの初期化と管理に必要となるので、Fabric Managerが正しくインストールされているか確認してください。

参考文献
#

詳細なインストール手順および最新のパッケージコマンドについては、NVIDIA公式ドキュメントを参照してください。 Driver Installation Guide