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

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

最終更新日:Apr 08, 2026

コンソール、Python SDK、または CLI を使用して、DLC で単一ノードまたは分散トレーニングジョブを作成します。

クイックスタート

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

コンソールのパラメーター

基本情報

Job NameTag を設定します。

環境情報

パラメーター

説明

Image Configuration

Alibaba Cloud Image に加えて、次のイメージタイプが利用可能です:

  • Custom Image: PAI に追加されたカスタムイメージを使用します。イメージは Container Registry (ACR) またはパブリックプルが許可されているリポジトリに保存する必要があります。詳細については、「カスタムイメージ」をご参照ください。

    説明

    Lingjun AI コンピューティングリソースでカスタムイメージを使用する場合、高性能な RDMA ネットワークを利用するには RDMA を手動でインストールする必要があります。詳細については、「RDMA: 分散トレーニングに高性能ネットワークを使用する」をご参照ください。

  • Image Address: カスタムイメージまたは Alibaba Cloud イメージの URL を指定します。

    • プライベートイメージアドレスの場合、[ユーザー名とパスワードの入力] をクリックして、イメージリポジトリの認証情報を提供します。

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

Mount dataset

モデルトレーニング用のデータファイルをマウントします。サポートされているデータセットタイプ:

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

  • Public Dataset: PAI はパブリックデータセットを提供します。パブリックデータセットは読み取り専用です。

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

重要

CPFS データセットを使用する場合、DLC ジョブに VPC を設定する必要があります。VPC は CPFS ファイルシステムの VPC と一致する必要があります。そうでない場合、ジョブが準備中状態のままになる可能性があります。

Mount storage

データの読み取りや出力ファイルの保存のためにデータソースパスをマウントします。

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

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

詳細については、「DLC トレーニングジョブでクラウドストレージを使用する」をご参照ください。

Startup Command

ジョブの起動コマンド (シェルコマンドをサポート)。DLC は、MASTER_ADDRWORLD_SIZE などの PyTorch および TensorFlow の共通環境変数を自動的に挿入します。$variable_name 形式でアクセスします。一般的な起動コマンド:

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

  • torch マルチノード、マルチ 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 ファイルに追加し、コード設定、データセット、または直接マウントを使用してファイルを 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

    • 課金方法: 従量課金。

    • ユースケース: パブリックリソースはキューイング遅延が発生する可能性があります。少量で、時間に敏感でないジョブに適しています。

    • 制限: デフォルトのリソース制限は、ジョブあたり 2 GPU および 8 vCPU です。この制限を増やすには、ビジネス マネージャーにお問い合わせください。

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

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

    • ユースケース: 信頼性の高い実行が必要な大量のジョブに推奨されます。

    • 特定のパラメーター:

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

      • [優先度]: 同時実行ジョブの実行優先度。値は 1 から 9 までの整数です。値が小さいほど優先度が低くなります。

  • Preemptible Resources

    • 課金方法: 従量課金。

    • ユースケース: プリエンプティブルリソースを使用してコストを削減します。

    • 制限: 可用性は保証されません。リソースがすぐに利用できない場合や、回収される場合があります。詳細については、「プリエンプティブルジョブの使用」をご参照ください。

Framework

サポートされているディープラーニングトレーニングフレームワーク: TensorFlow、PyTorch、ElasticBatch、XGBoost、OneFlow、MPIJob、Ray。

説明

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 ジョブは復元できません。操作には十分ご注意ください。

Advanced Framework Configuration

サポートされているパラメーターと説明: 詳細パラメーターリスト

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

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

    重要

    Lingjun AI コンピューティングリソースはカスタムポートをサポートしていないため、これらのリソースを使用するジョブでは customPortNumPerWorker パラメーターは利用できません。

  • [フレームワーク]Ray の場合、次の追加パラメーターが利用可能です: RayRuntimeEnvRayRedisAddressRayRedisUsernameRayRedisPasswordRaySubmitterBackoffLimit、および RayObjectStoreMemoryBytes。注意: 環境変数とサードパーティライブラリの設定は、RayRuntimeEnv の設定によって上書きされます。

サポートされている設定形式:

  • プレーンテキスト: カンマで区切られた文字列のリストを入力します。各文字列は key=value 形式です。

  • JSON

典型的な設定シナリオ:

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

    詳細設定パラメーターを使用して、柔軟なトレーニング方法のために Worker 間のネットワーク通信を有効にします。たとえば、追加のオープンポートを使用して 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 がない場合、ジョブは帯域幅が制限されたパブリックゲートウェイを使用するため、ジョブの実行が遅くなったり失敗したりする可能性があります。

  • 対応する vSwitch とセキュリティグループを持つ VPC を設定して、ネットワーク帯域幅、安定性、セキュリティを向上させます。ジョブクラスターは VPC 内のサービスに直接アクセスできます。

    重要
    • VPC を使用する場合、リソースグループインスタンス、データセットストレージ (OSS)、およびコードリポジトリはすべて同じ VPC 内にある必要があります。

    • CPFS データセットの場合、ジョブが CPFS ファイルシステムと同じ VPC を使用するように設定します。そうでない場合、DLC トレーニングジョブが準備中状態のままになる可能性があります。

    • プリエンプティブルな Lingjun AI コンピューティングリソースを使用する DLC ジョブには VPC が必要です。

    Internet Access Gateway を設定します。2 つの方法がサポートされています:

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

パラメーター

説明

Automatic Fault Tolerance

Automatic Fault Tolerance を有効にして、アルゴリズムレベルのエラーを検出し処理し、GPU 使用率を向上させます。詳細については、「AIMaster: 弾力的な自動フォールトトレランスエンジン」をご参照ください。

説明

自動フォールトトレランスを有効にすると、ジョブと並行して実行される AIMaster インスタンスが起動し、次のリソースを消費します:

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

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

Sanity Check

Sanity Check を有効にして、トレーニングリソースのヘルスチェックを行います。障害のあるノードを自動的に隔離し、バックエンドの O&M をトリガーして、初期段階の障害を防ぎます。詳細については、「SanityCheck: コンピューティングリソースのヘルスチェック」をご参照ください。

説明

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

ロールと権限

インスタンスの RAM ロールを設定します。詳細については、「DLC RAM ロールの設定」をご参照ください。

インスタンス RAM ロール

説明

Default Role of PAI

詳細な MaxCompute および OSS 権限を持つ AliyunPAIDLCDefaultRole サービスリンクロールを使用します。一時的な認証情報は以下を許可します:

  • MaxCompute テーブルへのアクセスは、DLC インスタンス所有者と同じ権限を使用します。

  • OSS へのアクセスは、現在のワークスペースに設定されているデフォルトの OSS バケットに限定されます。

Custom Role

カスタム RAM ロールを選択または入力します。インスタンスは、STS の一時的な認証情報を使用して Alibaba Cloud サービスにアクセスする際に、このロールの権限を偽装します。

Does Not Associate Role

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

参考資料

付録

SDK または CLI を使用したジョブの作成

Python SDK

ステップ 1: Alibaba Cloud Credentials ツールのインストール

Alibaba Cloud SDK API 呼び出しの認証情報を設定するために、Credentials ツールをインストールします。前提条件:

  • Python 3.7 以降。

  • Alibaba Cloud SDK 2.0 以降。

pip install alibabacloud_credentials

ステップ 2: AccessKey の取得

この例では、AccessKey ペアを使用してアクセス認証情報を設定します。セキュリティリスクを軽減するため、AccessKey ID と AccessKey Secret を ALIBABA_CLOUD_ACCESS_KEY_ID および 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):
    '''NAS データセットを作成します。
    '''
    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):
    '''OSS データセットを作成します。
    '''
    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():

    # Alibaba Cloud アカウントが DLC の使用を承認されており、十分な権限を持っていることを確認してください。
    region_id = 'cn-hangzhou'
    # AccessKey は完全な API アクセスを提供します。セキュリティを向上させるため、API アクセスや日常の O&M には RAM ユーザーを使用することを推奨します。
    # AccessKey ID と AccessKey Secret をコードにハードコーディングしないでください。これにより、認証情報が漏洩し、リソースのセキュリティが損なわれる可能性があります。
    # この例では、Credentials SDK を使用して環境変数から AccessKey を読み取って認証します。
    cred = CredClient()

    # 1. クライアントの作成
    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 -----------')
    # ワークスペースリストを取得します。workspace_name パラメーターに作成したワークスペースの名前を入力することもできます。
    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 ------------')
    # イメージリストの取得
    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 ----------')
    # データセットの取得
    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:
        # データセットが存在しない場合は作成します。
        dataset_id = create_nas_dataset(
            client=workspace_client,
            region=region_id,
            workspace_id=workspace_id,
            name='example-nas-data',
            # NAS ファイルシステム ID。
            # 汎用 NAS: 31a8e4****。
            # エクストリーム NAS: extreme- で始まる必要があります (例: extreme-0015****)。
            # CPFS: cpfs- で始まる必要があります (例: 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 ----------')
    # コードソースリストの取得
    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 ----------')
    # DLC ノードスペックのリストを取得
    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 ----------')
    # DLC ジョブの作成
    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 ----------')
    # DLC ジョブリストの取得
    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 を見つけます。image.png

  3. 以下に示すように、専用リソースグループのリソースクォータ ID を見つけます。image

  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
    )
    
    # DLC API にアクセスするためのクライアントを初期化します。
    region = 'cn-hangzhou'
    # AccessKey は完全な API アクセスを提供します。セキュリティを向上させるため、API アクセスや日常の O&M には RAM ユーザーを使用することを推奨します。
    # AccessKey ID と AccessKey Secret をコードにハードコーディングしないでください。これにより、認証情報が漏洩し、リソースのセキュリティが損なわれる可能性があります。
    # この例では、Credentials SDK を使用して環境変数から AccessKey を読み取って認証します。
    cred = CredClient()
    client = Client(
        config=Config(
            credential=cred,
            region_id=region,
            endpoint=f'pai-dlc.{region}.aliyuncs.com',
        )
    )
    
    # ジョブのリソース設定を宣言します。イメージの選択については、ドキュメントのパブリックイメージリストを参照するか、独自のイメージ 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')
    )
    
    # ジョブを定義します。
    req = CreateJobRequest(
            resource_id='<リソースクォータ ID に置き換えてください>',
            workspace_id='<ワークスペース ID に置き換えてください>',
            display_name='sample-dlc-job',
            job_type='TFJob',
            job_specs=[spec],
            user_command='echo "Hello World"',
    )
    
    # ジョブを送信します。
    response = client.create_job(req)
    # ジョブ ID を取得します。
    job_id = response.body.job_id
    
    # ジョブのステータスを照会します。
    job = client.get_job(job_id, GetJobRequest()).body
    print('job status:', job.status)
    
    # ジョブのコマンドを表示します。
    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>'  # DLC ジョブが存在するリージョンの ID (例: cn-hangzhou)。 
    cred = CredClient()
    workspace_id = '12****'  # DLC ジョブが属するワークスペースの ID。 
    
    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

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

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

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

SpotPriceLimit

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

UserVpc

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

CLI

ステップ 1: クライアントのダウンロードと認証

Linux (64 ビット) または macOS 用のクライアントをダウンロードし、ユーザー認証を完了します。詳細については、「準備」をご参照ください。

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

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

  2. 以下に示すように、[ワークスペース] ページでワークスペース ID を見つけます。

    image.png

  3. 以下に示すように、リソースクォータ ID を見つけます。

    image

  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=<リソースクォータ ID に置き換えてください> 
    workspace_id=<ワークスペース ID に置き換えてください>
  5. 次のコマンドを実行して、パラメーターファイルを使用して指定されたワークスペースとリソースクォータに DLC ジョブを送信します。

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

    ./dlc get job <jobID>

詳細パラメーター

パラメーター (キー)

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

説明

ReleaseResourcePolicy

すべて

カスタムリソースリリース ポリシー。デフォルト: ジョブ完了後にすべての Pod リソースが解放されます。pod-exit に設定すると、その Pod が終了するとすぐに Pod のリソースが解放されます。

pod-exit

EnableNvidiaIBGDA

すべて

GPU ドライバーのロード時に IBGDA を有効または無効にします。

true または false

EnableNvidiaGDRCopy

すべて

true に設定すると、GDRCopy カーネルモジュール (バージョン 2.4.4) がインストールされます。

true または false

EnablePaiNUMACoreBinding

すべて

NUMA バインディングを有効または無効にします。

true または false

EnableResourcePreCheck

すべて

送信時に、クォータにジョブ内のすべてのロールに対して十分な合計リソース (ノード仕様) があるかどうかを確認します。

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 と相互排他的です。両方のパラメーターを同時に設定しないでください。

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

整数 (最大 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)