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

Platform For AI:トレーニングジョブの送信

最終更新日:Jul 07, 2025

Platform for AI(PAI)コンソールの Deep Learning Containers(DLC)を使用すると、スタンドアロンまたは分散トレーニングジョブをすばやく作成できます。計算ノードは、DLC の基盤となるレイヤーの Kubernetes によって自動的に起動されます。この方法では、インスタンスを手動で購入して環境を構成する必要がなく、使用方法の習慣は変わりません。 DLC は、トレーニングジョブの迅速な起動、さまざまな深層学習フレームワークのサポートを必要とするユーザーに適しており、柔軟なリソース構成を提供します。

前提条件

  • Alibaba Cloud アカウントを使用してPAI がアクティブ化され、ワークスペースが作成されている。 PAI をアクティブ化するには、PAI コンソールにログインし、上部のナビゲーションバーでリージョンを選択し、承認後に[アクティブ化]をクリックします。

  • 操作を実行するために使用するアカウントには、必要な権限が付与されています。 Alibaba Cloud アカウントを使用する場合、この前提条件は無視できます。 RAM ユーザーを使用する場合は、次のいずれかのロールを RAM ユーザーに割り当てる必要があります。アルゴリズム開発者、アルゴリズム O&M エンジニア、ワークスペース管理者。

PAI コンソールでジョブを送信する

DLC を初めて使用する場合は、PAI コンソールでジョブを送信することをお勧めします。 SDK for Python またはコマンドラインを使用してジョブを送信することもできます。

  1. [ジョブの作成] ページに移動します。

    1. PAI コンソールにログインし、ターゲットリージョンとワークスペースを選択して、[Deep Learning Containers (DLC) に入る] をクリックします。

    2. [Deep Learning Containers (DLC)] ページで、[ジョブの作成] をクリックします。

  2. 以下のセクションのパラメーターを構成します。

    • 基本情報

      このセクションでは、[ジョブ名] パラメーターと [タグ] パラメーターを構成します。

    • 環境情報

      パラメーター

      説明

      ノードイメージ

      [Alibaba Cloud イメージ] を選択できます。 また、次の値のいずれかを選択することもできます。

      • [カスタムイメージ]: PAI にアップロードした カスタムイメージ。 イメージリポジトリからイメージをプルできること、またはイメージが Container Registry Enterprise Edition インスタンスに保存されていることを確認する必要があります。

        説明
      • [イメージアドレス]: インターネット経由でアクセスできるカスタムイメージまたは Alibaba Cloud イメージのアドレス。

        • プライベートイメージアドレスを入力する場合は、[ユーザー名とパスワードを入力] をクリックし、[ユーザー名] パラメーターと [パスワード] パラメーターを指定して、プライベートイメージリポジトリに対する権限を付与します。

        • PAI で高速イメージを使用することもできます。

      データセット

      モデルのトレーニングに必要なデータファイルを提供するデータセット。 次のデータセットタイプのいずれかを使用できます。

      • [カスタムデータセット]: カスタムデータセットを作成することで、モデルのトレーニングに必要なデータファイルを保存します。 [バージョン] パネルで、[読み取り/書き込み権限] パラメーターを構成し、必要なバージョンを選択できます。

      • [パブリックデータセット]: PAI が提供する既存のパブリックデータセットを選択します。 パブリックデータセットは読み取り専用マウントのみをサポートします。

      マウントパス: DLC コンテナー内のパス(例: /mnt/data)。 指定したマウントパスに基づいて、コマンドを実行してデータセットをクエリできます。 マウント構成の詳細については、「DLC トレーニングジョブにクラウドストレージを使用する」をご参照ください。

      重要

      CPFS(Cloud Parallel File Storage)データセットを選択した場合は、DLC ジョブ用に VPC(仮想プライベートクラウド)を構成する必要があります。 VPC は、CPFS データセット用に構成された VPC と同じである必要があります。 そうしないと、ジョブが環境準備状態のまま長時間留まる可能性があります。

      直接マウント

      データソースを直接マウントしてデータを読み取ったり、プロシージャファイルと結果ファイルを保存したりできます。

      • 前提条件

      • [詳細設定]: 特定の機能を実装するために、さまざまなデータソースに対してこのパラメーターを構成できます。 例:

        • OSS: 詳細設定で {"mountType":"ossfs"} 構成を追加して、ossfs を使用して OSS バケットをマウントできます。

        • 汎用 NAS および CPFS: 詳細設定で nconnect パラメーターを指定して、DLC コンテナーでの NAS アクセスのスループットを向上させることができます。 設定例: {"nconnect":"<サンプル値>"}。 <サンプル値> を正の整数に置き換えます。

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

      起動コマンド

      ジョブが実行するコマンド。 シェルコマンドがサポートされています。 DLC は、MASTER_ADDRWORLD_SIZE など、PyTorch および TensorFlow の一般的な環境変数を自動的に挿入します。 変数は $環境変数名 を使用して取得できます。 コマンド例:

      • 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

      [詳細を表示] をクリックして、環境変数、サードパーティライブラリ、およびコードビルドを構成します

      環境変数

      自動的に挿入される PyTorch および TensorFlow の一般的な環境変数 に加えて、カスタム環境変数を指定できます。フォーマットは Key:Value です。最大 20 個の環境変数を設定できます。

      サードパーティライブラリ

      構成されたコンテナーイメージに特定のサードパーティライブラリが存在しない場合は、[サードパーティライブラリ] パラメーターを構成してサードパーティライブラリを追加できます。 次のメソッドがサポートされています。

      • [リストから選択]: フィールドにサードパーティライブラリの名前を入力します。

      • [requirements.txt のディレクトリ]: コード、データセット、または直接マウントを使用して、requirements.txt ファイルを DLC コンテナーにアップロードする必要があります。 次に、フィールドに DLC コンテナー内の requirements.txt ファイルのパスを入力します。

      コードビルド

      トレーニングに必要なコードビルドを DLC コンテナーにアップロードする必要があります。 有効な値:

      • [オンライン構成]: Git リポジトリへのアクセス権限がある場合は、コードビルドを作成することで、リポジトリを DLC ジョブに関連付けます。 この方法では、DLC ジョブはコードビルドを使用できます。

      • [ローカルアップロード]: image.png アイコンをクリックして、ローカルコードビルドをアップロードします。 アップロードが成功したら、[マウントパス] パラメーターをコンテナーの指定されたパス(例: /mnt/data)に設定します。

    • リソース情報

      パラメーター

      説明

      リソースタイプ

      リソースタイプ。 デフォルト値: [汎用計算リソース][凌雲リソース] は、中国 (ウランチャブ)、シンガポール、中国 (深セン)、中国 (北京)、中国 (上海)、中国 (杭州) リージョンでのみ選択できます。

      ソース

      • [パブリックリソース]:

        • 課金方法:従量課金制。

        • シナリオ: パブリックリソースで実行されるトレーニングジョブでは、キューイングの遅延が発生する可能性があります。 少数のジョブを含む時間依存ではないシナリオでは、パブリックリソースを使用することをお勧めします。

        • 制限: パブリックリソースは、最大 2 つの GPU と 8 つの vCPU を提供できます。 リソースクォータを増やすには、営業担当者にお問い合わせください。

      • [リソースクォータ]: 汎用計算リソースと凌雲リソースが含まれます。

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

        • シナリオ: リソースクォータは、高い保証が必要で、多数のジョブが関係するシナリオに適しています。

        • 特別なパラメーター:

          • [リソースクォータ]: GPU、vCPU、およびその他のリソースの数を指定します。 詳細については、「リソースクォータを作成する」をご参照ください。

          • [優先度]: ジョブを実行するための優先度を指定します。 有効な値: 1 ~ 9。 値が大きいほど、優先度が高くなります。

      • [プリエンプティブルリソース]:

        • 課金方法:従量課金制。

        • シナリオ: プリエンプティブルリソースは、コスト削減が必要なシナリオに適しています。 ほとんどの場合、プリエンプティブルリソースは追加の割引を提供します。

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

      フレームワーク

      深層学習トレーニングフレームワークとツール。 有効な値: Tensorflow、PyTorch、ElasticBatch、XGBoost、OneFlow、MPIJob、Ray。

      説明

      [リソースクォータ] パラメーターを凌雲リソースに設定した場合、送信できるジョブのタイプは TensorFlow、PyTorch、ElasticBatch、MPIJob、Ray のみです。

      ジョブリソース

      選択した[フレームワーク] に基づいて、次のノードのリソースを構成します。 ワーカーノード、パラメーターサーバー (PS) ノード、チーフノード、エバリュエーターノード、GraphLearn ノード。 Ray フレームワークを選択した場合は、[ロールの追加] をクリックしてカスタムワーカーロールを作成できます。 これにより、さまざまなタイプの計算リソースをシームレスに連携させることができます。

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

        • [ノード数]: DLC ジョブを実行するノードの数。

        • [リソースタイプ]: インスタンスを選択します。 さまざまなタイプのインスタンスの価格は、[インスタンスタイプ] パネルに表示されます。 課金の詳細については、「DLC の課金」をご参照ください。

      • リソースクォータを使用する: [ノード数]、[vCPU]、[GPU]、[メモリ (GiB)]、[共有メモリ (GiB)] パラメーターに加えて、次の特別なパラメーターも構成できます。

        • [ノード固有のスケジューリング]: ジョブを実行する計算ノードを指定できます。

        • [アイドルリソース]: この機能を有効にすると、他のビジネスジョブに割り当てられたクォータのアイドルリソースでジョブを実行できます。 これにより、リソース使用率が効果的に向上します。 ただし、アイドルリソースを返す必要がある場合、アイドルリソースで実行されているジョブは終了し、アイドルリソースは自動的に返されます。

        • [CPU アフィニティ]: この機能を有効にすると、コンテナーまたはポッド内のプロセスを実行のために特定の CPU コアにバインドできます。 これにより、CPU キャッシュミスやコンテキストスイッチなどの問題を防ぎ、CPU 使用率とアプリケーションパフォーマンスが向上します。 この機能は、パフォーマンスと適時性に高い要件があるシナリオに適しています。

      • プリエンプティブルリソースを使用する: [ノード数] パラメーターと [リソースタイプ] パラメーターに加えて、[入札価格] パラメーターを構成して、プリエンプティブルリソースに適用する最大入札価格を指定することもできます。 image アイコンをクリックして、入札方法を切り替えることができます。

        • [入札価格 (割引)]: 最大入札価格は、市場価格の 10% ~ 90% の範囲で、10% 刻みです。 入札が市場価格を満たしているか上回っており、在庫がある場合、プリエンプティブルリソースを取得できます。

        • [入札価格 ($/分)]: 最大入札価格範囲は、市場価格範囲に基づいています。

      [詳細を表示] をクリックして、最大期間と保持期間を構成します

      最大期間

      ジョブが実行される最大期間。 ジョブの実行期間が最大期間を超えると、ジョブは自動的に停止されます。 デフォルト値: 30。 単位: 日。

      保持期間

      成功または失敗したジョブの保持期間。 保持期間中、ジョブはリソースを占有し続けます。 保持期間が終了すると、ジョブは削除されます。

      重要

      削除された DLC ジョブは復元できません。 ジョブを削除するときは注意してください。

    • VPC

      • VPC を構成しない場合、インターネット接続とパブリックゲートウェイが使用されます。 パブリックゲートウェイの帯域幅は限られているため、ジョブが停止したり、予期したとおりに実行されない場合があります。

      • VPC を構成し、vSwitch とセキュリティグループを選択すると、ネットワーク帯域幅が増加し、パフォーマンスの安定性とセキュリティの両方が向上します。 構成が有効になると、ジョブが実行されているクラスターは VPC 内のサービスに直接アクセスします。

        重要
        • VPC を使用する場合は、リソースグループ内のインスタンスとデータセットの OSS バケットが同じリージョンの VPC に存在し、VPC がコードリポジトリのネットワークに接続されていることを確認する必要があります。

        • CPFS データセットを使用する場合は、VPC を構成する必要があります。 VPC は、CPFS データセット用に構成された VPC と同じである必要があります。 そうしないと、ジョブが環境準備状態のまま長時間留まる可能性があります。

        • 凌雲プリエンプティブルリソースを使用して DLC ジョブを送信する場合は、VPC を構成する必要があります。

        [インターネットゲートウェイ] パラメーターも構成できます。 有効な値:

        • [パブリックゲートウェイ]: パブリック帯域幅は制限されています。 高い同時実行性または大きなファイルのダウンロードシナリオでは、ダウンロードレートがビジネス要件を満たさない場合があります。

        • [プライベートゲートウェイ]: 制限されたパブリック帯域幅を増やすには、プライベートゲートウェイを使用できます。 インターネット NAT ゲートウェイを作成し、Elastic IP アドレス (EIP) を DSW インスタンスに関連付け、DSW インスタンスに関連付けられている VPC で SNAT を構成する必要があります。 詳細については、「プライベートゲートウェイを使用してインターネットアクセスレートを向上させる」をご参照ください。

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

      パラメーター

      説明

      自動フォールトトレランス

      [自動フォールトトレランス] をオンにして関連パラメーターを構成すると、システムはジョブをチェックして、ジョブのアルゴリズムエラーを特定して処理します。 これにより、GPU 使用率が向上します。 詳細については、「AIMaster: エラスティックフォールトトレランスエンジン」をご参照ください。

      説明

      [自動フォールトトレランス] を有効にすると、システムはジョブインスタンスと一緒に実行され、次のリソースを占有する AIMaster インスタンスを起動します。

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

      • パブリックリソース: ecs.c6.large。

      サニティチェック

      [サニティチェック] をオンにすると、システムはジョブの実行に使用されるリソースを検出し、障害のあるノードを分離し、バックグラウンドで自動 O&M プロセスをトリガーします。 サニティチェックは、トレーニングの初期段階でのジョブの失敗を効果的に削減し、トレーニングの成功率を向上させます。

      説明

      サニティチェックは、凌雲リソースで実行され、GPU を使用する PyTorch ジョブに対してのみ有効にできます。

    • ロールと権限

      次の表では、[インスタンス RAM ロール] パラメーターの構成方法について説明します。 詳細については、「RAM ロールを DLC ジョブに関連付ける」をご参照ください。

      インスタンス RAM ロール

      説明

      [PAI のデフォルトロール]

      PAI のデフォルトロールは AliyunPAIDLCDefaultRole ロールに基づいて開発されており、MaxCompute および OSS にアクセスするための権限のみを持っています。 デフォルトロールを使用して、きめ細かい権限管理を実装できます。 PAI のデフォルトロールによって発行された一時的な認証情報を持っている場合:

      • MaxCompute テーブルにアクセスすると、DLC ジョブの所有者と同じ権限が付与されます。

      • OSS にアクセスする場合、現在のワークスペースのデフォルトのストレージパスとして構成されているバケットにのみアクセスできます。

      [カスタムロール]

      カスタム RAM (Resource Access Management) ロールを選択または作成します。 セキュリティトークンサービス (STS) の一時的な認証情報を使用して他の Alibaba Cloud サービスの API 操作を呼び出す場合、選択したカスタムロールと同じ権限が付与されます。

      [ロールを関連付けない]

      RAM ロールを DLC ジョブに関連付けないでください。 デフォルトでは、このオプションが選択されています。

パラメーターを構成したら、[確認] をクリックします。

次の手順

トレーニングジョブを送信した後、次の操作を実行できます。

付録

SDK for Python またはコマンドラインを使用してジョブを送信する

SDK for Python を使用する

ステップ 1: Alibaba Cloud SDK Credentials ツールをインストールする

Alibaba Cloud SDK を使用してクラウド リソースを管理するために API 操作を呼び出す前に、有効な認証情報を構成する必要があります。 前提条件:

  • Python 3.7 以降がインストールされている。

  • Alibaba Cloud SDK V2.0 がインストールされている。

pip install alibabacloud_credentials
ステップ 2: AccessKey ペアを取得する

この例では、AccessKey ペアがアクセス認証情報として使用されます。 アカウント情報の漏洩を防ぐため、AccessKey ペアを環境変数として構成することをお勧めします。 AccessKey ID と AccessKey シークレットの変数名は、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET です。

参考資料:

ステップ 3: SDK for Python をインストールする
  • ワークスペース 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'
    # Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 これらの認証情報を使用して操作を実行することは、リスクの高い操作です。 RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
    # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
    # この例では、Credentials SDK は環境変数から AccessKey ペアを読み取って ID 検証を実行します。
    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('------- ワークスペース -----------')
    # ワークスペースリストを取得します。 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('ワークスペースが見つかりません')

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

    print('------- イメージ ------------')
    # イメージリストを取得します。
    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 = 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****。
            # Extreme NAS: ID は extreme- で始まる必要があります。 例: extreme-0015****。
            # CPFS: ID は cpfs- で始まる必要があります。 例: cpfs-125487****。
            nas_id='***',
            nas_path='/',
            mount_path='/mnt/data/nas')
        print('ID を持つデータセットを作成します: {}'.format(dataset_id))
    else:
        dataset_id = datasets.body.datasets[0].dataset_id

    print('------- コードソース ----------')
    # ソースコードファイルリストを取得します。
    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 スペック ----------')
    # 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('-------- ジョブの作成 ----------')
    # 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('-------- ジョブリスト ----------')
    # 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'
    # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API 操作を呼び出したり、日常的な O&M を実行することをお勧めします。RAM ユーザーを作成するには、RAM コンソールにログインします。
    # AccessKey ID と AccessKey シークレットをプロジェクトコードに保存しないことをお勧めします。保存すると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
    # この例では、Credentials SDK は環境変数から AccessKey ペアを読み取って ID 検証を実行します。
    cred = CredClient()
    client = Client(
        config=Config(
            credential=cred,
            region_id=region,
            endpoint=f'pai-dlc.{region}.aliyuncs.com',
        )
    )
    
    # ジョブのリソース構成を指定します。パブリックイメージを選択するか、イメージアドレスを指定できます。使用可能なパブリックイメージについては、リファレンスドキュメントを参照してください。
    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='<Your resource quota ID>',
            workspace_id='<Your workspace 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 = '<リージョン 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.<リージョン 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 = '<リージョン 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.<リージョン 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 パラメーターは、凌雲リソースに対してのみ有効です。

SpotPriceLimit

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

UserVpc

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

コマンドラインを使用する

ステップ 1: DLC クライアントをダウンロードし、ユーザー認証を実行する

お使いのオペレーティングシステム用の DLC クライアントをダウンロードし、認証情報を検証します。 詳細については、「始める前に」をご参照ください。

ステップ 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. 次のコードを実行して、params_file パラメーターを指定し、DLC ジョブを指定されたワークスペースおよびリソースクォータに送信します。

    ./dlc submit tfjob --job_file  ./tfjob.params
  6. 次のコードを実行して、送信した DLC ジョブをクエリします。

    ./dlc get job <jobID>