将 API 和 Hybrid Jobs 配合使用
您可以直接使用 API Amazon Braket Hybrid Jobs 访问并与之交互。但是,直接使用 API 时,默认方法和便捷方法不可用。
注意
强烈建议您使用 Amazon Braket Python SDK
本主题涵盖了关于使用 API 的基础知识。如果您选择使用 API,请记住这种方法可能更为复杂,并且需要为几次迭代做好准备,以使您的混合作业得以运行。
要使用 API,您的账户应具有 AmazonBraketFullAccess 托管式策略的角色。
注意
有关如何使用 AmazonBraketFullAccess 托管式策略获取角色的更多信息,请参阅启用 Amazon Braket 页面。
此外,您还需要一个执行角色。此角色将被传递给服务。您可以使用 Amazon Braket 控制台来创建角色。使用“权限和设置”页面上的“执行角色”选项卡为混合作业创建默认角色。
CreateJob API 要求您为混合作业指定所有必需的参数。要使用 Python,请将算法脚本文件压缩为 tar 包,如 input.tar.gz 文件,然后运行以下脚本。更新尖括号 (<>) 内的代码部分,以匹配您的账户信息和指定混合作业开始路径、文件和方法的入口点。
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。