自訂模型匯入的程式碼範例 - Amazon Bedrock

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

自訂模型匯入的程式碼範例

下列程式碼範例示範如何設定許可、建立自訂模型匯入任務、檢視匯入任務和匯入模型的詳細資訊,以及刪除匯入的模型。這些程式碼範例適用於 Mistral AI、Llama、Qwen、GPTBigCode、 Flan和 Mixtral架構。

重要:模型架構支援

GPT-OSS 模型限制:

  • 不支援 Converse API: GPT-OSS 型自訂模型匯入模型不支援 Converse API 或 ConverseStream API。

  • 請改用 InvokeModel API:使用 GPT-OSS 型自訂模型時,客戶必須使用 InvokeModel API。

  • API 結構描述需求:GPT-OSS模型需要 OpenAI 相容 API 結構描述:

    • 完成請求的完成格式

    • 聊天請求的 ChatCompletion 格式

    • 回應格式遵循 OpenAI API 規格

  • Converse API 支援的模型:Converse API 僅支援 Mistral AI、Llama、Qwen、Flan、 GPTBigCode和 Mixtral架構。

如需使用 InvokeModel API 的GPT-OSS模型使用範例,請參閱請求/回應結構描述的 OpenAI API 文件。

  1. 準備模型檔案以進行匯入

    1. 如果您是從 Amazon S3 儲存貯體進行匯入,則需要以 Hugging Face 權重格式提供模型檔案。如需詳細資訊,請參閱從 Amazon S3 匯入模型來源

    2. 為模型檔案建立 Amazon S3 儲存貯體 (名稱必須是唯一的)。

    3. 將模型檔案上傳至儲存貯體。

  2. 建立政策以存取模型檔案,並將其連接至具有 Amazon Bedrock 信任關係的 IAM 角色。選擇您偏好方法的索引標籤,然後遵循下列步驟:

    Console
    1. 建立 Amazon S3 政策以存取內含模型檔案的 Amazon S3 儲存貯體

      1. 導覽至位於 https://console.aws.amazon.com/iam 的 IAM 主控台,然後從左側導覽窗格中選擇政策

      2. 選取建立政策,然後選擇 JSON 以開啟政策編輯器

      3. 貼上下列政策,將 ${model-file-bucket} 取代為儲存貯體名稱,然後選取下一步

        JSON
        JSON
        { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${model-file-bucket}", "arn:aws:s3:::${model-file-bucket}/*" ] } ] }
      4. 將政策命名為 S3BucketPolicy,然後選取建立政策

    2. 建立 IAM 角色,並連接該政策。

      1. 在左側導覽窗格中,選擇角色,然後選取建立角色

      2. 選取自訂信任政策,貼上下列政策,然後選取下一步

        JSON
        JSON
        { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
      3. 搜尋您建立的 S3BucketPolicy 政策、選取核取方塊,然後選擇下一步

      4. 將角色命名為 MyImportModelRole,然後選取建立角色

    CLI
    1. 建立名為 BedrockTrust.json 的檔案,並將下列政策貼入其中。

      JSON
      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 建立另一個名為 S3BucketPolicy.json 的檔案,並將下列政策貼入其中,以儲存貯體名稱取代 ${model-file-bucket}

      JSON
      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${model-file-bucket}", "arn:aws:s3:::${model-file-bucket}/*" ] } ] }
    3. 在終端中,瀏覽至包含您建立之政策的資料夾。

    4. 提出 CreateRole 請求,以建立名為 MyImportModelRole 的 IAM 角色,以及連接您建立的 BedrockTrust.json 信任政策。

      aws iam create-role \ --role-name MyImportModelRole \ --assume-role-policy-document file://BedrockTrust.json
    5. 提出 CreatePolicy 請求,使用您建立的 S3BucketPolicy.json 檔案建立 S3 資料存取政策。回應會傳回政策的 Arn

      aws iam create-policy \ --policy-name S3BucketPolicy \ --policy-document file://S3BucketPolicy.json
    6. 提出 AttachRolePolicy 請求,將 S3 資料存取政策連接至角色,在上一個步驟的回應中將 policy-arn 取代為 ARN:

      aws iam attach-role-policy \ --role-name MyImportModelRole \ --policy-arn ${policy-arn}
    Python
    1. 執行下列程式碼來提出 CreateRole 請求,以建立名為 MyImportModel 的 IAM 角色,並提出 CreatePolicy 請求,以建立名為 S3BucketPolicy 的 S3 資料存取政策。對於 S3 資料存取政策,請將 ${model-file-bucket} 取代為 S3 儲存貯體名稱。

      import boto3 import json iam = boto3.client("iam") iam.create_role( RoleName="MyImportModelRole", AssumeRolePolicyDocument=json.dumps({ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }) ) iam.create_policy( PolicyName="S3BucketPolicy", PolicyDocument=json.dumps({ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${training-bucket}", "arn:aws:s3:::${training-bucket}/*" ] } ] }) )
    2. 回應中會傳回 Arn。執行下列程式碼片段來提出 AttachRolePolicy 請求,以傳回的 Arn 取代 ${policy-arn}

      iam.attach_role_policy( RoleName="MyImportModelRole", PolicyArn="${policy-arn}" )
  3. 選取語言以查看程式碼範例,以呼叫自訂模型匯入 API 操作。

CLI

若要提交自訂模型匯入任務,請在終端機的命令列中執行下列命令,將 ${my-import-model-role-arn} 取代為您設定的模型角色,並將 s3-bucket-path 取代為模型檔案的 S3 儲存貯體路徑。

aws bedrock create-model-import-job --job-name MyImportedModelJobName --imported-model-name MyImportedModelName --role-arn ${my-import-model-role-arn} --model-data-source '{"s3DataSource": {"s3Uri": s3-bucket-path }}

回應會傳回 jobArn。自訂匯入任務需要一些時間才能完成。您可以使用 jobArn 搭配下列命令來檢查匯入任務的狀態。

以下是選填欄位:

  • 若要新增 VPC 組態,請將下列引數新增至上述命令,以指定安全性群組和子網路:

    -\\-vpc-config '{securityGroupIds": ["sg-xx"], "subnetIds": ["subnet-yy", "subnet-zz"]}'
  • 若要使用 KMS 金鑰加密模型,請將下列引數新增至上述命令,取代該值,以指定要用來加密模型的金鑰。

    -\\-customModelKmsKeyId 'arn:aws:kms:region:account-id:key/key-id'
  • 若要新增標籤,請將以下引數新增到上述命令中,將鍵和值替換為要連接到工作和/或輸出模型的標籤,並確保用空格分隔鍵/值對:

    -\\-tags key=key1,value=value1 key=key2,value=value2

回應會傳回 jobArn。自訂匯入任務需要一些時間才能完成。您可以使用 jobArn 搭配下列命令來檢查匯入任務的狀態。

aws bedrock get-model-import-job \ --job-identifier "jobArn"

回應外觀會與下列類似:

{ "jobArn": ${job-arn} , "jobName": MyImportedModelJobName, "importedModelName": MyImportedModelName, "roleArn": ${my-role-arn}, "modelDataSource": { "s3DataSource": { "s3Uri": "${S3Uri}" } }, "status": "Complete", "creationTime": "2024-08-13T23:38:42.457Z", "lastModifiedTime": "2024-08-13T23:39:25.158Z"

statusComplete 時。匯入任務即完成。

若要在新匯入的模型上執行推論,您必須提供匯入模型的 ARN 作為 model-id。取得匯入模型的 ARN。

aws bedrock list-imported-models

回應包含模型名稱和模型 ARN。使用模型 ARN 來調用匯入的模型。如需詳細資訊,請參閱使用 InvokeModel 提交單一提示

{ "modelSummaries": [ { "modelArn": model-arn, "modelName": "MyImportedModelName", "modelArchitecture":model-architecture, "instructSupported":Y, "creationTime": "2024-08-13T19:20:14.058Z" } ] }

若要刪除匯入的模型,請在終端機的命令列中使用您要刪除之匯入模型的模型名稱或模型 ARN,執行下列命令。

aws bedrock delete-imported-model --model-identifier MyImportedModelName
Python

執行下列程式碼片段以提交自訂模型匯入任務。將 my-region 取代為您匯入模型的區域,將 ${my-import-model-role-arn} 取代為您設定的 MyImportModelRole ARN,並將 ${model-file-bucket} 取代為 S3 儲存貯體名稱。

import boto3 import json REGION_NAME = my-region bedrock = boto3.client(service_name='bedrock', region_name=REGION_NAME) JOB_NAME = MyImportedModelJobName ROLE_ARN = ${my-import-model-role-arn} IMPORTED_MODEL_NAME = ImportedModelName S3_URI = ${S3Uri} # createModelImportJob API create_job_response = bedrock.create_model_import_job( jobName=JOB_NAME, importedModelName=IMPORTED_MODEL_NAME, roleArn=ROLE_ARN, modelDataSource={ "s3DataSource": { "s3Uri": S3_URI } }, ) job_arn = create_job_response.get("jobArn")

以下是選填欄位。

  • 若要新增 VPC 組態,請將下列引數新增至上述命令,以指定安全性群組和子網路:

    vpc-config = {'securityGroupIds: ["sg-xx".], 'subnetIds': [subnet-yy, 'subnet-zz']}'
  • 若要使用 KMS 金鑰加密模型,請將下列引數新增至上述命令,取代該值,以指定要用來加密模型的金鑰。

    importedModelKmsKeyId = 'arn:aws:kms:region:account-id:key/key-id'
  • 若要新增標籤,請將以下引數新增到上述命令中,將鍵和值替換為要連接到工作和/或輸出模型的標籤,並確保用空格分隔鍵/值對:

    jobTags key=key1,value=value1 key=key2,value=value2

回應會傳回 jobArn

job_arn = create_job_response.get("jobArn")

自訂匯入任務需要一些時間才能完成。您可以使用 jobArn 搭配下列命令來檢查匯入任務的狀態。

bedrock.get_model_import_job(jobIdentifier=jobArn)

statusCompleted 時,匯入任務即完成。

若要在新匯入的模型上執行推論,您必須提供匯入模型的 ARN 作為 model-id。取得匯入模型的 ARN。

response_pt = bedrock.list_imported_models( creationTimeBefore=datetime (2015,1,1, creationTimeAfter= datetime (2015,1,1, nameContains = 'MyImportedModelName, maxresults = 123 nextToken = 'none', sortBy = 'creationTime', sortOrder = 'Ascending'

回應會傳回 modelArn 以及匯入模型的其他詳細資訊。

{ 'nextToken': '', 'modelSummaries': [ { 'modelArn': 'your-model-arn', 'modelName': 'MyImportedModelName', 'modelArchitecture':model-architecture, 'instructSupported':Y, 'creationTime': datetime(2015, 1, 1) }, ]

使用模型 ARN 來調用匯入的模型。如需詳細資訊,請參閱使用 InvokeModel 提交單一提示

若要刪除匯入的模型,請使用下列命令,使用您要刪除之匯入模型的模型名稱或模型 ARN。

response = client.delete_imported_model( modelIdentifier='MyImportedModelName' )