GPUの利用(CUDA対応)

PyTorchにおける**GPUの利用(CUDA対応)**について、以下の観点から詳しく説明します:


1. CUDAとは

**CUDA(Compute Unified Device Architecture)**は、NVIDIAが提供するGPUでの並列計算を可能にするプラットフォームです。PyTorchはCUDAをサポートしており、対応するNVIDIA製GPUがあれば、演算処理をCPUではなくGPU上で実行できます。これにより、機械学習モデルの学習や推論の速度が大幅に向上します。


2. PyTorchにおけるGPUの確認

まず、使用可能なGPUがあるかを確認するために、次のコードを使用します:

python
import torch print(torch.cuda.is_available()) # TrueならGPU使用可能 print(torch.cuda.device_count()) # 利用可能なGPUの数 print(torch.cuda.get_device_name(0)) # 最初のGPUの名前

3. TensorやモデルをGPUに転送

PyTorchでは、CPUとGPUを「デバイス(device)」として扱います。GPUで計算を行うには、テンソルやモデルを明示的にGPUに移動させる必要があります。

デバイスの指定とTensorの転送

python
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") x_cpu = torch.randn(3, 3) # CPU上のTensor x_gpu = x_cpu.to(device) # GPUに転送

モデルのGPU転送

python
model = MyModel() model.to(device) # モデルをGPUへ転送

4. GPU上での学習の基本例

以下は、GPUを使用して学習する簡単な例です:

python
# デバイスの設定 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # モデルとデータをGPUへ転送 model = MyModel().to(device) inputs = inputs.to(device) labels = labels.to(device) # 順伝播 outputs = model(inputs) # 損失計算と逆伝播 loss = loss_fn(outputs, labels) loss.backward() # 最適化ステップ optimizer.step()

注意inputslabelsなどすべてのテンソルもGPUに移動させる必要があります。異なるデバイス間での計算はできません。


5. 複数GPUの利用(DataParallel)

複数のGPUを活用する場合、以下のようにモデルをラップできます:

python
if torch.cuda.device_count() > 1: model = torch.nn.DataParallel(model) model.to(device)

これにより、自動的に入力データが複数GPUに分割され、並列に処理されます。


6. GPUメモリの管理

PyTorchでは明示的にGPUメモリを解放したり監視したりする必要がある場面もあります:

python
# メモリを解放 del tensor torch.cuda.empty_cache() # 使用中のメモリ確認(MB単位) print(torch.cuda.memory_allocated() / 1024**2)

7. トラブルシューティング

  • GPUが認識されない → torch.cuda.is_available()Falseの場合、CUDAとNVIDIAドライバが正しくインストールされていない可能性があります。

  • RuntimeError: Expected all tensors to be on the same device → モデルとテンソルのデバイスが一致していない場合に発生します。


まとめ

PyTorchにおいてCUDA対応のGPUを利用することで、大規模なモデルの学習を効率的に行うことができます。重要なのは、モデル・データ・演算をすべて同じデバイスに配置することです。GPUの適切な活用は、機械学習の開発と実行の高速化に直結します。

生成日:2025/05/22