

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ハイブリッドジョブでの API の使用方法
<a name="braket-jobs-api"></a>

API を直接使用することで、Amazon Braket Hybrid Jobs にアクセスして操作できます。ただし、API を直接使用する場合にはデフォルトおよび便利なメソッドは使用できなくなります。

**注記**  
Amazon Braket Hybrid Jobs の操作には [Amazon Braket Python SDK](https://github.com/aws/amazon-braket-sdk-python) を使用することを強くお勧めします。ハイブリッドジョブが正常に実行されるようにする便利なデフォルトと保護が提供されているためです。

このトピックでは、API の基本的な使用方法について説明します。API を使用するというアプローチは、SDK を使用する場合よりも複雑になることに注意してください。ハイブリッドジョブを実行できるようになるまでに、何度も試行錯誤する覚悟が必要です。

API を使用するには、アカウントに、`AmazonBraketFullAccess` マネージドポリシーを持つロールが必要です。

**注記**  
`AmazonBraketFullAccess` マネージドポリシーでロールを取得する方法の詳細については、「[Amazon Braket を有効にする](braket-enable-overview.md)」ページを参照してください。

また、**実行ロール**も必要です。このロールはサービスに渡されます。このロールを作成するには、**Amazon Braket コンソール**を使用します。**[アクセス許可と設定]** ページの **[実行ロール]** タブを使用して、ハイブリッドジョブのデフォルトロールを作成できます。

`CreateJob` API では、ハイブリッドジョブに必要なパラメータをすべて指定する必要があります。Python を使用するには、input.tar.gz ファイルなどのアルゴリズムスクリプトファイルを tar バンドルに圧縮し、次のスクリプトを実行します。コードのうち山括弧 (`<>`) で囲まれた部分を更新して、ハイブリッドジョブを開始するパス、ファイル、メソッドを指定するアカウント情報およびエントリポイントに一致させます。

```
from braket.aws import AwsDevice, AwsSession
import boto3
from datetime import datetime

s3_client = boto3.client("s3")
client = boto3.client("braket")

project_name = "job-test"
job_name = project_name + "-" + datetime.strftime(datetime.now(), "%Y%m%d%H%M%S")
bucket = "amazon-braket-<your_bucket>"
s3_prefix = job_name

job_script = "input.tar.gz"
job_object = f"{s3_prefix}/script/{job_script}"
s3_client.upload_file(job_script, bucket, job_object)

input_data = "inputdata.csv"
input_object = f"{s3_prefix}/input/{input_data}"
s3_client.upload_file(input_data, bucket, input_object)

job = client.create_job(
    jobName=job_name,
    roleArn="arn:aws:iam::<your_account>:role/service-role/AmazonBraketJobsExecutionRole",  # https://docs.aws.amazon.com/braket/latest/developerguide/braket-manage-access.html#about-amazonbraketjobsexecution
    algorithmSpecification={
        "scriptModeConfig": {
            "entryPoint": "<your_execution_module>:<your_execution_method>",
            "containerImage": {"uri": "292282985366.dkr.ecr.us-west-1.amazonaws.com/amazon-braket-base-jobs:1.0-cpu-py37-ubuntu18.04"},   # Change to the specific region you are using
            "s3Uri": f"s3://{bucket}/{job_object}",
            "compressionType": "GZIP"
        }
    },
    inputDataConfig=[
        {
            "channelName": "hellothere",
            "compressionType": "NONE",
            "dataSource": {
                "s3DataSource": {
                    "s3Uri": f"s3://{bucket}/{s3_prefix}/input",
                    "s3DataType": "S3_PREFIX"
                }
            }
        }
    ],
    outputDataConfig={
        "s3Path": f"s3://{bucket}/{s3_prefix}/output"
    },
    instanceConfig={
        "instanceType": "ml.m5.large",
        "instanceCount": 1,
        "volumeSizeInGb": 1
    },
    checkpointConfig={
        "s3Uri":  f"s3://{bucket}/{s3_prefix}/checkpoints",
        "localPath": "/opt/omega/checkpoints"
    },
    deviceConfig={
        "priorityAccess": {
            "devices": [
                "arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3"
            ]
        }
    },
    hyperParameters={
        "hyperparameter key you wish to pass": "<hyperparameter value you wish to pass>",
    },
    stoppingCondition={
        "maxRuntimeInSeconds": 1200,
        "maximumTaskLimit": 10
    },
)
```

ハイブリッドジョブの作成後に、ハイブリッドジョブの詳細にアクセスするには、`GetJob` API またはコンソールを使用します。直前の例のように `createJob` コードを実行した Python セッションからハイブリッドジョブの詳細を取得するには、次の Python コマンドを使用します。

```
getJob = client.get_job(jobArn=job["jobArn"])
```

ハイブリッドジョブをキャンセルするには、ジョブ ('JobArn') の <noloc>Amazon リソースネーム</noloc>を指定して `CancelJob` API を呼び出します。

```
cancelJob = client.cancel_job(jobArn=job["jobArn"])
```

チェックポイントを指定するには、`createJob` API の一部として `checkpointConfig` パラメータを使用します。

```
    checkpointConfig = {
        "localPath" : "/opt/omega/checkpoints",
        "s3Uri": f"s3://{bucket}/{s3_prefix}/checkpoints"
    },
```

**注記**  
`checkpointConfig` のローカルパスの先頭を、予約済みパスである `/opt/ml`、`/opt/braket`、`/tmp`、または `/usr/local/nvidia` のいずれかにすることはできません。