本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
攜帶您自己的容器 (BYOC)
AmazonBraket 混合作業提供三個預先建置的容器,可在不同的環境中執行程式碼,如定義演算法指令碼的環境主題。如果其中一個容器支援您的使用案例,則只需在建立混合作業時提供演算法指令碼。可以使用 pip 從算法腳本中添加次要缺少的依賴關係。
如果這些容器都不支持您的用例,或者您希望擴展它們,AmazonBraket 混合作業支援使用您自己的自訂 Docker 容器映像執行混合式作業。此 BYOC 功能可讓您在已安裝指定軟體的環境中執行程式碼。容器會開始執行指定的入口點指令碼,然後您可以使用該指令碼來存取自訂使用者程式碼和資料。如需範例,請參閱Amazon Braket 混合工作
若要在您自己的容器中執行 Amazon Braket 混合式任務:
-
設定先決條件:如果要建置並上傳自己的自訂容器,您必須安裝 Docker 的自訂容器。Amazon布拉科特筆記本已預先安裝了 Docker。
-
建立您的容器:使用 Dockerfile 創建一個新目錄以安裝和設置腳本需要運行的軟件和環境。您可以按照中的說明下載範例檔案定義演算法指令碼的環境主題。您可能需要新增額外的套件來支援您的容器。這個文件可能有更多的軟件比你需要的,在這種情況下,你可以通過刪除不必要的組件加快構建過程。請注意,
sagemaker-training
組件是必要的,不應該被刪除。當容器以環境變數開始時,您必須指定要執行的初始指令碼ENV SAGEMAKER_PROGRAM your_file.py
,其中your_file.py
是存在於目錄中的檔案/opt/ml/code
你的容器內。建立混合任務時,使用者可以使用程式碼指定 Amazon S3 位置,並指定要執行的入口點。Braket 混合作業會為您的指令碼建立環境變數,以尋找要執行的使用者輸入程式碼。Amazon S3 位置和使用者程式碼的進入點會透過環境變數暴露在初始指令碼AMZN_BRAKET_SCRIPT_S3_URI
和AMZN_BRAKET_SCRIPT_ENTRY_POINT
分別。用戶輸入可以被壓縮,並且可以通過變量訪問壓縮類型AMZN_BRAKET_SCRIPT_COMPRESSION_TYPE
。這是你的劇本的責任your_file.py,
以使用此資訊來執行使用者程式碼。對用戶數據運行用戶代碼的示例腳本是braket_container.py
在範例中,您可以按照定義演算法指令碼的環境主題。 -
建立一個亞馬遜 ECR 儲存庫:您創建的存儲庫必須是私有的。如果您指定公用映像檔,AmazonBraket 混合作業客戶端在嘗試驗證映像位置時拋出錯誤。還可以,AWS 區域的容器映像檔必須符合AWS 區域您執行混合式工作的位置。若要設定您的存放庫,請存取亞馬遜 ECR 控制台
。然後選取消建立儲存庫,選擇私人的用於可見性設置,並為您的新存儲庫命名。如需設定存放庫的完整使用者指南,請參閱開始使用亞馬遜 ECRAWS Management Console。請注意,針對混合式作業建立的標準角色只有下載前綴為「amazon-braket-」開頭的容器映像的權限。如果您希望使用不同名稱的容器映像檔,則需要為混合式工作角色新增內嵌權限 (請參閱目前的政策限制這裡). 如果您計劃從與建立儲存庫所用帳戶不同的帳戶執行混合式作業,則必須允許用來執行混合式作業的帳戶,從用來建立它們的帳戶提取您所建立的映像檔。您必須在存放庫上允許的動作是 ecr:DescribeImages
和ecr:BatchGetImage
。若要從 Amazon ECR 主控台將這些許可新增至映像,請選取映像並選擇權限在菜單中。您可以新增規則,以允許您允許使用容器執行混合式工作的帳戶執行這兩個動作。 -
構建映像,並將其推送到存儲庫: 您必須通過驗證碼頭才能上傳到亞馬遜 ECR。您可以檢索身份驗證令牌,並使用AWS CLI使用以下代碼。
aws ecr get-login-password --region ${your_region} | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com
現在,您應該可以構建自己的映像並將其推送到自己的存儲庫。
cd ${your_docker_directory} docker build -t ${your_job_container} . docker tag ${your_job_container}:latest ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/${your_job_container}:latest docker push ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/${your_job_container}:latest
若要使用您自己的容器建立混合作業,請呼叫AwsQuantumJob.create
與參數image_uri
指定。您可以使用 QPU、隨選模擬器,或在 Amazon Braket 混合任務提供的傳統處理器上本機執行程式碼。若要在傳統處理器上執行程式碼,請指定instanceType
和instanceCount
您希望通過更新InstanceConfig
。請注意,如果您指定了instance_count > 1
,您將需要確保您的代碼具有跨多個主機運行的能力。您可以選擇的執行個體數目上限為 5。
讓我們來看一個例子。
job = AwsQuantumJob.create( source_module="source_dir", entry_point="source_dir.algorithm_script:start_here", image_uri="111122223333.dkr.ecr.us-west-2.amazonaws.com/my-byoc-container:latest", instance_config=InstanceConfig(instanceType="ml.p3.8xlarge", instanceCount=3), device="local:braket/braket.local.qubit", # ... )
注意
設備 arn 允許您跟踪用作混合作業元數據的模擬器。可接受的值必須遵循格式device =
"local:<provider>/<simulator_name>"
。請記住,<provider>
和<simulator_name>
必須只包含字母,數字,_
,-
和.
。字串的長度為 256 個字元。
如果您打算使用 BYOC,而您並未使用的 BYOCAmazonBraket SDK 來創建量子任務,你應該傳遞環境變量的值AMZN_BRAKET_JOB_TOKEN
到jobToken
中的參數CreateQuantumTask
請求。如果不這樣做會導致量子任務無法獲得優先級,並被計為常規的獨立量子任務。