CUDAのマルチGPU環境のデバイス指定エラー
CUDAの使用中にマルチGPU環境のデバイス指定エラーに遭遇する場合があります。本記事ではこの問題の原因と解決方法を詳しく解説します。
エラーの症状
複数のGPUを搭載したマシンで「CUDA error: invalid device ordinal」「RuntimeError: CUDA error: all CUDA-capable devices are busy」などのエラーが発生します。
原因
1. 存在しないGPU IDの指定
2枚のGPU環境でcuda:2を指定するとエラーになります。
2. CUDA_VISIBLE_DEVICESの設定ミス
環境変数で制限したデバイスと、コード内の指定が矛盾する場合です。
3. GPU間のメモリ転送エラー
異なるGPU上のテンソル間で演算しようとした場合に発生します。
解決方法
手順1: GPU一覧の確認
nvidia-smi
python -c "import torch; print(torch.cuda.device_count()); [print(f' GPU {i}: {torch.cuda.get_device_name(i)}') for i in range(torch.cuda.device_count())]"
手順2: CUDA_VISIBLE_DEVICESの設定
# 特定のGPUのみを使用
export CUDA_VISIBLE_DEVICES=0,1 # GPU 0と1のみ使用
export CUDA_VISIBLE_DEVICES=1 # GPU 1のみ使用
# Pythonコード内
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
手順3: デバイス間のテンソル移動
# 明示的にデバイスを統一
device = torch.device('cuda:0')
model = model.to(device)
input_data = input_data.to(device)
まとめ
本記事で紹介した手順を試すことで、多くの場合問題を解決できます。環境固有の問題が残る場合は、公式ドキュメントやコミュニティフォーラムを参照してください。
☁️ ローカルGPUが足りない?クラウドGPUという選択肢
高性能GPUを今すぐ使いたい方には、クラウドGPUサービスがおすすめです:
💡 この問題を根本的に解決するには
ローカル環境のGPUトラブルが頻発する場合、ハードウェアの見直しも検討してみてください:
- VRAM不足なら → RTX 4070 Ti Super(16GB VRAM)
- メモリ不足なら → DDR5 64GBメモリ
- AI開発を体系的に学ぶなら → AI・機械学習の実践書籍