

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタムモデルインポート用のコードサンプル
<a name="custom-model-import-code-samples"></a>

次のコードサンプルは、アクセス許可の設定、カスタムモデルインポートジョブの作成、インポートジョブとインポートされたモデルの詳細の表示、インポートされたモデルの削除の方法を示しています。これらのコードサンプルは、Mistral AI、Llama、、Qwen、GPTBigCode、および FlanMixtralアーキテクチャに適用されます。

## 重要: モデルアーキテクチャのサポート
<a name="model-architecture-support"></a>

**GPT-OSS モデルの制限:**
+ **Converse API Not Supported:** 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、GPTBigCode、および FlanMixtralアーキテクチャでのみサポートされています。

[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. IAM コンソール ([https://console.aws.amazon.com/iam](https://console.aws.amazon.com/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) リクエストを実行し、{{${policy-arn}}} を返された `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 で 1 つのプロンプトを送信する](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 で 1 つのプロンプトを送信する](inference-invoke.md)」を参照してください。

インポートしたモデルを削除するには、削除するインポートしたモデルのモデル名またはモデル ARN を使用して、次のコマンドを実行します。

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

------