

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

# 自訂模型匯入的程式碼範例
<a name="custom-model-import-code-samples"></a>

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

## 重要：模型架構支援
<a name="model-architecture-support"></a>

**GPT-OSS 模型限制：**
+ **不支援 Converse API：** GPT-OSS 型自訂模型匯入模型不支援 Converse API 或 ConverseStream API。
+ **請改用 InvokeModel API：**使用 GPT-OSS 型自訂模型時，客戶必須使用 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API。
+ **API 結構描述需求：**GPT-OSS模型需要 OpenAI 相容 API 結構描述：
  + 完成請求的完成格式
  + 聊天請求的 ChatCompletion 格式
  + 回應格式遵循 OpenAI API 規格
+ **Converse API 支援的模型：**Converse API 僅支援 Mistral AI、Llama、Qwen、Flan、 GPTBigCode和 Mixtral架構。

如需使用 [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) API 的GPT-OSS模型使用範例，請參閱請求/回應結構描述的 OpenAI API 文件。

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

   1. 如果您是從 Amazon S3 儲存貯體進行匯入，則需要以 Hugging Face 權重格式提供模型檔案。如需詳細資訊，請參閱[從 Amazon S3 匯入模型來源](model-customization-import-model.md#model-customization-import-model-source)。

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

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

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

------
#### [ Console ]

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

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

      1. 選取**建立政策**，然後選擇 **JSON** 以開啟**政策編輯器**。

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

------
#### [ 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}}}/*"
                     ]
                   }
                 ]
               }
         ```

------

      1. 將政策命名為 {{S3BucketPolicy}}，然後選取**建立政策**。

   1. 建立 IAM 角色，並連接該政策。

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

      1. 選取**自訂信任政策**，貼上下列政策，然後選取**下一步**。

------
#### [ JSON ]

****  

         ```
         {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
                 {
                     "Effect": "Allow",
                     "Principal": {
                         "Service": "bedrock.amazonaws.com"
                     },
                     "Action": "sts:AssumeRole"
                 }
             ] 
         }
         ```

------

      1. 搜尋您建立的 {{S3BucketPolicy}} 政策、選取核取方塊，然後選擇**下一步**。

      1. 將角色命名為 {{MyImportModelRole}}，然後選取{{建立角色}}。

------
#### [ CLI ]

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

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "bedrock.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ] 
      }
      ```

------

   1. 建立另一個名為 {{S3BucketPolicy.json}} 的檔案，並將下列政策貼入其中，以儲存貯體名稱取代 {{${model-file-bucket}}}。

------
#### [ 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}}}/*"
                  ]
              }
           ]
      }
      ```

------

   1. 在終端中，瀏覽至包含您建立之政策的資料夾。

   1. 提出 [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) 請求，以建立名為 {{MyImportModelRole}} 的 IAM 角色，以及連接您建立的 {{BedrockTrust.json}} 信任政策。

      ```
      aws iam create-role \
          --role-name MyImportModelRole \
          --assume-role-policy-document file://BedrockTrust.json
      ```

   1. 提出 [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html) 請求，使用您建立的 {{S3BucketPolicy.json}} 檔案建立 S3 資料存取政策。回應會傳回政策的 `Arn`。

      ```
      aws iam create-policy \
          --policy-name S3BucketPolicy \
          --policy-document file://S3BucketPolicy.json
      ```

   1. 提出 [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html) 請求，將 S3 資料存取政策連接至角色，在上一個步驟的回應中將 `policy-arn` 取代為 ARN：

      ```
      aws iam attach-role-policy \
          --role-name MyImportModelRole \
          --policy-arn {{${policy-arn}}}
      ```

------
#### [ Python ]

   1. 執行下列程式碼來提出 [CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) 請求，以建立名為 {{MyImportModel}} 的 IAM 角色，並提出 [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html) 請求，以建立名為 {{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}}}/*"
                      ]
                  }
                ]
             })
           )
      ```

   1. 回應中會傳回 `Arn`。執行下列程式碼片段來提出 [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html) 請求，以傳回的 `Arn` 取代 {{${policy-arn}}}。

      ```
      iam.attach_role_policy(
          RoleName="MyImportModelRole",
          PolicyArn="{{${policy-arn}}}"
      )
      ```

------

1. 選取語言以查看程式碼範例，以呼叫自訂模型匯入 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"
```

當 `status` 為 `Complete` 時。匯入任務即完成。

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

```
aws bedrock list-imported-models              
```

回應包含模型名稱和模型 ARN。使用模型 ARN 來調用匯入的模型。如需詳細資訊，請參閱[使用 InvokeModel 提交單一提示](inference-invoke.md)。

```
{
    "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}})
```

當 `status` 為 `Completed` 時，匯入任務即完成。

若要在新匯入的模型上執行推論，您必須提供匯入模型的 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 提交單一提示](inference-invoke.md)。

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

```
response = client.delete_imported_model(
    modelIdentifier='{{MyImportedModelName}}'
            )
```

------