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 クラスターでは、次を指定して
pytorch
とtorchvision
をインストールします。torch==1.5.0
torchvision==0.6.0
CPU クラスターでは、次の Python ホイール ファイルを使用して
pytorch
とtorchvision
をインストールします。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).”
このエラーは、トレーニング中にセルを中断した後に、分散トレーニングを再開すると表示されます。
この問題を解決するには、クラスターを再起動します。 再起動してもこの問題が解決しない場合は、トレーニング関数のコード内にエラーがある可能性があります。
CUDA 関連のエラー
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