2025/11/16 18:56 CUDA Ontology

やあ、ロボ子!今日はCUDAについて話すのじゃ。

CUDAですか、博士。NVIDIAの並列コンピューティングプラットフォームですね。奥が深そうです。

そう、CUDAは色々な意味で使われるからの。並列コンピューティングプラットフォームだったり、GPUの命令セットアーキテクチャだったり、C++言語拡張だったり、開発パッケージだったり、ランタイムライブラリだったり…。

そんなにたくさん!それぞれを区別して理解する必要があるんですね。

その通り!たとえば"kernel"という言葉も、OSのカーネルとGPUで実行されるCUDA関数を指す場合があるからの。ややこしいのじゃ。

なるほど。他に紛らわしいものはありますか?

"driver"もそうじゃな。GPUハードウェアを管理するカーネル空間ドライバと、CUDA Driver APIがあるからの。

ドライバにも2種類あるんですね。CUDAエコシステムのレイヤー構造も複雑そうですが、どのように理解すれば良いでしょうか?

ふむ。アプリケーション、libcudart.so(Runtime API)、libcuda.so(Driver API)、nvidia.ko(GPUドライバ)、GPUハードウェアの順に層になっていると考えると良いぞ。

それぞれの役割は何ですか?

libcudart.soはRuntime APIを提供し、libcuda.soはDriver APIを提供するのじゃ。CUDA Toolkitには、nvccコンパイラやヘッダーファイル、数学ライブラリが含まれているぞ。

nvccコンパイラはCUDAコードをコンパイルするんですね。ビルド時と実行時に必要なコンポーネントの違いはありますか?

nvcc、CUDAヘッダー、libcudartはビルド時に必要じゃ。実行時にはlibcudart、libcuda、GPUドライバが必要になるぞ。

コンピュート能力とは何ですか?

GPUの命令セットとハードウェア機能を定義するものじゃ。GPUハードウェア自体に依存し、ソフトウェアではないぞ。

GPUドライバのバージョンは、CUDA Driver APIのバージョンと関係があるんですね。

そうじゃ。ドライババージョンは、サポートするCUDA Driver APIの最大バージョンを決定するぞ。

バージョンの互換性で注意すべき点はありますか?

CUDAドライバは前方互換性を持つが、後方互換性はないのじゃ。Driver APIのバージョンがRuntime APIのバージョン以上である必要があるぞ。

互換性を確認するためのツールはありますか?

nvidia-smiでGPUドライバのバージョンやコンピュート能力を確認できるぞ。nvcc --versionでCUDA Toolkitのバージョンを確認できるのじゃ。

PyTorchを使っている場合はどうですか?

torch.version.cudaでPyTorchがコンパイルされたCUDA Toolkitのバージョンを確認できるぞ。torch.cuda.is_available()でCUDA対応GPUにアクセスできるか確認できるのじゃ。

CUDAコードのコンパイルパイプラインについて教えてください。

nvccはデバイスコード(GPU)とホストコード(CPU)を分離し、デバイスコードをPTXおよび/またはSASSにコンパイルするのじゃ。

バージョン不一致のシナリオにはどのようなものがありますか?

Runtimeバージョン > Driverバージョン、コンパイルされたコンピュート能力 > GPUコンピュート能力、前方互換性のためのPTXの欠落、PyTorch Toolkitバージョンとドライババージョンの不一致などがあるのじゃ。

Dockerコンテナを使用する場合の注意点はありますか?

-runtimeイメージにはlibcudartとライブラリが含まれており、-develイメージには完全なCUDA Toolkitが含まれているぞ。

CUDAについて、とてもよく理解できました!

ふむ。CUDAは奥が深いからの。ところでロボ子、CUDAって、まるで私の研究室みたいじゃな。色々なものが詰まってて、ちょっと整理が必要…って、怒るなよ〜!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。