建立您的第一個混合式任務 - Amazon Braket

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立您的第一個混合式任務

本節說明如何使用 Python 指令碼建立混合式任務。或者,若要從本機 Python 程式碼建立混合任務,例如您偏好的整合開發環境 (IDE) 或 Braket 筆記本,請參閱 將本機程式碼作為混合式任務執行

設定許可

在您執行第一個混合式任務之前,您必須確定您有足夠的許可以繼續此任務。若要判斷您擁有正確的許可,請從 Braket 主控台左側的選單中選取許可Amazon Braket 的許可管理頁面可協助您驗證其中一個現有角色是否具有足以執行混合式任務的許可,或引導您完成建立預設角色,以便在您尚未擁有此類角色時用來執行混合式任務。

Amazon Braket 服務的許可和設定頁面顯示服務連結角色,以及驗證混合任務執行角色現有角色的選項。

若要驗證您的角色是否具有執行混合式任務的足夠許可,請選取驗證現有角色按鈕。如果您這樣做,您會收到找到角色的訊息。若要查看角色的名稱及其角色 ARNs,請選取顯示角色按鈕。

Amazon Braket 許可和設定畫面顯示找到的服務連結角色,以及具有足夠執行混合式任務許可的現有角色。

如果您沒有具有執行混合式任務足夠許可的角色,您會收到一則訊息,說明找不到該角色。選取建立預設角色按鈕,以取得具有足夠許可的角色。

Amazon Braket 許可和設定頁面顯示找到的服務連結角色,以及找不到混合任務執行角色。

如果角色已成功建立,您會收到確認此項目的訊息。

Amazon Braket 許可和設定頁面顯示找到的服務連結角色,以及成功建立的混合任務執行角色。

如果您沒有進行此查詢的許可,將拒絕您存取。在此情況下,請聯絡您的內部 AWS 管理員。

AccessDenied 錯誤訊息,指出使用者未獲授權在 ListAttachedRolePolicies 上執行 iam:AmazonBraketJobsExecutionRole 並明確拒絕。

建立和執行

當您擁有執行混合式任務的許可角色時,即可繼續進行。第一個 Braket 混合任務的金鑰部分是演算法指令碼 。它定義了您要執行的演算法,並包含屬於演算法一部分的傳統邏輯和量子任務。除了演算法指令碼之外,您還可以提供其他相依性檔案。演算法指令碼及其相依性稱為來源模組 進入點會定義混合作業啟動時在來源模組中執行的第一個檔案或函數。

圖表顯示使用主控台或筆記本建立量子任務、在量子裝置上執行演算法指令碼,以及分析結果的工作流程。

首先,請考慮下列演算法指令碼的基本範例,該指令碼會建立五個鈴鐺狀態並列印對應的測量結果。

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!")

在 Braket 筆記本或本機環境中的目前工作目錄中,使用名稱 algorithm_script.py 儲存此檔案。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 區域 中可用的裝置。Amazon Braket SDK自動選取此 AWS 區域。例如,us-east-1 中的混合式任務可以使用 IonQ, SV1, DM1 和 TN1 裝置,但不是 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
注意

您也可以將自訂模組與 AwsQuantumJob.create 方法搭配使用,方法是傳遞其位置 (本機目錄或檔案的路徑,或 tar.gz 檔案URI的 S3)。如需工作範例,請參閱 Amazon Braket 範例 Github 儲存庫中混合式任務資料夾中的 Parallelize_training_for_QML.ipynb 檔案。

監控結果

或者,您可以從 Amazon 存取日誌輸出 CloudWatch。若要執行此操作,請前往任務詳細資訊頁面左側選單上的日誌群組索引標籤,選取日誌群組 aws/braket/jobs,然後選擇包含任務名稱的日誌串流。在上述範例中,即為 braket-job-default-1631915042705/algo-1-1631915190

CloudWatch 日誌群組會顯示 Amazon Braket SDK Python 測試的日誌事件清單,其中包含檔案路徑和時間戳記。

您也可以在主控台中選取混合任務頁面,然後選擇設定 ,以檢視混合任務的狀態。

Amazon Braket 混合任務詳細資訊顯示摘要、事件時間、原始程式碼和執行個體組態,以及停止條件。

您的混合任務在執行時會在 Amazon S3 中產生一些成品。預設 S3 儲存貯體名稱為 ,amazon-braket-<region>-<accountid>而內容位於 jobs/<jobname>/<timestamp>目錄中。您可以使用 Braket Python 建立混合任務code_location時,指定不同的 ,藉此設定存放這些成品的 S3 位置SDK。

注意

此 S3 儲存貯體必須與 AWS 區域 任務指令碼位於相同位置。

jobs/<jobname>/<timestamp> 目錄包含子資料夾,其中包含model.tar.gz檔案中輸入點指令碼的輸出。還有一個名為 的目錄script,其中包含source.tar.gz檔案中的演算法指令碼成品。實際量子任務的結果位於名為 的目錄中jobs/<jobname>/tasks