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

Platform For AI:研修ジョブを提出する

最終更新日:Nov 14, 2024

準備が完了したら、Platform for AI (PAI) コンソールで、またはSDK for Pythonまたはコマンドラインを使用して、Deep Learning Containers (DLC) ジョブを送信できます。 このトピックでは、DLCジョブを送信する方法について説明します。

前提条件

  • 必要なリソース、イメージ、データセット、およびコードビルドが準備されます。 詳細については、「開始前」をご参照ください。

  • 環境変数は、SDK for Pythonを使用してDLCジョブを送信するように構成されています。 詳細については、アクセス資格情報の管理トピックの「資格情報ツールのインストール」セクションと、Alibaba Cloud Darabonba SDK For Pythonトピックの「手順2: 環境変数の設定」セクションをご参照ください。

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

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

    1. PAI コンソールにログインします。 リージョンとワークスペースを選択します。 次に、[ディープラーニングコンテナ (DLC) の入力] をクリックします。

  2. [ディープラーニングコンテナ (DLC)] ページで、[ジョブの作成] をクリックします。 [ジョブの作成] ページが表示されます。

基本情報

[基本情報] セクションで、[ジョブ名] および [タグ] パラメーターを設定します。

環境情報

[環境情報] セクションで、重要なパラメーターを設定します。 下表に、各パラメーターを説明します。

パラメーター

説明

ノードイメージ

ワーカーノードイメージ。 次のいずれかのノードイメージを選択できます。

  • Alibaba Cloudイメージ: Alibaba Cloud PAIが提供するイメージ。 このようなイメージは、TensorFlowやPyTorchなど、さまざまなPythonバージョンと深層学習フレームワークをサポートしています。 詳細については、「開始前」をご参照ください。

  • カスタムイメージ: PAIにアップロードしたカスタムイメージ。 このオプションを選択する前に、カスタムイメージをPAIにアップロードする必要があります。 画像をアップロードする方法の詳細については、「カスタム画像」をご参照ください。

    説明

    Lingjunリソースを使用する場合は、RDMA (Remote Direct Memory Access) ネットワークをインストールして、Lingjunリソースの高性能RDMAネットワークを使用します。 詳細については、「RDMA: 分散トレーニング用の高性能ネットワーク」をご参照ください。

  • イメージアドレス: イメージアドレスを使用してアクセスできるカスタム、コミュニティ、またはAlibaba Cloudイメージ。 イメージアドレスを選択した場合は、アクセスするDockerレジストリイメージのパブリックURLも指定する必要があります。

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

    アクセラレーションイメージを使用して、モデルトレーニングを高速化することもできます。 詳細については、「PAIでのアクセラレーションイメージの使用」をご参照ください。

データセット

次のいずれかのデータセットタイプを選択できます。

  • カスタムデータセット: 準備したデータセットを選択します。 データセットの準備方法の詳細については、「手順3: データセットの準備」をご参照ください。

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

[マウントパス] パラメーターを、DLCトレーニングコンテナーの特定のパス (/mnt/dataなど) に設定します。 DLCは、指定したマウントパスに基づいて必要なファイルを取得します。 詳細については、「DLCトレーニングジョブにクラウドストレージを使用する」をご参照ください。

重要
  • OSSデータセットまたはFile Storage NAS) データセットを選択した場合、OSSまたはNASにアクセスする権限をPAIに付与する必要があります。 そうでない場合、PAIはデータを読み書きできません。 詳細については、「DLCを使用するために必要な権限の付与」トピックの「OSSとNASにアクセスするための権限をPAIに付与する」をご参照ください。

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

直接マウント

[OSS] をクリックして、指定されたDLCパスにOSSパスをマウントします。

Startupコマンド

ジョブを実行するコマンド。 シェルコマンドがサポートされています。 たとえば、python -c "print('Hello World')" コマンドを使用してPythonを実行できます。

ジョブを送信すると、PAIは複数の一般環境変数を自動的に挿入します。 特定の環境変数の値を取得するには、$environment Variable Nameパラメーターを設定します。 DLCが提供する一般的な環境変数の詳細については、「一般的な環境変数」をご参照ください。

説明
  • データセットを設定すると、トレーニング結果はデータセットがマウントされているディレクトリに保存されます。

  • コマンドで変数を使用して出力パスを指定した場合、トレーニング結果は指定したパスに格納されます。

環境変数

追加の設定情報またはパラメーター。 形式はkey:valueです。 最大20個の環境変数を設定できます。

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

有効な値:

  • Select from List: フィールドにサードパーティのライブラリの名前を入力します。

  • requirements.txtのディレクトリ: フィールドにrequirements.txtファイルのパスを入力します。 requirements.txtファイルにサードパーティライブラリのアドレスを含める必要があります。

コードビルド

有効な値:

  • オンライン設定

    ジョブのコードファイルを格納するリポジトリの場所を指定します。 この例では、準備したコードビルドが選択されています。 コードビルドの作成方法については、「Before you begin」トピックの「手順4: コードビルドの準備」を参照してください。

    説明

    DLCは、指定されたワーキングパスにコードを自動的にダウンロードします。 アカウントにリポジトリにアクセスする権限があることを確認してください。

  • ローカルアップロード

    アイコンをクリックしimage.png、画面の指示に従ってコードビルドをアップロードします。 アップロードが成功したら、[マウントパス] パラメーターを /mnt/dataなどのコンテナー内の指定されたパスに設定します。

リソース情報

[リソース情報] セクションで、重要なパラメーターを設定します。 下表に、各パラメーターを説明します。

パラメーター

説明

インスタンスタイプ

このパラメーターは、ワークスペースでLingjunリソースと一般的なコンピューティングリソースを使用してDLCでジョブを送信できる場合にのみ使用できます。

  • Lingjunリソース

    説明

    Lingjun リソースは、中国 (ウランチャブ) リージョンとシンガポールリージョンでのみ利用できます。

  • 一般的なコンピューティングリソース

ソース

一般的なコンピューティングリソースとLingjunリソースを含むパブリックリソースリソースクォータが利用可能です。

説明
  • パブリックリソースは、最大2つのGPUと8つのvCPUを提供できます。 リソースクォータを増やすには、アカウントマネージャに連絡してください。

  • プリエンプティブルリソースには以下の制限があります。 詳細については、「プリエンプティブルジョブの使用」をご参照ください。

    • プリエンプティブルジョブを使用する前に、ビジネスマネージャーに連絡してホワイトリストに追加してください。

    • プリエンプティブルジョブは、中国 (ウランカブ) リージョンとシンガポールリージョンでのみ利用できます。

    • Lingjunリソースのみがプリエンプティブルジョブをサポートしています。

リソースクォータ

このパラメーターは、[Source] パラメーターを [Resource Quota] に設定した場合にのみ必要です。 準備したリソースのクォータを選択します。 リソースクォータの準備方法の詳細については、「リソースクォータの概要」をご参照ください。

優先度

このパラメーターは、[Source] パラメーターを [Resource Quota] に設定した場合にのみ使用できます。

ジョブを実行する優先度を指定します。 有効値: 1~9。 値が大きいほど優先度が高いことを示す。

フレームワーク

深層学習トレーニングフレームワークとツールを指定します。 このフレームワークは、深層学習モデルの構築、トレーニング、最適化に使用できる豊富な機能と操作を提供します。

  • Tensorflow

  • PyTorch

  • ElasticBatch

  • XGBoost

  • OneFlow

  • MPIJob

  • スラム

  • レイ

説明

[Resource Quota] パラメーターをLingjunリソースに設定した場合、TensorFlow、PyTorch、ElasticBatch、MPIJob、Slurm、およびRayのジョブのみを送信できます。

求人リソース

選択したフレームワークに基づいて、ワーカーノード、パラメーターサーバー (PS) ノード、チーフノード、評価者ノード、GraphLearnノードを設定します。

  • パブリックリソースの使用

    次のパラメーターを設定します。

    • Number of Nodes: DLCジョブが実行されるノードの数。

    • インスタンスタイプ: image.pngアイコンをクリックしてインスタンスタイプを選択します。 リソース仕様の課金については、「billing of DLC」をご参照ください。

  • 一般的なコンピューティングリソースまたはLingjunリソースの使用

    ノードには、ノード数vCPUGPUメモリ (GiB) 、および共有メモリ (GiB) のパラメーターを設定します。

  • プリエンプティブルリソースの使用

    次のパラメーターを設定します。

    • Number of Nodes: DLCジョブが実行されるノードの数。

    • インスタンスタイプ: image.pngアイコンをクリックしてインスタンスタイプを選択します。

    • Maxium Bid Price: リソースに適用するための最大入札価格。 最大入札価格は、10% の間隔で市場価格の10% から90% の範囲です。 入札額が市場価格を満たしているか超えており、在庫が利用可能な場合は、プリエンプティブルリソースを取得できます。

ノード固有のスケジューリング

この機能を有効にすると、スケジューリング対象のノードを選択できます。

説明

このパラメーターは、リソースクォータを使用する場合にのみ使用できます。

CPUアフィニティ

CPUアフィニティを有効にすると、コンテナーまたはポッド内のプロセスを特定のCPUコアにバインドして実行できます。 このアプローチにより、CPUキャッシュミスとコンテキスト切り替えを減らし、CPU使用率を改善し、アプリケーションパフォーマンスを向上させることができます。 これは、パフォーマンスに敏感で、リアルタイム要件が高いシナリオに適しています。

最大期間

ジョブを実行する最大期間を指定できます。 ジョブの稼働時間が最大期間を超えると、ジョブは自動的に停止します。 デフォルト値:30。 単位:時間。

保持期間

ジョブが完了または失敗した後のジョブの保持期間を指定します。 保持期間中、リソースは占有される。 保存期間が終了すると、ジョブは削除されます。

重要

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

[VPC]

このパラメーターは、[ソース] パラメーターを [パブリックリソース] に設定した場合にのみ使用できます。

  • VPCを設定しない場合、インターネット接続が使用されます。 インターネットの帯域幅が限られているため、ジョブが進行しないか、期待どおりに実行されない場合があります。

  • 十分なネットワーク帯域幅と安定したパフォーマンスを確保するために、VPCを設定することを推奨します。

    現在のリージョンでVPC、vSwitch、およびセキュリティグループを選択します。 設定が有効になると、ジョブが実行されるクラスターはVPC内のサービスに直接アクセスし、選択したセキュリティグループに基づいてアクセス制御を実行します。

    Internet Access Gatewayパラメーターを設定することもできます。

    • Private Gateway: 専用帯域幅。 ビジネス要件に基づいて帯域幅を設定できます。 プライベートゲートウェイを使用してインターネットにアクセスする場合、インターネットNATゲートウェイを作成し、elastic IPアドレス (EIP) をDSWインスタンスに関連付け、DSWインスタンスに関連付けられているVPCでSNATを設定する必要があります。 詳細については、「プライベートインターネットNATゲートウェイを使用したDSWインスタンスのインターネットアクセスの有効化」をご参照ください。

    • パブリックゲートウェイ: 共有パブリック帯域幅。 同時実行性の高いシナリオでは、ダウンロード速度が遅くなります。

重要
  • DLCジョブを実行する前に、データセットのリソースグループとOSSバケットのインスタンスが同じリージョンのVPCにあり、VPCがコードリポジトリのネットワークに接続されていることを確認します。

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

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

[フォールトトレランスと診断] セクションで、主要なパラメーターを設定します。 下表に、各パラメーターを説明します。

パラメーター

説明

自動故障トレランス

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

説明

Automatic Fault Toleranceを有効にすると、ジョブインスタンスと一緒に実行され、次のリソースを占有するAIMasterインスタンスが起動します。

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

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

正気チェック

サニティチェックをオンにすると、ジョブの実行に使用されるリソースが検出され、障害のあるノードが隔離され、バックグラウンドで自動O&Mプロセスがトリガーされます。 これにより、トレーニングの初期段階でのジョブの失敗を防ぎ、トレーニングの成功率を向上させます。 詳細については、「サニティチェック」をご参照ください。

説明

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

ロールと権限

[ロールと権限] セクションで、[インスタンスRAMロール] パラメーターを設定します。 詳細については、「DLC RAMロールの設定」をご参照ください。

インスタンスRAMロール

説明

PAIのデフォルトの役割

PAIのデフォルトロールは、AliyunPAIDLCDefaultRoleロールに基づいて開発され、MaxComputeとOSSにアクセスする権限のみを持ちます。 このロールを使用して、詳細な権限管理を実装できます。 PAIのデフォルトロールによって発行された一時的な資格情報:

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

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

カスタムロール

カスタムRAM (Resource Access Management) ロールを選択または作成します。 Security Token Service (STS) の一時的な資格情報を使用して他のAlibaba CloudサービスのAPI操作を呼び出すときに選択したカスタムロールと同じ権限が付与されます。

ロールを関連付けない

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

パラメーターを確認したら、[OK] をクリックしてジョブを送信します。

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

SDK for Pythonの使用

手順1: SDK for Pythonのインストール

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

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

    pip install alibabacloud_pai_dlc20201203==1.4.0

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

  • 従量課金リソースで実行されるジョブを送信する場合は、パブリックリソースを使用できます。 パブリックリソースで実行されるトレーニングジョブは、キューイングの遅延が発生する可能性があります。 少数のタスクを含む時間に依存しないシナリオでは、パブリックリソースを使用することを推奨します。

  • サブスクリプションリソースで実行されるジョブを送信する場合は、一般的なコンピューティングリソースやLingjunリソースなどの専用リソースを使用できます。 専用リソースを使用して、高ワークロードシナリオでリソースの可用性を確保できます。

パブリックリソースを使用してジョブを送信する

次のサンプルコードは、DLCジョブを作成して送信する方法の例を示しています。

#!/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 has the required permissions on DLC. 
    region_id = 'cn-hangzhou'
    # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
    # We recommend that you do not save the AccessKey ID and the AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked, and this may compromise the security of all resources within your account. 
    # In this example, the Credentials SDK reads the AccessKey pair from the environment variables to perform identity verification. 
    cred = CredClient()

    # 1. create client;
    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 workspace list. You can specify the name of the workspace that you created 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 image list. 
    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 dataset. 
    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:
        # Create a dataset if the specified dataset does not exist. 
        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: The ID must start with extreme-. Example: extreme-0015****. 
            # CPFS: The ID must start with cpfs-. 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 source code file list. 
    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 DLC node specification list. 
    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,
                "UseSpotInstance": False,
            },
        ],
        "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 DLC job list. 
    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. 次のサンプルコードは、ジョブを作成して送信する方法の例を示しています。 利用可能なパブリックイメージの詳細については、「Before you begin」トピックの「ステップ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 operations. 
    region = 'cn-hangzhou'
    # The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
    # We recommend that you do not save the AccessKey ID and the AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked, and this may compromise the security of all resources within your account. 
    # In this example, the Credentials SDK reads the AccessKey pair from the environment variables to perform identity verification. 
    cred = CredClient()
    client = Client(
        config=Config(
            credential=cred,
            region_id=region,
            endpoint=f'pai-dlc.{region}.aliyuncs.com',
        )
    )
    
    # Specify the resource configurations of the job. You can select a public image or specify an image address. For information about the available public images, see the reference documentation. 
    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')
    )
    
    # Specify the execution information for the job. 
    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"',
    )
    
    # Submit the job. 
    response = client.create_job(req)
    # Obtain 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 commands that the job runs. 
    job.user_command

コマンドラインの使用

手順1: DLCクライアントをダウンロードしてユーザー認証

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

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

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

  2. 次の図に示す手順に従って、[ワークスペース] ページでワークスペースIDを取得します。

    image.png

  3. 次の図に示す手順に従って、リソースクォータIDを取得します。

    image

  4. tfjob.paramsという名前のパラメータファイルを作成し、次の内容をファイルにコピーします。 ビジネス要件に基づいてパラメーター値を変更します。 DLCクライアントでコマンドラインを使用する方法については、「サポートされているコマンド」をご参照ください。

    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=<Your resource quota ID>  
    workspace_id=<Your workspace ID> 
  5. 次のサンプルコードでは、params_fileパラメーターを指定して送信する方法の例を示します。DLCジョブを指定されたワークスペースとリソースクォータに設定します。

    ./dlc submit tfjob --job_file  ./tfjob.params
  6. 次のサンプルコードは、DLCあなたが作成したジョブ。

    ./dlc get job <jobID>

次のステップ

ジョブの送信後、次の操作を実行できます。

  • ジョブの基本情報、リソースビュー、および操作ログを表示します。 詳細については、「トレーニングジョブの表示」をご参照ください。

  • ジョブの複製、停止、削除などのジョブを管理します。 詳細については、「トレーニングジョブの管理」をご参照ください。

  • TensorBoardでトレーニング結果を表示します。 詳細については、「TensorBoardを使用したDLCでのトレーニング結果の表示」をご参照ください。

  • ジョブが完了したら、課金の詳細を表示します。 詳細については、「請求の詳細」をご参照ください。

  • ログ転送機能を有効にして、DLCジョブのログを現在のワークスペースからカスタム分析用の特定のLogstoreに転送します。 詳細については、「ジョブログの購読」をご参照ください。

  • PAIワークスペースの通知ルールを作成して、DLCジョブのステータスを追跡および監視できます。 詳細については、「通知ルールの作成」をご参照ください。

  • DLCジョブについて他に質問がある場合は、「DLCに関するFAQ」をご参照ください。