CPUは幅広い仕事をこなすGeneral Purpose Processorです。
一方、GPUは似た計算を大量に並列実行するのが得意です。
Deep LearningではMatrixやTensor計算を大量に行うため、GPUがTrainingやInferenceで重要になりました。
NVIDIA GPUをSoftwareから使うための中心的なEcosystemが**Compute Unified Device Architecture (CUDA)**です。
CUDAは一つのInstallerだけではない
「CUDAをInstallする」と一言で言われますが、実際のStackには、
- NVIDIA GPU
- NVIDIA Driver
- CUDA Runtime
- CUDA Toolkit
- cuBLAS / cuDNNなどのLibrary
- PyTorchなどのFramework
- GPU Architecture
など複数のLayerがあります。
Version Errorが分かりにくいのは、この複数LayerにCompatibilityがあるからです。
GPUは何を高速化する?
Neural NetworkではTensorという多次元の数値Arrayに対して大量の計算をします。
GPUは同じ種類の数値計算を並列に実行でき、CUDA LibraryにはAI Workload向けに最適化された処理があります。
PythonでPyTorchを書いていても、Pythonが一個ずつ掛け算しているわけではありません。
重いTensor OperationはFrameworkから高速なGPU KernelへDispatchされます。
これは第026回で説明した「Pythonが高速Libraryの操作Layerになる」という話につながります。
DriverとToolkitは同じではない
GPU DriverはOSやApplicationがHardwareと通信するために必要です。
CUDA ToolkitにはCompiler、Header、Development Libraryなど、CUDA SoftwareをBuildするためのToolが入ります。
PrebuiltされたPyTorch PackageなどはCompatibleなRuntime Libraryを含むことがあり、Full Toolkitを別途入れなくても動く場合があります。
RequirementはPackageごとに確認します。
なぜCUDA Versionが複数表示される?
Commandによって別のLayerのVersionを表示するからです。
Driverが対応できるCUDA範囲、PyTorchがBuildされたCUDA Version、Local Toolkit Versionは必ずしも同じ数字ではありません。
Errorが出たときは全部を適当にReinstallせず、どのLayerのCompatibility問題か確認します。
CUDAがあってもVRAMは増えない
CUDAで計算は高速化できますが、GPU Memoryが増えるわけではありません。
ModelがVRAMへ入らないなら、第025回で説明した小さいModel、Quantization、Offload、Context削減などが必要です。
CUDAはNVIDIA向け
CUDAはNVIDIAのPlatformです。他社GPUには別のSoftware Stackがあります。
「CUDA Required」と書かれたProjectは、多くの場合NVIDIA GPU向け実装を前提にしています。
今日の一文
CUDAは、AI LibraryなどがNVIDIA GPU上でParallel Computationを効率よく実行するためのSoftware Platformです。
次の第029回ではModelやDatasetが集まるHugging Faceへ進みます。
コメント
質問、感想、補足したいことがあれば、ここに残せます。
まだコメントはありません。1Fになってみませんか。