このトピックでは、DLC モジュールに関するよくある質問に回答し、一般的な問題の解決策を提供します。
Q: "SupportsDistributedTraining false" エラーでジョブが失敗する
-
原因:トレーニングジョブが複数のインスタンス (2 つ以上のノード) を使用するように設定されていますが、モデルが分散トレーニングをサポートしていません。
-
解決策:ノード数を 1 に設定してください。
Q: "resource limiting triggered" エラーでジョブが失敗する
このエラーは、ジョブが同時リソース制限を超えたために発生します。この制限は現在、最大 2 GPU に設定されています。これを解決するには、実行中の他のジョブが完了するまで待つか、チケットを送信してより高いリソースクォータをリクエストしてください。
Q: "exited with code 137" エラーへの対処方法
"xxx exited with code 137" エラーが発生した場合は、より多くのメモリを搭載したインスタンスを使用するか、ワーカー数を増やすか、またはコードを変更してメモリ消費量を減らしてください。
Linux では、終了コード 137 は、プロセスが SIGKILL シグナルによって終了したことを示します。これは通常、メモリ不足 (OOM) エラーを示しています。これを確認するには、ジョブの詳細でワーカーのメモリ使用量を確認します。エラーを解決するには、より多くのメモリを搭載したインスタンスタイプに切り替えるか、ワーカーを追加するか、またはコードを変更してメモリ消費量を減らしてください。
Q: ジョブが失敗またはデキューされる
DLC ジョブのステータスは、次の順序で変化します。
|
ジョブタイプ |
ステータスの順序 |
|
|
従量課金リソースで送信された DLC ジョブ |
Lingjun プリエンプティブルリソースを使用 |
|
|
Lingjun または汎用パブリックリソースを使用 |
|
|
|
サブスクリプションリソースで送信された DLC ジョブ |
|
|
-
ジョブが Environment Preparing ステータスで停止している場合はどうすればよいですか?
ジョブが Environment Preparing ステータスで停止している場合、一般的な原因は、VPC を指定せずに CPFS タイプのデータセットを分散トレーニングジョブに使用していることです。これを解決するには、ジョブを再作成し、CPFS タイプのデータセットと VPC の両方を構成する必要があります。選択した VPC が CPFS ファイルシステムで使用されているものと一致していることを確認してください。詳細については、「トレーニングジョブの作成」をご参照ください。
-
ジョブのステータスが Failed の場合はどうすればよいですか?
ジョブの詳細ページで、ジョブステータスの横にある
アイコンにマウスポインターを合わせるか、インスタンスの操作ログを確認すると、失敗の原因を特定できます。詳細については、「トレーニングジョブの詳細の表示」をご参照ください。
Q: 既存のジョブのリソースタイプを切り替える
いいえ、実行中のジョブのリソースタイプは変更できません。新しいジョブを作成する必要があります。この操作を簡単にするには、[クローン] を、元のジョブの [アクション] 列でクリックします。これにより、同じ設定で新しいジョブが作成され、送信前に変更できます。課金の詳細については、「DLC の課金」をご参照ください。
Q: マルチノード、マルチ GPU ジョブの構成
DLC ジョブを作成する際に、次の起動コマンドを構成できます。構成の詳細については、「トレーニングジョブの作成」をご参照ください。
python -m torch.distributed.launch \ --nproc_per_node=2 \ --master_addr=${MASTER_ADDR} \ --master_port=${MASTER_PORT} \ --nnodes=${WORLD_SIZE} \ --node_rank=${RANK} \ train.py --epochs=100
Q: トレーニング済みモデルをローカルにダウンロードする方法
トレーニング済みモデルを保存するには、データセットを DLC ジョブに関連付け、起動コマンドを構成して結果をマウントされたディレクトリに出力します。ジョブ構成の [Environment Information] セクションで、カスタムデータセットを追加し、[Mount Path] を /mnt/data/ に設定してから、[Startup Command] にコマンド cp -r ./output /mnt/data を追加します。これにより、トレーニング中に生成されたモデルファイルがマウントされたデータセットディレクトリにコピーされます。
ジョブが完了すると、モデルファイルはマウントされたデータセットディレクトリに自動的に保存されます。その後、マウントされたデータセットに対応するファイルシステムにアクセスし、モデルファイルをローカルマシンにダウンロードできます。
-
DLC ジョブを送信する際にデータセットを関連付ける方法については、「トレーニングジョブの作成」をご参照ください。
-
OSS ファイルシステムからローカルマシンにファイルをダウンロードする方法については、「クイックスタート」をご参照ください。
-
NAS ファイルシステムからローカルマシンにファイルをダウンロードする方法については、「Function Compute でのファイルシステムのマウント」をご参照ください。
Q: DLC で Docker イメージを使用する方法
-
カスタム Docker イメージを使用して DLC ジョブを作成する: Docker イメージを Alibaba Cloud Container Registry (ACR) にプッシュし、PAI ワークスペースでカスタムイメージとして追加します。DLC ジョブを作成する際に、このイメージを選択してインスタンスを起動できます。
-
Docker イメージを ACR にプッシュする方法については、「Personal Edition のインスタンスを使用したイメージのプッシュとプル」をご参照ください。
-
PAI カスタムイメージを追加する方法については、「カスタムイメージ」をご参照ください。
-
-
DLC コンテナ内で Docker をインストールして使用する: DLC ジョブはコンテナ内で実行されます。したがって、DLC コンテナ内で Docker をインストールまたは使用することはできません。
Q: 早期に終了したノードを解放する方法
問題の説明:
マルチワーカー分散トレーニングジョブでは、データの偏りにより、一部のワーカーが他のワーカーよりも早くタスクを完了する場合があります。デフォルトでは、これらの完了したワーカーは、ジョブ全体が完了するまで、スケジュールされたノードを占有し続けます。
解決策: PAI-DLC のReleaseResourcePolicy 詳細パラメータを構成します。デフォルトでは、コンピューティングリソースはジョブ全体が完了した後にのみ解放されます。パラメータをpod-exit に設定すると、ワーカープロセスが終了するとすぐにリソースが解放されます。
Q: "Stale file handle" エラーでジョブが失敗する
問題の説明:
複数のワーカーが、PyTorch の torch.compile (AOT コンパイル機能) を実行する際に "OSError: [Errno 116] Stale file handle" エラーで失敗します。このエラーは、ワーカーがキャッシュファイルを読み取ろうとしたときに発生します。
トラブルシューティングと分析:
このエラーは通常、Network File System (NFS) 環境で発生します。これは、クライアントが古くなったファイルハンドルを使用した場合に発生します。つまり、ファイルがサーバー上で削除または移動されたことを意味します。
根本原因:
このエラーは、計算グラフをキャッシュする PyTorch の事前 (AOT) コンパイルに起因します。"stale file handle" エラーは、複数のワーカーがこのキャッシュを同時に読み取り、書き込み、またはクリーンアップすることによって発生し、あるワーカーが別のプロセスによってすでに削除されたファイルのハンドルを使用しようとする競合状態につながります。
推奨される解決策:
-
主要な解決策として、次の環境変数を設定して、PyTorch がキャッシュにローカルの
tmpfsを使用するように強制します:TORCHINDUCTOR_CACHE_DIR=/dev/shm/torch_cache。
代替ソリューション:
-
Redis を共有キャッシュとして使用します (PyTorch の公式ドキュメントに記載されています) 。これには、Redis サービスのセットアップが必要です。
-
CPFS NFS マウントオプションを確認してください。
noacオプションを使用すると、問題が軽減される可能性がありますが、パフォーマンスに影響を与える可能性があります。 -
TORCHINDUCTOR_CACHE_DIR=""を設定して、キャッシュを完全に無効にします。これにより、コンパイルのパフォーマンスが低下します。
Q: "Transport endpoint is not connected" エラー
問題の説明:
DLC ジョブの開始後、/mnt/data などのマウントされたデータセットパスにアクセスするコマンドが Transport endpoint is not connected エラーで失敗します。これは、NFS マウントポイントが切断されていることを示しています。
一般的な原因:
-
CPFS の VPC の不一致: CPFS データセットを使用する場合、トレーニングジョブの VPC は CPFS ファイルシステムの VPC と一致する必要があります。VPC が一致しない場合、マウントは失敗します。
-
データセットの準備が完了していない: AI アセット管理を通じて作成されたデータセットは、まだ初期化中である可能性があります。
-
マウントパスが正しくない: ジョブ構成で指定されたマウントパスが、データセットの実際のマウントポイントと一致していません。
ソリューション:
-
[AI Asset Management] で、データセットのステータスが "Available" であることを確認してください。
-
CPFS データセットを使用している場合は、トレーニングジョブの VPC が CPFS ファイルシステムの VPC と一致していることを確認してください。詳細については、「トレーニングジョブの作成」の VPC 構成セクションをご参照ください。
-
マウントパスを確認してください:タスクログで
ls -la /mnt/dataを実行して、マウントにアクセスできることを確認します。 -
OSS データセットを使用している場合は、データセットマウントの代わりに ストレージマウント方法の使用を検討してください。互換性が向上する可能性があります。
Q: "Unable to attach or mount volumes" エラー
問題の説明:
起動中、DLC ジョブがネットワーク初期化または環境準備フェーズで停止します。ログには次のエラーが表示されます。
Unable to attach or mount volumes: unmounted volumes=[hostpath-volume], unattached volumes=[...]: timed out waiting for the condition
一般的な原因:
-
ノードのディスク容量不足: コンピューティングノードのローカルディスクがいっぱいであるため、
hostpath-volumeのマウントが妨げられています。 -
ストレージバックエンドの障害: ストレージサービス (NAS、CPFS、または OSS など) に一時的な障害または接続タイムアウトがあります。
-
ノードリソースの競合: 複数のジョブが同じノードにスケジュールされているため、ボリュームマウントリクエストがキューで待機中にタイムアウトします。
ソリューション:
-
ジョブを再送信してください。このエラーは一時的なものであることが多く、新しいジョブを作成すると解決できる場合があります。
-
ストレージの接続性を確認してください。データセットに関連付けられている NAS、CPFS、または OSS サービスが正常であり、VPC とセキュリティグループの構成が正しいことを確認してください。
-
問題が解決しない場合は、Alibaba Cloud テクニカルサポートに連絡し、ジョブ ID と完全なエラーログを提供してください。