PAI-DLC は Kubernetes 上でシングルノードまたは分散トレーニングジョブを作成し、インスタンスのプロビジョニングや環境構成を不要にします。複数のディープ ラーニングフレームワークと柔軟なリソース構成をサポートしています。
クイックスタート
MNIST を使用したシングル GPU またはマルチノード・マルチ GPU 分散トレーニングのウォークスルーについては、「分散トレーニング DLC クイックスタート」をご参照ください。
コンソールパラメーター
基本情報
Job Name および Tag を構成します。
環境情報
|
パラメーター |
説明 |
|
Image Configuration |
Alibaba Cloud Image を選択するほか、以下のイメージタイプを使用できます。
|
|
Mount dataset |
データセットはモデルトレーニングに必要なデータファイルを提供します。PAI では次の 2 種類のデータセットがサポートされています。
Mount Path:DLC コンテナ内でデータセットがマウントされるパス(例: 重要
CPFS データセットを構成する場合、DLC の VPC を構成し、その VPC が CPFS ファイルシステムの VPC と同じであることを確認してください。そうしないと、送信されたジョブが「準備中」状態のまま長時間停止する可能性があります。 |
|
Mount storage |
データの読み取りや中間ファイル・結果の保存のために、データソースパスをマウントすることもできます。
「クラウドストレージの利用」。 |
|
Startup Command |
ジョブの起動コマンドを設定します。シェルコマンドがサポートされています。DLC は自動的に PyTorch および TensorFlow 向けの共通環境変数(例:
|
リソース情報
|
パラメーター |
説明 |
|
Resource Type |
デフォルト値は General Computing です。Lingjun Intelligence Resources は以下のリージョンで利用可能です:中国 (ウランチャブ)、シンガポール、中国 (深セン)、中国 (北京)、中国 (上海)、中国 (杭州)、中国 (広州)、中国 (香港)、マレーシア (クアラルンプール)、ドイツ (フランクフルト)、アトランタ。 |
|
Source |
|
|
Framework |
サポートされるディープ ラーニングトレーニングフレームワークおよびツール:TensorFlow、PyTorch、ElasticBatch、XGBoost、OneFlow、MPIJob、Ray、Custom、DataJuicer、および MPI。 説明
Resource Quota を選択し、Lingjun AI コンピューティングリソースを使用する場合、TensorFlow、PyTorch、ElasticBatch、MPIJob、および Ray ジョブのみを送信できます。 |
|
Job Resource |
選択した Framework に基づき、Worker、PS、Chief、Evaluator、GraphLearn の各ノードタイプ向けにリソースを構成できます。Ray フレームワークを選択した場合、Add Role をクリックして Worker ロールをカスタマイズし、異種リソース上でジョブを実行できます。
|
VPC 構成
-
VPC を構成しない場合、ジョブは帯域幅が制限されたパブリックゲートウェイを使用するため、ジョブが遅延したり失敗したりする可能性があります。
-
VPC、vSwitch、セキュリティグループを構成することで、帯域幅、安定性、セキュリティを向上させられます。ジョブクラスターは VPC 内のサービスに直接アクセスできます。
重要-
VPC を使用する場合、ジョブのリソースグループインスタンスおよびデータセットストレージ(OSS)が同一リージョンの VPC 内にあり、VPC がコードリポジトリのネットワークに接続されていることを確認してください。
-
CPFS データセットを使用する場合、VPC を構成し、選択した VPC が CPFS ファイルシステムの VPC と同じであることを確認してください。そうしないと、送信された DLC トレーニングジョブが「準備中」状態のまま長時間停止する可能性があります。
-
プリエンプティブル Lingjun AI コンピューティングリソースを使用する DLC ジョブを送信する際は、VPC を構成する必要があります。
次のいずれかの方法で Internet Access Gateway を構成することもできます。
-
Public Gateway:帯域幅が制限されており、高同時実行アクセス時や大容量ファイルダウンロード時に不十分になる可能性があります。
-
Private Gateway:パブリックゲートウェイの帯域幅制限を克服するには、DLC VPC 内にインターネット NAT Gateway を作成し、EIP をバインドして SNAT エントリを構成します。「プライベートゲートウェイを使用したパブリックネットワークアクセス速度の向上」。
-
フォールトトレランスと診断
|
パラメーター |
説明 |
|
Automatic Fault Tolerance |
Automatic Fault Tolerance を有効化し、必要なパラメーターを構成することで、アルゴリズムレベルのエラーを検出し軽減し、GPU 使用率を向上させます。「AIMaster:弾力性のある自動耐障害性エンジン」。 説明
自動フォールトトレランスを有効化すると、AIMaster インスタンスが起動し、ジョブインスタンスとともに実行されます。これにより、一定量のコンピューティングリソースが消費されます。AIMaster インスタンスは次のリソースを使用します。
|
|
Sanity Check |
Sanity Check を有効化することで、トレーニングリソースを包括的にチェックし、障害のあるノードを隔離してバックエンドの自動 O&M プロセスをトリガーします。これにより、初期段階の失敗を削減し、成功率を向上させます。「SanityCheck:コンピュートリソースヘルスチェック」。 説明
ヘルスチェック機能は、Lingjun AI コンピューティングリソースクォータを使用して送信された GPU 数が 0 より大きい PyTorch トレーニングジョブでのみサポートされています。 |
ロールと権限
インスタンス RAM ロールの構成。「DLC RAM ロールの構成」。
|
インスタンス RAM ロール |
説明 |
|
Default Role of PAI |
PAI デフォルトロールは STS 一時認証情報経由で次の権限を付与します。
|
|
Custom Role |
カスタム RAM ロールを選択するか、入力します。インスタンスは、STS 一時認証情報を介してクラウドサービスにアクセスする際に、このロールの権限を偽装します。 |
|
Does Not Associate Role |
DLC ジョブに関連付けられた RAM ロールはありません。これがデフォルトのオプションです。 |
関連トピック
-
ジョブの詳細、リソース使用量、操作ログ:「トレーニングの詳細の表示」。
-
課金の詳細:「請求書の詳細」。
-
よくある問題と解決策:「DLC よくある質問」。
-
ユースケース:「DLC ユースケース」。
付録
SDK または CLI によるジョブ作成
Python SDK
ステップ 1:認証情報ツールのインストール
SDK 認証用の認証情報ツールをインストールします。要件:
-
Python 3.7 以降。
-
Alibaba Cloud SDK 2.0 シリーズ。
pip install alibabacloud_credentials
ステップ 2:AccessKey の取得
この例では AccessKey ペアを使用します。セキュリティリスクを回避するため、AccessKey 値を環境変数として保存します。AccessKey ID の環境変数は ALIBABA_CLOUD_ACCESS_KEY_ID、AccessKey Secret の環境変数は ALIBABA_CLOUD_ACCESS_KEY_SECRET です。
-
AccessKey ペアの取得方法:「AccessKey の作成」。
-
環境変数の設定方法:「環境変数の構成」。
-
その他の認証情報方法:「認証情報ツールのインストール」。
ステップ 3:Python SDK のインストール
-
ワークスペース SDK をインストールします。
pip install alibabacloud_aiworkspace20210204==3.0.1 -
DLC SDK をインストールします。
pip install alibabacloud_pai_dlc20201203==1.4.17
ステップ 4:ジョブの送信
パブリックリソース
次のサンプルコードはジョブを作成・送信します。
サブスクリプションリソースクォータ
-
PAI コンソール にログインします。
-
ワークスペース ID を確認するには:左側のナビゲーションウィンドウで [ワークスペース] をクリックします。対象のワークスペースを見つけ、その名前の横にある ⓘ アイコンをクリックし、表示される情報カードから [ワークスペース ID] を表示・コピーします。
-
専用リソースグループのリソースクォータ ID を確認するには:左側のナビゲーションウィンドウで [AI コンピューティングリソース] > [リソースクォータ] を選択します。[汎用コンピューティングリソース] タブをクリックし、リソースクォータリストの [名前/ID] 列からクォータ ID を取得します。
-
次のコードを使用してジョブを作成・送信します。利用可能なパブリックイメージの一覧については、「ステップ 2:イメージの準備」をご参照ください。
from alibabacloud_pai_dlc20201203.client import Client from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.models import ( CreateJobRequest, JobSpec, ResourceConfig, GetJobRequest ) # Initialize a client to access the DLC API. region = 'cn-hangzhou' # An AccessKey pair provides full API access. For security purposes, we recommend that you use a RAM user for API access and daily O&M. # Do not hard-code your AccessKey ID and AccessKey secret in your code. This may lead to AccessKey leakage and compromise the security of all resources in your account. # This example shows how to use the Credentials SDK to read the AccessKey from environment variables for authentication. cred = CredClient() client = Client( config=Config( credential=cred, region_id=region, endpoint=f'pai-dlc.{region}.aliyuncs.com', ) ) # Declare the resource configuration for the job. For image selection, you can refer to the public image list in the documentation or provide your own image URL. spec = JobSpec( type='Worker', image=f'registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04', pod_count=1, resource_config=ResourceConfig(cpu='1', memory='2Gi') ) # Declare the job's execution details. req = CreateJobRequest( resource_id='<Replace with the ID of your resource quota>', workspace_id='<Replace with your WorkspaceID>', display_name='sample-dlc-job', job_type='TFJob', job_specs=[spec], user_command='echo "Hello World"', ) # Submit the job. response = client.create_job(req) # Get the job ID. job_id = response.body.job_id # Query the job status. job = client.get_job(job_id, GetJobRequest()).body print('job status:', job.status) # View the command executed by the job. job.user_command
スポットインスタンス
-
SpotDiscountLimit(スポット割引)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' # The ID of the region in which the DLC job resides, such as cn-hangzhou. cred = CredClient() workspace_id = '12****' # The ID of the workspace to which the DLC job belongs. dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotDiscountLimit": 0.4, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}') -
SpotPriceLimit(スポット価格)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' cred = CredClient() workspace_id = '12****' dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotPriceLimit": 0.011, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
次の表は主なパラメーターについて説明しています。
|
パラメーター |
説明 |
|
SpotStrategy |
入札ポリシーです。入札タイプパラメーターは、このパラメーターを SpotWithPriceLimit に設定した場合にのみ有効になります。 |
|
SpotDiscountLimit |
スポット割引入札タイプです。 説明
|
|
SpotPriceLimit |
スポット価格入札タイプです。 |
|
UserVpc |
Lingjun リソースを使用してジョブを送信する場合、このパラメーターは必須です。ジョブが存在するリージョンの VPC、vSwitch、セキュリティグループ ID を構成します。 |
CLI
手順 1: クライアントをダウンロードし、認証する
Linux(64 ビット)または macOS 用のクライアントツールをダウンロードし、認証を完了します。「準備事項」。
ステップ 2:ジョブの送信
-
PAI コンソール にログインします。
-
ワークスペース ID を確認するには:
左側のナビゲーションウィンドウで [ワークスペース] をクリックします。対象のワークスペースを見つけ、その名前の横にある ⓘ アイコンをクリックし、表示される情報カードで [ワークスペース ID] を確認します。
-
リソースクォータ ID を確認するには:
左側のナビゲーションウィンドウで [AI コンピューティングリソース] > [リソースクォータ] を選択します。対象のリソースタイプ(例:[汎用コンピューティングリソース])のタブを選択し、[名前/ID] 列からリソースクォータ ID を取得します。
-
次の内容で
tfjob.paramsという名前のパラメーターファイルを作成します。パラメーターファイルの詳細:「送信コマンド」。name=test_cli_tfjob_001 workers=1 worker_cpu=4 worker_gpu=0 worker_memory=4Gi worker_shared_memory=4Gi worker_image=registry-vpc.cn-beijing.aliyuncs.com/pai-dlc/tensorflow-training:1.12.2PAI-cpu-py27-ubuntu16.04 command=echo good && sleep 120 resource_id=<Replace with your resource quota ID> workspace_id=<Replace with your WorkspaceID> -
次のコマンドを実行して、'--job_file' パラメーターを使用してパラメーターファイルへのパスを指定し、DLC ジョブを指定されたワークスペースおよびリソースクォータに送信します。
./dlc submit tfjob --job_file ./tfjob.params -
送信した DLC ジョブを表示するには、次のコマンドを実行します。
./dlc get job <jobID>
詳細パラメーター
|
パラメーター |
サポートされるフレームワーク |
説明 |
値 |
|
|
ALL |
デフォルトでは、ジョブ完了後にすべての Pod リソースが解放されます。他にサポートされる唯一の値は 'pod-exit' で、これは Pod 終了時に直ちに Pod のリソースを解放します。 |
pod-exit |
|
|
ALL |
GPU ドライバーのロード時に IBGDA 機能を有効化するかどうかを指定します。 |
|
|
|
ALL |
GDRCopy カーネルモジュールをインストールするかどうかを指定します。(バージョン:2.4.4) |
|
|
|
ALL |
NUMA コアバインディングを有効化するかどうかを指定します。 |
|
|
|
ALL |
ジョブ送信時に、クォータ内の合計リソース(ノードスペック)がジョブ内のすべてのロールのスペックを満たせるかどうかをチェックするかどうかを指定します。 |
|
|
|
PyTorch |
ワーカー間のネットワーク通信を許可するかどうかを指定します。
この機能を有効化すると、各ワーカーのドメイン名はワーカー名と同じになります(例: |
|
|
|
PyTorch |
各ワーカーで開くネットワークポートを指定でき、 このパラメーターを構成しない場合、デフォルトでマスターワーカーのポート 23456 のみが開かれます。したがって、このカスタムポートリストにポート 23456 を含めないように注意してください。 重要
このパラメーターと |
セミコロンで区切られた文字列のセットで、各文字列はハイフンで接続されたポート番号またはポート範囲です(例: |
|
|
PyTorch |
各ワーカーに対していくつかのネットワークポートをリクエストでき、 この設定を構成しない場合、デフォルトでマスターノードのポート 23456 のみが開かれます。DLC は指定されたポート数に基づいてワーカーノードにランダムにポートを割り当てます。割り当てられたポート番号は 重要
|
65536 までの整数。 |
|
|
Ray |
フレームワークが Ray の場合、RayRuntimeEnv を手動で構成して実行環境を定義できます。 重要
この構成により、他の環境変数およびサードパーティ製ライブラリの設定がオーバーライドされます。 |
環境変数およびサードパーティ製ライブラリを構成( |
|
|
Ray |
外部 GCS Redis サーバーのアドレス。 |
文字列 |
|
|
Ray |
外部 GCS Redis サーバーのユーザー名。 |
文字列 |
|
|
Ray |
外部 GCS Redis サーバーのパスワード。 |
文字列 |
|
|
Ray |
サブミッターの再試行回数。 |
正の整数(int) |
|
|
Ray |
ノードの共有メモリを構成します。たとえば、各ノードに 1 GiB の共有メモリを構成する場合、次の構成を使用します。
|
正の整数(int) |
ボタンをクリックして入札方法を選択します。