Kaggle で GPU T4×2 を使いこなす手順ガイド 2025年12月22日更新

Kaggle Notebooks の GPU T4×2 アクセラレータを有効化するための前提条件、設定フロー、マルチ GPU を活かす学習テクニック、運用時の注意点をまとめました。

概要

Kaggle では Notebooks/Code 環境から無料または Pro プランで GPU を利用できます。T4×2 は 2 基の NVIDIA T4 GPU を同時に割り当ててくれるモードで、マルチ GPU 学習や並列推論に向いています。本稿では 2025 年 10 月時点の UI と仕様に基づいて手順を解説します。

T4×2 を有効化する手順

  1. セッション起動時に AcceleratorGPU > T4 x2 に設定することで有効化
  2. Kaggle Notebook の Accelerator 設定画面
  3. プログラムでマルチGPUを適用するように記述する。
    その際のコツを次のセクションで記述する。

マルチGPUを活用するためのコードの記述方法

  • まず、モデルをインポートする際に以下のように"DataParallel"を使用する。
  •             
    device = "cuda" if torch.cuda.is_available() else "cpu"
    
    #使用したいモデルをmodelとして定義する
    model = EncoderClassifier.from_hparams(
        source="speechbrain/spkrec-ecapa-voxceleb",
        savedir = root_path + "/models/pretrained_models/ecapa-tdnn",
        run_opts={"device": device}
        )
    
    # GPUが2基以上ある場合にDataParallelでモデルをラップする
    if torch.cuda.device_count() > 1:
        print(f"Using {torch.cuda.device_count()} GPUs !")
        model = torch.nn.DataParallel(model)
    
    model.to(device)
    # 「Using 2 GPUs !」と表示される
                
                

    ただし、自動的に処理を最適化する際にDataParallelは勝手に無効化されることがある為、気をつけなければならない。

    もしも、この記述でGPUが2基使用されない場合は、モデルに受け渡しているファイルの数が一つずつである可能性を疑う。
    たとえば、以下のように音声認識モデルに音声ファイルを一つずつ渡している場合、DataParallelは有効にならない。

                    
    # pathに一つずつ音声ファイルのパスを格納してループする
    for path in paths:
        # 音声ファイルを一つずつモデルに渡して埋め込みを取得する
        embedding = get_embedding(path, model)
                    
                    
    その際は以下のような記述で、ファイルごとに異なるGPUで処理できるようにする。
                    
    
                    
                    

  • torch.from_numpyの使い方について

  • 音声をGPUに送信する際に、以下のコードを使用した。

        
    torch.from_numpy(signal).float().unsqueeze(0).to(next(model.parameters()).device)
        
        

    以下のコードについて、各メソッドの説明を行う。

    • torch.from_numpy(signal): numpy配列の音声データsignalを、PyTorchのテンソルに変換する。このとき、メモリーのコピーを行わない。signalのデータ形式は、float32かfloat64の一次元配列である。PyTorchのモデルは常に"torch.Tensor"型を求めているため、こうしてNumpyの形式を変換する必要がある。
    • float(): テンソルのデータ型をfloat32に変換する。このとき使用していた事前学習モデルがfloat32を要求していたため、明示的に変換を行っている。
    • unsqueeze(0): テンソルの次元を増やす。ここではバッチサイズの次元を追加して、形状を(1, シーケンス長)にする。
    • to(next(model.parameters()).device): テンソルをモデルと同じデバイス(GPUまたはCPU)に移動する。

    GPUを2つ以上使用する際は特に最後の処理が大事になってくる。モデルを予めCPU上に転送しておいてそれぞれのGPUに送信したほうが、GPU上で効率的に処理できるようになる。

トラブルシューティング

  1. RunTimeError が発生する場合。
  2.         
    RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method
            
            

    上記のエラーが発生した場合、multiprocessingのstart methodを"spawn"に変更することで解決できる。
    具体的には、学習スクリプトの最初に以下のコードを追加する。

            
    import torch.multiprocessing as mp
    mp.set_start_method('spawn', force=True)
            
            

    ここで、Windows環境では"spawn"がデフォルトであるため、上記のコードは不要である。
    しかし、Linux環境では"fork"がデフォルトであるため、上記のコードを追加し、"spawn"にする必要がある。

  3. AttributeError が発生する場合。
  4.         
    AttributeError: Can't get attribute 'worker' on 
            
            

    pythonがマルチプロセスを実行する際に、新たなプロセスを実行するにあたって子プロセスを実行することができなかった際にに発生する。
    notebookのセル内で関数を定義している場合に発生しやすい。
    そのため、外部からpythonファイルで実行すれば解決するのだが、Kaggle notebook上で実行する場合は、if __name__ == '__main__':を使用して、メインプロセスであることを明示的に示すことで解決できる。
    その上で、multiprocessingの代わりに、multiprocessを使用する必要がある。

            
    pip install multiprocess
    import multiprocess as mp
            
            

関連リソース