PyTorch
PyTorch プロジェクト は、GPU アクセラレーションによるテンソル計算と、ディープラーニング ネットワークを構築するための高レベルの機能を提供する Python パッケージです。 ライセンスの詳細については、 GitHub のPyTorch ライセンスに関するドキュメント を参照してください。
PyTorch モデルを監視およびデバッグするには、 TensorBoard の使用を検討してください。
PyTorch は、Databricks Runtime for Machine Learning に含まれています。 Databricks Runtime を使用している場合は、PyTorch のインストール手順について「 PyTorch のインストール 」を参照してください。
これは PyTorch の包括的なガイドではありません。 詳細については、 PyTorch の Web サイトを参照してください。
単一ノードと分散トレーニング
単一マシンのワークフローをテストおよび移行するには、 Single Node クラスターを使用します。
ディープラーニングの分散トレーニング オプションについては、「 分散トレーニング」を参照してください。
ノートブックの例
PyTorch ノートブック
PyTorch のインストール
ML の Databricks Runtime
Databricks Runtime for Machine Learning にはPyTorchが含まれているため、クラスターを作成して PyTorchの使用を開始できます。お使いの PyTorchバージョンにインストールされているDatabricks RuntimeML のバージョンについては、 リリースノート を参照してください。
Databricks Runtime
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 wheel ファイルを使用して
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)
プロセス 0 は終了コード 1 で終了しました
次のエラーは、Databricks またはローカルでノートブックを使用すると発生する可能性があります。
process 0 terminated with exit code 1
このエラーを回避するには、 torch.multiprocessing.spawn
の代わりに torch.multiprocessing.start_processes
を start_method=fork
とともに使用します。
例えば:
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 関連のエラー
CUDAstart_method=”fork”
はCUDA互換性がないため 、 で追加の問題に発生する可能性があります。どのセルでも .cuda
コマンドを使用すると、障害が発生する可能性があります。 これらのエラーを回避するには、 torch.multiprocessing.start_method
を呼び出す前に次のチェックを追加します。
if torch.cuda.is_initialized():
raise Exception("CUDA was initialized; distributed training will fail.") # or something similar