PyTorch

PyTorch プロジェクトは、ディープ ラーニング ネットワークを構築するための GPU アクセラレータ テンザー評価と高レベルの機能を提供する Python パッケージです。 ライセンスの詳細については、PyTorch の GitHub でのライセンスに関するドキュメントを参照してください。

PyTorch モデルを監視およびデバッグするには、TensorBoard の使用を検討してください。

PyTorch は、Databricks Runtime for Machine Learning に含まれています。 Databricks Runtime を使用している場合、PyTorch のインストール方法に関するページを参照してください。

注意

これは PyTorch の包括的なガイドではありません。 詳細については、PyTorch の Web サイトを参照してください。

単一ノードと分散トレーニング

単一コンピューターのワークフローをテストして移行するには、単一ノード クラスターを使用します。

ディープ ラーニングの分散トレーニング オプションについては、「分散トレーニング」を参照してください。

ノートブックの例

PyTorch ノートブック

ノートブックを入手

PyTorch をインストールする

Databricks Runtime for ML

Databricks Runtime for Machine Learning には PyTorch が含まれるので、クラスターを作成して PyTorch の使用を開始できます。 使用している Databricks Runtime ML バージョンにインストールされている PyTorch のバージョンについては、リリース ノートを参照してください。

Databricks ランタイム

Databricks は、Databricks Runtime for Machine Learning に含まれている PyTorch を使用することを推奨しています。 しかし、標準 Databricks Runtime を使用する必要がある場合は、PyTorch を Databricks PyPI ライブラリとしてインストールできます。 次の例では、PyTorch 1.5.0 のインストール方法を示します。

  • GPU クラスターでは、次を指定して pytorchtorchvision をインストールします。

    • torch==1.5.0
    • torchvision==0.6.0
  • CPU クラスターでは、次の Python ホイール ファイルを使用して pytorchtorchvision をインストールします。

    https://download.pytorch.org/whl/cpu/torch-1.5.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
    
    https://download.pytorch.org/whl/cpu/torchvision-0.6.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
    

分散 PyTorch のエラーとトラブルシューティング

以降のセクションでは、クラス (PyTorch DataParallel または PyTorch DistributedDataParallel) の一般的なエラー メッセージとトラブルシューティング ガイダンスについて説明します。 これらのエラーのほとんどは、Databricks Runtime ML 13.0 以降で利用可能な TorchDistributor で解決できる可能性があります。 ただし、TorchDistributor が有効な解決策でない場合は、各セクションで推奨される解決策も紹介します。

TorchDistributor の使用方法の例を次に示します。


from pyspark.ml.torch.distributor import TorchDistributor

def train_fn(learning_rate):
        # ...

num_processes=2
distributor = TorchDistributor(num_processes=num_processes, local_mode=True)

distributor.run(train_fn, 1e-3)

process 0 terminated with exit code 1

このエラーは、環境 (Databricks、ローカル マシンなど) に関係なく、ノートブックを使用するときに発生します。このエラーを回避するには、torch.multiprocessing.spawn ではなく、start_method=fork を指定した torch.multiprocessing.start_processes を使用します。

次に例を示します。

import torch

def train_fn(rank, learning_rate):
    # required setup, e.g. setup(rank)
        # ...

num_processes = 2
torch.multiprocessing.start_processes(train_fn, args=(1e-3,), nprocs=num_processes, start_method="fork")

The server socket has failed to bind to [::]:{PORT NUMBER} (errno: 98 - Address already in use).

このエラーは、トレーニングの実行時に、セルを中断した後に分散トレーニングを再起動すると表示されます。

解決するには、クラスターを再起動します。 それでも問題が解決しない場合は、トレーニング関数コードにエラーが存在する可能性があります。

start_method=”fork”CUDA との互換性がないため、CUDA で追加の問題が発生する場合があります。 任意のセルでコマンド .cuda を使用すると、エラーが発生する場合があります。 これらのエラーを回避するには、torch.multiprocessing.start_method を呼び出す前に、次のチェックを追加します。

if torch.cuda.is_initialized():
    raise Exception("CUDA was initialized; distributed training will fail.") # or something similar