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

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の世代やパッケージ構成に応じて、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バージョンを自動検出し、適切なドライバ等をインストールします。

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-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