

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 하이브리드 작업에 API 사용
<a name="braket-jobs-api"></a>

API를 사용하여 Amazon Braket Hybrid Jobs에 직접 액세스하고 상호 작용할 수 있습니다. 그러나 API를 직접 사용할 때는 기본값 및 편의 메서드를 사용할 수 없습니다.

**참고**  
[Amazon Braket Python SDK](https://github.com/aws/amazon-braket-sdk-python)를 사용하여 Amazon Braket Hybrid Jobs와 상호 작용하는 것이 좋습니다. 이 SDK는하이브리드 작업을 성공적으로 실행하는 데 도움이 되는 편의 기본값과 보호 기능을 제공합니다.

이 주제에서는 API 사용의 기본 사항을 다룹니다. API를 사용하기로 선택한 경우 이 접근 방식은 더 복잡할 수 있으며 하이브리드 작업이 실행되도록 하기 위해 여러 번의 반복에 대비해야 함을 염두에 두세요.

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')의 Amazon Resource Name을 사용하여 `CancelJob` API를 직접적으로 호출합니다.

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

`checkpointConfig` 파라미터를 사용하여 체크포인트를 `createJob` API의 일부로 지정할 수 있습니다.

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

**참고**  
`checkpointConfig`의 localPath는 다음의 예약된 경로 `/opt/ml`, `/opt/braket`, `/tmp` 또는 `/usr/local/nvidia` 중 어느 것으로도 시작할 수 없습니다.