すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:トレーニングジョブの作成

最終更新日:Jun 04, 2026

PAI-DLC は Kubernetes 上でシングルノードまたは分散トレーニングジョブを作成し、インスタンスのプロビジョニングや環境構成を不要にします。複数のディープ ラーニングフレームワークと柔軟なリソース構成をサポートしています。

クイックスタート

MNIST を使用したシングル GPU またはマルチノード・マルチ GPU 分散トレーニングのウォークスルーについては、「分散トレーニング DLC クイックスタート」をご参照ください。

コンソールパラメーター

基本情報

Job Name および Tag を構成します。

環境情報

パラメーター

説明

Image Configuration

Alibaba Cloud Image を選択するほか、以下のイメージタイプを使用できます。

  • Custom Image:PAI に追加済みのカスタムイメージを使用できます。このイメージは Container Registry (ACR) またはパブリックにアクセス可能なリポジトリに格納されている必要があります。カスタムイメージ

    説明

    Lingjun AI コンピューティングリソースでカスタムイメージを使用する場合、高性能 RDMA ネットワークをフル活用するために、手動で RDMA をインストールする必要があります。RDMA:分散トレーニング向けの高性能ネットワークの利用

  • Image Address:インターネット経由でアクセス可能なカスタムイメージまたは公式イメージの URL を指定します。

    • プライベートイメージの URL を使用する場合は、[ユーザー名とパスワードを入力] をクリックし、リポジトリのユーザー名とパスワードを入力します。

    • イメージプルを高速化する方法については、「イメージ高速化」をご参照ください。

Mount dataset

データセットはモデルトレーニングに必要なデータファイルを提供します。PAI では次の 2 種類のデータセットがサポートされています。

  • Custom Dataset:トレーニングデータを保存するためのカスタムデータセットを作成できます。データセットを 読み取り専用 に設定し、バージョンリストからデータセットのバージョンを選択できます。

  • Public Dataset:PAI が提供するパブリックデータセットです。読み取り専用マウントモードのみがサポートされています。

Mount Path:DLC コンテナ内でデータセットがマウントされるパス(例:/mnt/data)。コード内ではこのパスからデータセットにアクセスできます。マウント構成の詳細については、「クラウドストレージの利用」をご参照ください。

重要

CPFS データセットを構成する場合、DLC の VPC を構成し、その VPC が CPFS ファイルシステムの VPC と同じであることを確認してください。そうしないと、送信されたジョブが「準備中」状態のまま長時間停止する可能性があります。

Mount storage

データの読み取りや中間ファイル・結果の保存のために、データソースパスをマウントすることもできます。

  • サポートされるデータソースタイプ:Object Storage Service (OSS)、汎用 NAS、エクストリーム NAS、CPFS、および BMCPFS(Lingjun AI コンピューティングリソースでのみ利用可能)。

  • Advanced Settings:詳細設定を使用して、さまざまなデータソースタイプ向けの特定機能を有効化できます。例:

    • OSS:詳細設定で {"mountType":"ossfs"} を設定すると、ossfs を使用して OSS ストレージをマウントできます。

    • 汎用 NAS および CPFS:詳細設定で nconnect パラメーターを設定すると、DLC コンテナが NAS にアクセスする際のスループットを向上できます。詳細については、「Linux OS から NAS にアクセスする際にパフォーマンスが低下する問題の解決方法」をご参照ください。例:{"nconnect":"<example_value>"}。<example_value> は正の整数に置き換えてください。

クラウドストレージの利用」。

Startup Command

ジョブの起動コマンドを設定します。シェルコマンドがサポートされています。DLC は自動的に PyTorch および TensorFlow 向けの共通環境変数(例:MASTER_ADDRWORLD_SIZE)を注入します。$variable_name 形式でこれらにアクセスできます。以下に一般的な起動コマンドの例を示します。

  • Python の実行python -c "print('Hello World')"

  • PyTorch マルチノード・マルチ GPU 分散トレーニング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

  • シェルファイルパスを起動コマンドとして設定/ml/input/config/launch.sh

詳細設定

Environment Variable

PyTorch および TensorFlow 向けの共通環境変数に加え、Key:Value 形式でカスタム環境変数を指定できます。最大 20 個の環境変数がサポートされています。

Third-party Libraries

構成済みのコンテナイメージにサードパーティ製ライブラリが不足している場合、Third-party Libraries セクションで追加できます。次の 2 つの方法がサポートされています。

  • Select from List:テキストボックスにサードパーティ製ライブラリの名前を入力します。

  • Directory of requirements.txt:サードパーティ製ライブラリを requirements.txt ファイルに追加し、Code Builds、データセット、または直接マウントによりファイルを DLC コンテナにアップロードしてから、コンテナ内のファイルパスを指定します。

Code Builds

トレーニングコードを DLC コンテナにアップロードします。次の 2 つの方法がサポートされています。

  • Online configuration:Git リポジトリにアクセスできる場合、コードソースを作成してリポジトリを関連付けることで、DLC がジョブコードを取得できるようにします。

  • Local Uploadimage.png ボタンをクリックしてローカルのコードファイルをアップロードします。アップロード完了後、Mount path をコンテナ内の指定パス(例:/mnt/data)に設定します。

リソース情報

パラメーター

説明

Resource Type

デフォルト値は General Computing です。Lingjun Intelligence Resources は以下のリージョンで利用可能です:中国 (ウランチャブ)、シンガポール、中国 (深セン)、中国 (北京)、中国 (上海)、中国 (杭州)、中国 (広州)、中国 (香港)、マレーシア (クアラルンプール)、ドイツ (フランクフルト)、アトランタ。

Source

  • Public Resources

    • 課金方法:従量課金。

    • シナリオ:小規模で時間に余裕のあるジョブに最適です。キュー待ちによる遅延が発生する場合があります。

    • 制限事項:GPU 2 枚、CPU コア 8 個まで。上限を引き上げるには営業担当者にお問い合わせください。

  • Resource Quota:汎用コンピューティングリソースまたは Lingjun AI コンピューティングリソースを含みます。

    • 課金方法:サブスクリプション。

    • シナリオ:信頼性の高い実行が必要な大規模ジョブに推奨されます。

    • 具体的なパラメーター:

      • Resource Quota:GPU や CPU などのリソース数を設定できます。リソースクォータを作成する方法については、「リソースクォータの追加」をご参照ください。

      • 優先度:同時実行ジョブの実行優先度です。値は 1~9 の整数で、1 が最低優先度です。

    • 事前チェック:ジョブ開始前にリソースと公式イメージの互換性を検証し、構成エラーによる失敗を防止します。

  • Preemptible Resources

    • 課金方法:従量課金。

    • シナリオ:割引価格のリソースでコストを削減できます。

    • 制限事項:リソースの可用性は保証されません。即時利用できない場合や回収される場合があります。「プリエンプティブルジョブの利用」。

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 ロールをカスタマイズし、異種リソース上でジョブを実行できます。

  • パブリックリソースの利用:次のパラメーターを構成できます。

    • Number of Nodes:DLC ジョブのノード数です。

    • Resource Type:リソース仕様を選択します。コンソールに該当する料金が表示されます。課金の詳細については、「DLC 課金」をご参照ください。

  • リソースクォータの利用:各ノードタイプごとにノード数、CPU(コア数)、GPU(枚数)、メモリ(GiB)、共有メモリ(GiB)を構成できます。また、次のパラメーターも構成できます。

    • Node-Specific Scheduling:ジョブを指定されたコンピュートノード上で実行できます。

    • Idle Resources:他のクォータのアイドルリソース上でジョブを実行し、リソース利用率を向上させます。元のクォータがこれらのリソースを必要とした場合、ジョブは終了され、リソースは自動的に返却されます。「アイドルリソースの利用」。

    • CPU Affinity:コンテナまたは Pod 内のプロセスを特定の CPU コアにバインドし、キャッシュミスやコンテキストスイッチを削減します。パフォーマンスに敏感なワークロードやリアルタイムワークロードに適しています。

  • プリエンプティブルリソースの利用:ノード数およびリソース仕様に加え、Bid Price パラメーターを構成できます。これはプリエンプティブルリソースのリクエスト時の最大価格を設定します。image ボタンをクリックして入札方法を選択します。

    • 割引率ベース:最大入札価格はリソース仕様の市場価格に基づき、10%~90%オフの離散的な割引オプションが提供されます。これは入札の上限を示します。最大入札価格が市場価格以上で在庫が十分な場合、プリエンプティブルリソースをリクエストできます。

    • 価格ベース:最大入札価格は市場価格の範囲内に設定されます。

詳細設定

Maximum Duration

ジョブの最大実行時間です。この時間を超過したジョブは停止されます。デフォルト:30 日。

Retention Period

完了したジョブの保持期間です。保持中のジョブは引き続きリソースを占有し、期限切れ後に削除されます。

重要

削除された DLC ジョブは復元できません。慎重に操作してください。

Start Developer Machine

リソースソースがリソースクォータの場合、オンラインデバッグ用に開発者マシン(DSW)を起動できます。ジョブ概要ページのインスタンスリストで、[操作] 列の 開発者マシン (DSW) をクリックします。

Advanced Framework Configuration

サポートされるパラメーターの一覧と説明については、「詳細パラメーター一覧」をご参照ください。

  • パラメーター ReleaseResourcePolicyEnableNvidiaIBGDAEnableNvidiaGDRCopyEnablePaiNUMACoreBinding、および EnableResourcePreCheck はすべてのフレームワークでサポートされています。

  • フレームワークPyTorch の場合、次のパラメーターが利用可能です:createSvcForAllWorkerscustomPortList、および customPortNumPerWorker

    重要

    Lingjun AI コンピューティングリソースはカスタムポート機能を提供しません。そのため、Lingjun AI コンピューティングリソースを使用する DLC ジョブを送信する際は、customPortNumPerWorker パラメーターを構成できません。

  • フレームワークRay の場合、次のパラメーターが利用可能です:RayRuntimeEnvRayRedisAddressRayRedisUsernameRayRedisPasswordRaySubmitterBackoffLimit、および RayObjectStoreMemoryBytes。注:RayRuntimeEnv 構成により、環境変数およびサードパーティ製ライブラリの構成がオーバーライドされます。

次の構成フォーマットがサポートされています。

  • プレーンテキスト:カンマ区切りの文字列リストを入力します。各文字列は key=value 形式です。キーはサポートされる詳細パラメーター、値はそのパラメーターの値です。

  • JSON

典型的な構成シナリオ:

  • シナリオ 1:PyTorch 詳細設定

    ワーカー間のネットワーク通信を有効にするために詳細設定パラメーターを使用します。たとえば、DLC コンテナ内で Ray などのフレームワークを起動し、PyTorch と連携して高度な分散トレーニングを行うために、追加ポートを開きます。サンプル構成:

    createSvcForAllWorkers=true,customPortNumPerWorker=100

    次に、Startup Command で、$JOB_NAME および $CUSTOM_PORTS 環境変数を使用して、Ray などのフレームワークを起動・接続するためのドメイン名および利用可能なポート番号を取得できます。

  • シナリオ 2:Ray フレームワーク向けの RayRuntimeEnv の手動構成(依存ライブラリおよび環境変数を含む)

    サンプル構成:

    {"RayRuntimeEnv": "{pip: requirements.txt, env_vars: {key: value}}"}
  • シナリオ 3:カスタムリソースリリースルール

    現在、pod-exit リリースポリシーのみがサポートされています。これは、Pod が終了した時点で自動的にリソースを解放します。サンプル構成:

    {
      "ReleaseResourcePolicy": "pod-exit"
    }

VPC 構成

  • VPC を構成しない場合、ジョブは帯域幅が制限されたパブリックゲートウェイを使用するため、ジョブが遅延したり失敗したりする可能性があります。

  • VPC、vSwitch、セキュリティグループを構成することで、帯域幅、安定性、セキュリティを向上させられます。ジョブクラスターは VPC 内のサービスに直接アクセスできます。

    重要
    • VPC を使用する場合、ジョブのリソースグループインスタンスおよびデータセットストレージ(OSS)が同一リージョンの VPC 内にあり、VPC がコードリポジトリのネットワークに接続されていることを確認してください。

    • CPFS データセットを使用する場合、VPC を構成し、選択した VPC が CPFS ファイルシステムの VPC と同じであることを確認してください。そうしないと、送信された DLC トレーニングジョブが「準備中」状態のまま長時間停止する可能性があります。

    • プリエンプティブル Lingjun AI コンピューティングリソースを使用する DLC ジョブを送信する際は、VPC を構成する必要があります。

    次のいずれかの方法で Internet Access Gateway を構成することもできます。

フォールトトレランスと診断

パラメーター

説明

Automatic Fault Tolerance

Automatic Fault Tolerance を有効化し、必要なパラメーターを構成することで、アルゴリズムレベルのエラーを検出し軽減し、GPU 使用率を向上させます。「AIMaster:弾力性のある自動耐障害性エンジン」。

説明

自動フォールトトレランスを有効化すると、AIMaster インスタンスが起動し、ジョブインスタンスとともに実行されます。これにより、一定量のコンピューティングリソースが消費されます。AIMaster インスタンスは次のリソースを使用します。

  • リソースクォータ:CPU コア 1 個、メモリ 1 GiB。

  • パブリックリソース:ecs.c6.large 仕様を使用。

Sanity Check

Sanity Check を有効化することで、トレーニングリソースを包括的にチェックし、障害のあるノードを隔離してバックエンドの自動 O&M プロセスをトリガーします。これにより、初期段階の失敗を削減し、成功率を向上させます。「SanityCheck:コンピュートリソースヘルスチェック」。

説明

ヘルスチェック機能は、Lingjun AI コンピューティングリソースクォータを使用して送信された GPU 数が 0 より大きい PyTorch トレーニングジョブでのみサポートされています。

ロールと権限

インスタンス RAM ロールの構成。「DLC RAM ロールの構成」。

インスタンス RAM ロール

説明

Default Role of PAI

PAI デフォルトロールは STS 一時認証情報経由で次の権限を付与します。

  • MaxCompute テーブルにアクセスする場合、DLC インスタンス所有者 と同等の権限を持ちます。

  • OSS にアクセスする場合、現在のワークスペース用に構成されたデフォルト OSS バケットにのみアクセスできます。

Custom Role

カスタム RAM ロールを選択するか、入力します。インスタンスは、STS 一時認証情報を介してクラウドサービスにアクセスする際に、このロールの権限を偽装します。

Does Not Associate Role

DLC ジョブに関連付けられた RAM ロールはありません。これがデフォルトのオプションです。

関連トピック

付録

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 です。

ステップ 3:Python SDK のインストール

  • ワークスペース SDK をインストールします。

    pip install alibabacloud_aiworkspace20210204==3.0.1
  • DLC SDK をインストールします。

    pip install alibabacloud_pai_dlc20201203==1.4.17

ステップ 4:ジョブの送信

パブリックリソース

次のサンプルコードはジョブを作成・送信します。

ジョブの作成・送信のサンプルコード

#!/usr/bin/env python3

from __future__ import print_function

import json
import time

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 (
    ListJobsRequest,
    ListEcsSpecsRequest,
    CreateJobRequest,
    GetJobRequest,
)

from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import (
    ListWorkspacesRequest,
    CreateDatasetRequest,
    ListDatasetsRequest,
    ListImagesRequest,
    ListCodeSourcesRequest
)

def create_nas_dataset(client, region, workspace_id, name,
                       nas_id, nas_path, mount_path):
    '''Create a NAS dataset.
    '''
    response = client.create_dataset(CreateDatasetRequest(
        workspace_id=workspace_id,
        name=name,
        data_type='COMMON',
        data_source_type='NAS',
        property='DIRECTORY',
        uri=f'nas://{nas_id}.{region}{nas_path}',
        accessibility='PRIVATE',
        source_type='USER',
        options=json.dumps({
            'mountPath': mount_path
        })
    ))
    return response.body.dataset_id

def create_oss_dataset(client, region, workspace_id, name,
                       oss_bucket, oss_endpoint, oss_path, mount_path):
    '''Create an OSS dataset.
    '''
    response = client.create_dataset(CreateDatasetRequest(
        workspace_id=workspace_id,
        name=name,
        data_type='COMMON',
        data_source_type='OSS',
        property='DIRECTORY',
        uri=f'oss://{oss_bucket}.{oss_endpoint}{oss_path}',
        accessibility='PRIVATE',
        source_type='USER',
        options=json.dumps({
            'mountPath': mount_path
        })
    ))
    return response.body.dataset_id

def wait_for_job_to_terminate(client, job_id):
    while True:
        job = client.get_job(job_id, GetJobRequest()).body
        print('job({}) is {}'.format(job_id, job.status))
        if job.status in ('Succeeded', 'Failed', 'Stopped'):
            return job.status
        time.sleep(5)
    return None

def main():

    # Make sure that your Alibaba Cloud account is authorized to use DLC and has sufficient permissions.
    region_id = '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()

    # 1. Create clients;
    workspace_client = AIWorkspaceClient(
        config=Config(
            credential=cred,
            region_id=region_id,
            endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
        )
    )

    dlc_client = DLCClient(
         config=Config(
            credential=cred,
            region_id=region_id,
            endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id),
         )
    )

    print('------- Workspaces -----------')
    # Obtain the list of workspaces. You can also specify your workspace name in the workspace_name parameter.
    workspaces = workspace_client.list_workspaces(ListWorkspacesRequest(
        page_number=1, page_size=1, workspace_name='',
        module_list='PAI'
    ))
    for workspace in workspaces.body.workspaces:
        print(workspace.workspace_name, workspace.workspace_id,
              workspace.status, workspace.creator)

    if len(workspaces.body.workspaces) == 0:
        raise RuntimeError('found no workspaces')

    workspace_id = workspaces.body.workspaces[0].workspace_id

    print('------- Images ------------')
    # Obtain the list of images.
    images = workspace_client.list_images(ListImagesRequest(
        labels=','.join(['system.supported.dlc=true',
                         'system.framework=Tensorflow 1.15',
                         'system.pythonVersion=3.6',
                         'system.chipType=CPU'])))
    for image in images.body.images:
        print(json.dumps(image.to_map(), indent=2))

    image_uri = images.body.images[0].image_uri

    print('------- Datasets ----------')
    # Obtain the datasets.
    datasets = workspace_client.list_datasets(ListDatasetsRequest(
        workspace_id=workspace_id,
        name='example-nas-data', properties='DIRECTORY'))
    for dataset in datasets.body.datasets:
        print(dataset.name, dataset.dataset_id, dataset.uri, dataset.options)

    if len(datasets.body.datasets) == 0:
        # If the dataset does not exist, create one.
        dataset_id = create_nas_dataset(
            client=workspace_client,
            region=region_id,
            workspace_id=workspace_id,
            name='example-nas-data',
            # The ID of the NAS file system.
            # General-purpose NAS: 31a8e4****.
            # Extreme NAS: Must start with extreme-, for example, extreme-0015****.
            # CPFS: Must start with cpfs-, for example, cpfs-125487****.
            nas_id='***',
            nas_path='/',
            mount_path='/mnt/data/nas')
        print('create dataset with id: {}'.format(dataset_id))
    else:
        dataset_id = datasets.body.datasets[0].dataset_id

    print('------- Code Sources ----------')
    # Obtain the list of code sources.
    code_sources = workspace_client.list_code_sources(ListCodeSourcesRequest(
        workspace_id=workspace_id))
    for code_source in code_sources.body.code_sources:
        print(code_source.display_name, code_source.code_source_id, code_source.code_repo)

    print('-------- ECS SPECS ----------')
    # Obtain the list of DLC node specifications.
    ecs_specs = dlc_client.list_ecs_specs(ListEcsSpecsRequest(page_size=100, sort_by='Memory', order='asc'))
    for spec in ecs_specs.body.ecs_specs:
        print(spec.instance_type, spec.cpu, spec.memory, spec.memory, spec.gpu_type)

    print('-------- Create Job ----------')
    # Create a DLC job.
    create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({
        'WorkspaceId': workspace_id,
        'DisplayName': 'sample-dlc-job',
        'JobType': 'TFJob',
        'JobSpecs': [
            {
                "Type": "Worker",
                "Image": image_uri,
                "PodCount": 1,
                "EcsSpec": ecs_specs.body.ecs_specs[0].instance_type,
            },
        ],
        "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'",
        'DataSources': [
            {
                "DataSourceId": dataset_id,
            },
        ],
    }))
    job_id = create_job_resp.body.job_id

    wait_for_job_to_terminate(dlc_client, job_id)

    print('-------- List Jobs ----------')
    # Obtain the list of DLC jobs.
    jobs = dlc_client.list_jobs(ListJobsRequest(
        workspace_id=workspace_id,
        page_number=1,
        page_size=10,
    ))
    for job in jobs.body.jobs:
        print(job.display_name, job.job_id, job.workspace_name,
              job.status, job.job_type)
    pass

if __name__ == '__main__':
    main()

サブスクリプションリソースクォータ

  1. PAI コンソール にログインします。

  2. ワークスペース ID を確認するには:左側のナビゲーションウィンドウで [ワークスペース] をクリックします。対象のワークスペースを見つけ、その名前の横にある ⓘ アイコンをクリックし、表示される情報カードから [ワークスペース ID] を表示・コピーします。

  3. 専用リソースグループのリソースクォータ ID を確認するには:左側のナビゲーションウィンドウで [AI コンピューティングリソース][リソースクォータ] を選択します。[汎用コンピューティングリソース] タブをクリックし、リソースクォータリストの [名前/ID] 列からクォータ ID を取得します。

  4. 次のコードを使用してジョブを作成・送信します。利用可能なパブリックイメージの一覧については、「ステップ 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

スポット割引入札タイプです。

説明
  • SpotDiscountLimit パラメーターと SpotPriceLimit パラメーターを同時に指定することはできません。

  • SpotDiscountLimit パラメーターは Lingjun リソースでのみ有効です。

SpotPriceLimit

スポット価格入札タイプです。

UserVpc

Lingjun リソースを使用してジョブを送信する場合、このパラメーターは必須です。ジョブが存在するリージョンの VPC、vSwitch、セキュリティグループ ID を構成します。

CLI

手順 1: クライアントをダウンロードし、認証する

Linux(64 ビット)または macOS 用のクライアントツールをダウンロードし、認証を完了します。「準備事項」。

ステップ 2:ジョブの送信

  1. PAI コンソール にログインします。

  2. ワークスペース ID を確認するには:

    左側のナビゲーションウィンドウで [ワークスペース] をクリックします。対象のワークスペースを見つけ、その名前の横にある ⓘ アイコンをクリックし、表示される情報カードで [ワークスペース ID] を確認します。

  3. リソースクォータ ID を確認するには:

    左側のナビゲーションウィンドウで [AI コンピューティングリソース][リソースクォータ] を選択します。対象のリソースタイプ(例:[汎用コンピューティングリソース])のタブを選択し、[名前/ID] 列からリソースクォータ ID を取得します。

  4. 次の内容で 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>
  5. 次のコマンドを実行して、'--job_file' パラメーターを使用してパラメーターファイルへのパスを指定し、DLC ジョブを指定されたワークスペースおよびリソースクォータに送信します。

    ./dlc submit tfjob --job_file  ./tfjob.params
  6. 送信した DLC ジョブを表示するには、次のコマンドを実行します。

    ./dlc get job <jobID>

詳細パラメーター

パラメーター

サポートされるフレームワーク

説明

ReleaseResourcePolicy

ALL

デフォルトでは、ジョブ完了後にすべての Pod リソースが解放されます。他にサポートされる唯一の値は 'pod-exit' で、これは Pod 終了時に直ちに Pod のリソースを解放します。

pod-exit

EnableNvidiaIBGDA

ALL

GPU ドライバーのロード時に IBGDA 機能を有効化するかどうかを指定します。

true または false

EnableNvidiaGDRCopy

ALL

GDRCopy カーネルモジュールをインストールするかどうかを指定します。(バージョン:2.4.4)

true または false

EnablePaiNUMACoreBinding

ALL

NUMA コアバインディングを有効化するかどうかを指定します。

true または false

EnableResourcePreCheck

ALL

ジョブ送信時に、クォータ内の合計リソース(ノードスペック)がジョブ内のすべてのロールのスペックを満たせるかどうかをチェックするかどうかを指定します。

true または false

createSvcForAllWorkers

PyTorch

ワーカー間のネットワーク通信を許可するかどうかを指定します。

  • true に設定すると、すべての PyTorch ワーカー間でネットワーク通信が許可されます。

  • 値が false または未構成の場合、デフォルトではマスターのみがアクセス可能です。

この機能を有効化すると、各ワーカーのドメイン名はワーカー名と同じになります(例:dlcxxxxx-master-0)。ジョブ名(例:dlcxxxxx)は JOB_NAME 環境変数を通じてワーカーに渡されます。これにより、アクセスしたい特定のワーカーのドメイン名を特定できます。

true または false

customPortList

PyTorch

各ワーカーで開くネットワークポートを指定でき、createSvcForAllWorkers と組み合わせてワーカー間のネットワーク通信を有効化できます。

このパラメーターを構成しない場合、デフォルトでマスターワーカーのポート 23456 のみが開かれます。したがって、このカスタムポートリストにポート 23456 を含めないように注意してください。

重要

このパラメーターと customPortNumPerWorker は相互排他であり、同時に設定してはなりません。

セミコロンで区切られた文字列のセットで、各文字列はハイフンで接続されたポート番号またはポート範囲です(例:10000;10001-10010(10000 から 10010 までの連続する 11 個のポート番号を表します))。

customPortNumPerWorker

PyTorch

各ワーカーに対していくつかのネットワークポートをリクエストでき、createSvcForAllWorkers と組み合わせてワーカー間のネットワーク通信を有効化できます。

この設定を構成しない場合、デフォルトでマスターノードのポート 23456 のみが開かれます。DLC は指定されたポート数に基づいてワーカーノードにランダムにポートを割り当てます。割り当てられたポート番号は CUSTOM_PORTS 環境変数を通じてワーカーノードに渡され、これを照会できます。この変数の値はセミコロン区切りのポート番号リストです。

重要
  • このパラメーターと customPortList は相互排他です。同時に設定しないでください。

  • Lingjun AI コンピューティングサービスリソースはカスタムポート機能を提供しません。したがって、Lingjun AI コンピューティングサービスリソースを使用する DLC ジョブを送信する際は、customPortNumPerWorker パラメーターはサポートされません。

65536 までの整数。

RayRuntimeEnv

Ray

フレームワークが Ray の場合、RayRuntimeEnv を手動で構成して実行環境を定義できます。

重要

この構成により、他の環境変数およびサードパーティ製ライブラリの設定がオーバーライドされます。

環境変数およびサードパーティ製ライブラリを構成({pip: requirements.txt, env_vars: {key: value}}

RayRedisAddress

Ray

外部 GCS Redis サーバーのアドレス。

文字列

RayRedisUsername

Ray

外部 GCS Redis サーバーのユーザー名。

文字列

RayRedisPassword

Ray

外部 GCS Redis サーバーのパスワード。

文字列

RaySubmitterBackoffLimit

Ray

サブミッターの再試行回数。

正の整数(int)

RayObjectStoreMemoryBytes

Ray

ノードの共有メモリを構成します。たとえば、各ノードに 1 GiB の共有メモリを構成する場合、次の構成を使用します。

{
  "RayObjectStoreMemoryBytes": "1073741824"
}

正の整数(int)