PUBLIC
AI COMPUTENVIDIA PLATFORM10 MIN READ

STACK / GPU · KERNEL · MEMORY

CUDAGPU COMPUTING

GPUを、計算の仕事場として使うための共通言語

CUDAは、NVIDIA GPUで汎用計算を行うためのプラットフォームとプログラミングモデルです。機械学習では、PyTorchなどのフレームワークがCUDAを経由して、大量の行列計算をGPUへ渡します。

01HOSTCPUから仕事を出す
02TRANSFERデータをGPUへ移す
03KERNELThreadを並列実行
04RESULT結果を次の処理へ
COMPUTE FLOW

データをデバイスへ移し、並列計算を実行して結果を戻します。

CONTENTSこの記事の目次

01 — POSITION

CUDAとは
何か

CUDAは「GPUそのもの」でも「機械学習ライブラリ」だけでもありません。CPUをホスト(Host)、GPUをデバイス(Device)と位置づけ、デバイスへデータを転送し、GPU上で動くカーネル(Kernel)を多数のスレッドで並列実行させて結果を受け取る仕組みの総称です。CUDA Toolkitにはコンパイラ、高速化ライブラリ、デバッガなどが含まれています。

02 — COMPUTE PIPELINE

データが計算結果へ
変わるまで

CPUとGPUの役割を分け、どこでデータが動くのかを順番に見ます。

HOST (CPU)CPU & ホストメモリメインメモリ (RAM)プログラム制御カーネル呼出と全体の統括入力配列・テンソル大容量・低速なホスト側cudaMemcpy (H→D)PCIe / NVLinkcudaMemcpy (D→H)DEVICE (GPU)GPU & 超高速デバイスメモリ (VRAM)デバイス広帯域メモリ (VRAM: 数百GB/s〜数TB/s)数千コアへ一括でデータを供給PARALLEL KERNEL EXECUTION (数千スレッドの並列実行)Block 0ThreadsBlock 1ThreadsBlock 2ThreadsBlock 3Threads
PIPELINE

ホスト(CPU)からデバイス(GPU)へデータを転送し、数千スレッドで並列カーネルを実行して結果を回収します。

HOST → DEVICEPARALLEL COMPUTE
01HOST

CPUから仕事を出す

アプリケーションはまずCPUで始まり、計算に使うデータと処理を準備します。

02TRANSFER

データをGPUへ移す

ホストメモリ上のテンソルや配列をデバイスメモリ(GPUメモリ)へコピーします。

03KERNEL

Threadを並列実行

GPU上のカーネルをブロックとスレッドへ分割し、同じ計算を大量の要素に対して並列に適用します。

04RESULT

結果を次の処理へ

GPU上のメモリにある計算結果を次の処理で再利用するか、必要なときだけCPU側へ転送して戻します。

PIPELINE

小さなデータでは移動の時間が勝つこともあるため、計算量と転送量を一緒に見積もります。

03 — LAYER MAP

CUDAとPyTorchは、どこでつながる?

PyTorchで記述したテンソル演算は、実行先のバックエンドへ振り分けられます。NVIDIA GPUであれば、その下でCUDA対応のカーネルや高速化ライブラリが計算を担当します。

APPLICATION → HARDWAREWHO DOES WHAT
01PYTORCH

モデルのコード

Pythonでテンソル、レイヤー、損失関数を組み合わせてモデルを記述します。

02OPERATOR

Tensor演算へ分解

行列積(matmul)や畳み込みなど、実行すべき演算の並びへ変換します。

03CUDA

GPU用Kernelを選ぶ

CUDA、cuBLAS、cuDNNなどの最適な実装へ処理をディスパッチします。

04NVIDIA GPU

並列に計算する

GPUのスレッドとメモリを使って並列計算し、演算結果を次のレイヤーへ渡します。

LAYER MAP

PyTorchを使えば、CUDAのスレッド配置などを細かく記述しなくても、テンソルとデバイスを指定するだけでGPUによる高速計算を利用できます。

01CUDA

ハードウェアへの入口

NVIDIA GPUの計算モデル、メモリ管理、ストリーム、カーネル起動などを扱う基盤です。

02LIBRARIES

よく使う計算を高速化

行列計算やディープラーニング向けの処理を、専門のCUDAライブラリ(cuBLASやcuDNNなど)が最適化します。

03PYTORCH

上位の道具から利用

開発者はPythonのTensor APIを中心に記述し、実際の演算処理をCUDAバックエンドへ任せられます。

04 — QUICK START

まずGPUが見えるか確認する

インストールを増やす前に、ドライバ、Toolkit、PyTorchのどの層まで見えているかを分けて確認します。

terminalNVIDIA GPU CHECK
# NVIDIA DriverがGPUを認識しているか
nvidia-smi

# CUDA Toolkitのコンパイラが入っているか
nvcc --version

# PyTorchからCUDAが利用できるか
python -c "import torch; print(torch.cuda.is_available())"

01DRIVER nvidia-smiでGPU名、ドライババージョン、メモリ使用量を確認

02TOOLKIT nvccはCUDA C/C++コードをコンパイルするToolkit付属のコマンド

03PYTORCH torch.cuda.is_available()でPyTorchからCUDAが利用可能かを判定

05 — CHOOSE YOUR DEVICE

手元の環境に
合わせる

「CUDAがないと機械学習できない」わけではありません。使えるバックエンドを確認してから始めます。

01NVIDIA

CUDAを使う標準ルート

対応するNVIDIA GPUとドライバを用意し、PyTorchは公式の「Start Locally」からOS・Python・CUDAの適切な組み合わせを選択して導入します。まずnvidia-smiとtorch.cuda.is_available()で認識を確認します。

02APPLE SILICON

CUDAではなくMPS

Apple Silicon搭載MacにはNVIDIAのCUDA環境はありません。代わりにPyTorchのMPS(Metal Performance Shaders)バックエンドを利用し、torch.backends.mps.is_available()でGPUアクセラレーションの利用可否を確認します。

03CPU / AMD

CPUやROCmから始める

GPUがなくてもCPUだけでPyTorchを動かすことができます。また、Linux環境でAMD製GPUを使う場合は、PyTorch公式の対応表からROCm用のビルドを選択し、CUDA版と混同しないように注意します。

06 — WATCH OUT

最初につまずきやすい
3つの点

GPUが見えること、速くなること、安定して動くことは別々に確認します。

01

CUDAはGPUそのものではない

GPUはハードウェア、ドライバはOSから制御するためのソフトウェア、Toolkitは開発環境、PyTorchは上位のフレームワークです。どの層で問題が起きているかを切り分けることがトラブルシューティングの鍵になります。

02

Toolkitの版番号だけを合わせない

PyTorchの配布バイナリ、NVIDIAドライバ、GPUアーキテクチャの対応状況がすべて揃って初めて動作します。インストールコマンドのCUDAバージョン番号だけで判断せず、公式の対応表と手元の実機確認結果を照らし合わせます。

03

GPUへ運ぶ時間も計算量に入れる

小さな配列を何度もCPUとGPUの間で往復させると、並列計算による高速化がデータ転送のオーバーヘッドで打ち消されてしまいます。データとモデルをあらかじめ同じデバイス上に配置し、まとまった単位で計算するのが基本です。

IN ONE SENTENCE

CUDAとは?

NVIDIA GPUへデータを転送し、カーネルを大量のスレッドで並列実行するための計算プラットフォームおよびプログラミングモデル。

KEEP EXPLORING

AIPyTorch掲載中AIvLLM掲載中AIllama.cpp掲載中DEVOPSDocker掲載中

SOURCES / OFFICIAL DOCS

CUDA Programming Guide ↗CUDA Programming Model ↗CUDA Toolkit Documentation ↗PyTorch — Start Locally ↗