本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建你的第一个 Hybrid Job
本节介绍如何使用 Python 脚本创建混合 Job。或者,要使用本地 Python 代码(例如您首选的集成开发环境 (IDE) 或 Braket 笔记本)创建混合作业,请参阅将本地代码作为混合作业运行。
设置权限
在运行第一个混合作业之前,必须确保您有足够的权限来继续执行此任务。要确定您的权限是否正确,请从 Braket 控制台左侧的菜单中选择 “权限”。Amazon Braket 的权限管理页面可帮助您验证您的一个现有角色是否具有足以运行混合任务的权限,或者指导您创建可用于运行混合任务的默认角色(如果您还没有此类角色)。
![Amazon Braket 服务的权限和设置页面显示了服务相关角色以及用于验证混合任务执行角色现有角色的选项。](images/braket-jobs-first-permissions.png)
要验证您的角色是否具有足够的权限来运行混合作业,请选择验证现有角色按钮。如果你这样做,你会收到一条消息,告知角色已找到。要查看角色的名称及其角色 ARN,请选择显示角色按钮。
![Amazon Braket 权限和设置屏幕显示已找到的服务相关角色以及具有足够权限执行混合任务的现有角色。](images/braket-jobs-first-permissions-verify-yes.png)
如果您的角色没有足够的权限来运行混合作业,则会收到一条消息,提示未找到此类角色。选择 “创建默认角色” 按钮以获取具有足够权限的角色。
![Amazon Braket 权限和设置页面显示了找到的服务相关角色但未找到混合任务执行角色。](images/braket-jobs-first-permissions-verify-no.png)
如果角色已成功创建,您将收到一条确认消息。
![Amazon Braket 权限和设置页面显示了找到的服务相关角色以及成功创建的混合任务执行角色。](images/braket-jobs-first-permissions-verify-created.png)
如果您无权进行此项查询,则系统将拒绝您进行访问。在这种情况下,请联系您的内部 AWS 管理员。
![AccessDenied 错误消息,表明用户无权ListAttachedRolePolicies 在明确拒绝的情况下执行 AmazonBraketJobsExecutionRole iam:。](images/braket-jobs-first-permissions-access-denied.png)
创建并运行
拥有运行混合作业权限的角色后,就可以继续操作了。你的第一个 Braket 混合作业的关键部分是算法脚本。它定义了你要运行的算法,并包含作为算法一部分的经典逻辑和量子任务。除了算法脚本之外,您还可以提供其他依赖文件。算法脚本及其依赖关系被称为源模块。入口点定义了混合作业启动时要在源模块中运行的第一个文件或函数。
![该图显示了使用控制台或笔记本电脑创建量子作业、在量子设备上运行算法脚本以及分析结果的工作流程。](images/braket-jobs-first-workflow.jpg)
首先,考虑以下算法脚本的基本示例,该脚本创建了五个钟形状态并打印相应的测量结果。
import os from braket.aws import AwsDevice from braket.circuits import Circuit def start_here(): print("Test job started!") # Use the device declared in the job script device = AwsDevice(os.environ["AMZN_BRAKET_DEVICE_ARN"]) bell = Circuit().h(0).cnot(0, 1) for count in range(5): task = device.run(bell, shots=100) print(task.result().measurement_counts) print("Test job completed!")
将此文件名为 algorithm_script.py 保存在 Braket 笔记本或本地环境的当前工作目录中。algorithm_script.py 文件已start_here()
作为计划的入口点。
接下来,在与 algorithm_script.py 文件相同的目录下创建 Python 文件或 Python 笔记本。此脚本启动混合作业并处理任何异步处理,例如打印我们感兴趣的状态或关键结果。此脚本至少需要指定您的混合作业脚本和主设备。
注意
有关如何创建 Braket 笔记本或将文件(例如 algorithm_script.py 文件)上传到与笔记本相同的目录中的更多信息,请参阅使用 Amazon Braket Python SDK 运行你的第一个电路
对于基本的第一种情况,你要瞄准一个模拟器。无论你瞄准的是哪种类型的量子设备,无论是模拟器还是实际的量子处理单元 (QPU),你在以下脚本device
中指定的设备都用于调度混合作业,并且可以作为环境变量提供给算法脚本。AMZN_BRAKET_DEVICE_ARN
注意
您只能使用混合作业中 AWS 区域 可用的设备。亚马逊 Braket SDK 会自动选择此选项。 AWS 区域例如,us-east-1 中的混合作业可以IonQ使用SV1、、TN1和设备DM1,但不能使用设备。Rigetti
如果您选择量子计算机而不是模拟器,Braket 会安排您的混合作业,以优先访问权限运行其所有量子任务。
from braket.aws import AwsQuantumJob from braket.devices import Devices job = AwsQuantumJob.create( Devices.Amazon.SV1, source_module="algorithm_script.py", entry_point="algorithm_script:start_here", wait_until_complete=True )
该参数wait_until_complete=True
设置了详细模式,以便您的作业在运行时打印实际作业的输出。您应该看到类似于以下示例的输出。
job = AwsQuantumJob.create( Devices.Amazon.SV1, source_module="algorithm_script.py", entry_point="algorithm_script:start_here", wait_until_complete=True, ) Initializing Braket Job: arn:aws:braket:us-west-2:<accountid>:job/<UUID> ......................................... . . . Completed 36.1 KiB/36.1 KiB (692.1 KiB/s) with 1 file(s) remaining#015download: s3://braket-external-assets-preview-us-west-2/HybridJobsAccess/models/braket-2019-09-01.normal.json to ../../braket/additional_lib/original/braket-2019-09-01.normal.json Running Code As Process Test job started!!!!! Counter({'00': 55, '11': 45}) Counter({'11': 59, '00': 41}) Counter({'00': 55, '11': 45}) Counter({'00': 58, '11': 42}) Counter({'00': 55, '11': 45}) Test job completed!!!!! Code Run Finished 2021-09-17 21:48:05,544 sagemaker-training-toolkit INFO Reporting training SUCCESS
注意
监控结果
或者,您可以访问来自 Amazon 的日志输出 CloudWatch。为此,请转到作业详细信息页面左侧菜单上的日志组选项卡,选择日志组aws/braket/jobs
,然后选择包含该作业名称的日志流。在上述示例中,即为 braket-job-default-1631915042705/algo-1-1631915190
。
![CloudWatch 日志组显示了 Amazon Braket SDK Python 测试的日志事件列表,其中包含文件路径和时间戳。](images/braket-jobs-first-cw-log.png)
您还可以在控制台中查看混合作业的状态,方法是选择 “混合作业” 页面,然后选择 “设置”。
![Amazon Braket 混合任务详细信息显示摘要、事件时间、源代码和实例配置以及停止条件。](images/braket-jobs-first-console-status.png)
您的混合作业在运行时会在 Amazon S3 中生成一些工件。S3 存储桶的默认名称为amazon-braket-<region>-<accountid>
,内容位于jobs/<jobname>/<timestamp>
目录中。使用 Braket Python SDK 创建混合作业code_location
时,您可以通过指定其他位置来配置存储这些工件的 S3 位置。
注意
此 S3 存储桶必须与您的任务脚本位于同一 AWS 区域 位置。
该jobs/<jobname>/<timestamp>
目录包含一个子文件夹,文件中包含入口点脚本的model.tar.gz
输出。还有一个名为的目录script
,source.tar.gz
文件中包含您的算法脚本工件。实际量子任务的结果位于名为的目录中jobs/<jobname>/tasks
。