Bedrockでカスタムモデルのクロスアカウント共有とリージョンコピーが可能になりました！

## はじめに
これまでBedrockのデフォルトでは、カスタムモデルの使用は作成されたリージョンとアカウントでのみ利用可能でした。今回追加された機能では他のリージョンへのコピーや別AWSアカウントへの共有ができるようになりました！

![スクリーンショット 2024-08-02 9.50.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/416655a6-7440-4728-b8f9-b928dfb1a231.png)


## カスタムモデルのリージョンコピー

### カスタムモデルコピーのサポートリージョンとベースモデル
※Claude 3 Haikuはまだプレビュー中なのでClaude 3 Haikuを微調整したい場合は、事前にサポートへ問い合わせをしましょう。

| モデル | 米国東部 (バージニア北部) | 米国西部 (オレゴン) | アジア太平洋 (ムンバイ) | アジア太平洋 (シドニー) | ヨーロッパ (アイルランド) | ヨーロッパ (フランクフルト) | ヨーロッパ (ロンドン) | ヨーロッパ (パリ) | カナダ (中央) | 南米 (サンパウロ) |
|-------|:----------------------:|:------------------:|:---------------------:|:----------------------:|:------------------------:|:----------------------------:|:---------------------:|:------------------:|:-------------:|:--------------------:|
| Amazon Titan Text G1 - Lite | はい | はい | はい | はい | ゲート付き | はい | はい | はい | はい | はい |
| Amazon Titan Text G1 - Express | はい | はい | はい | はい | ゲート付き | いいえ | はい | はい | はい | はい |
| Amazon Titan Multimodal Embeddings G1 | はい | はい | はい | はい | ゲート付き | はい | はい | はい | はい | はい |
| Amazon Titan Image Generator G1 | はい | はい | はい | いいえ | ゲート付き | いいえ | はい | いいえ | いいえ | いいえ |
| Anthropic Claude Instant | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| Anthropic Claude 3 Haiku | はい | はい | はい | はい | ゲート付き | いいえ | いいえ | はい | いいえ | いいえ |
| Cohere Command | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| Cohere Command Light | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| Meta Llama 2 13B | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |
| Meta Llama 2 70B | はい | はい | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ | いいえ |

https://docs.aws.amazon.com/bedrock/latest/userguide/copy-model-support.html

### カスタムモデルコピーに必要な権限
モデルのコピーを実施するためには以下のIAM権限をIAMロールに付与する必要があります。

```json
{ 
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CopyModels",
            "Effect": "Allow",
            "Action": [
                "bedrock:CreateModelCopyJob",
                "bedrock:GetModelCopyJob",
                "bedrock:ListModelCopyJobs"
            ],
            "Resource": [
                "${model-arn}"
            ],
            "Condition": {
               "StringEquals": {
                   "aws:RequestedRegion": [
                        "${region}"
                   ]
               }
            }
        }
    ]
}
```

### コピーしてみた
まずはじめにコピー元となるカスタムモデルを以下を参照に用意します。

https://aws.amazon.com/jp/blogs/news/customize-models-in-amazon-bedrock-with-your-own-data-using-fine-tuning-and-continued-pre-training/

トレーニングジョブが完了してモデル一覧にカスタムモデルが表示されたら、該当のモデルを選択して「︙」->「Copy」をクリックします。

![スクリーンショット_2024-08-02_8_11_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/4162f27d-0b08-bfa7-d040-bb6c3b2b9b69.png)


コピージョブ作成画面に遷移したら「Model name」にモデル名を入力して、「Destination region」にコピー先リージョンを選択したら「Copy Model」をクリックします。

![スクリーンショット_2024-08-02_8_12_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/fb6b6295-75eb-b376-7fab-af710d0ec0ab.png)


コピー先リージョンにてBedrockのカスタムモデル->トレーニングジョブ画面に移動するとコピージョブが実行されていることが確認できます。

![スクリーンショット_2024-08-02_8_21_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/0c1e6939-45b2-faa1-a9df-c285322b581f.png)

私が試した際には数分程度でコピージョブが完了しました。

![スクリーンショット_2024-08-02_8_22_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/f14dc81e-3ec8-db75-7599-fcac9c4b6fba.png)

モデル一覧のタブを開くと、コピーしたカスタムモデルが表示されるようになります。

![スクリーンショット_2024-08-02_8_24_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/080142be-d668-dd2d-49c5-abbdbb0e5ec6.png)

無事コピーされたことが確認できました！

## カスタムモデルのクロスアカウント共有

### モデル共有のサポートリージョンとベースモデル
はい、モデル名をそのままにしたマークダウン形式の表を作成しました。

| モデル | 米国東部（バージニア州北部） | 米国西部（オレゴン） | アジア太平洋（ムンバイ） | アジア太平洋（シドニー） | ヨーロッパ（アイルランド） | ヨーロッパ（パリ） |
|--------|----------------------------|--------------------|-----------------------|-----------------------|--------------------------|-------------------|
| Amazon Titan Text G1 - Lite | はい | はい | はい | はい | ゲート付き | はい |
| Amazon Titan Text G1 - Express | はい | はい | はい | はい | ゲート付き | はい |
| Amazon Titan Multimodal Embeddings G1 | はい | はい | はい | はい | ゲート付き | はい |
| Amazon Titan Image Generator G1 | はい | はい | はい | いいえ | ゲート付き | いいえ |
| Anthropic Claude Instant | はい | はい | いいえ | いいえ | いいえ | いいえ |
| Anthropic Claude 3 Haiku | はい | はい | はい | はい | ゲート付き | はい |
| Cohere Command | はい | はい | いいえ | いいえ | いいえ | いいえ |
| Cohere Command Light | はい | はい | いいえ | いいえ | いいえ | いいえ |
| Meta Llama 2 13B | はい | はい | いいえ | いいえ | いいえ | いいえ |
| Meta Llama 2 70B | はい | はい | いいえ | いいえ | いいえ | いいえ |

### カスタムモデルの共有に必要な権限
別AWSアカウントへモデルを共有するには、AWS Resource Access ManagerとBedrockの関連権限が必要になります。

```json
{ 
    "Version": "2012-10-17",
    "Statement": [
        {
           "Sid": "ShareResources",
           "Effect": "Allow",
           "Action": [
               "ram:CreateResourceShare",
               "ram:UpdateResourceShare",
               "ram:DeleteResourceShare",
               "ram:AssociateResourceShare",
               "ram:DisassociateResourceShare",
               "ram:GetResourceShares"
           ],
           "Resource": [
               "${model-arn}"
           ]
        },
        {
            "Sid": "ShareCustomModels",
            "Effect": "Allow",
            "Action": [
                "bedrock:GetCustomModel",
                "bedrock:ListCustomModels",
                "bedrock:PutResourcePolicy",
                "bedrock:DescribeResourcePolicy",
                "bedrock:DeleteResourcePolicy"
            ],
            "Resource": [
                "${model-arn}"
            ]
        }
    ]
}
```

### クロスアカウント共有してみた

作成された該当のモデルを選択して「︙」->「Share」をクリックします。
![スクリーンショット_2024-08-02_8_27_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/becd7518-c313-6fa0-f848-f7332eff2688.png)

モデル共有画面にて「Resource share name」にリソース共有名と「Recipient　account ID」に共有先AWSアカウントIDを入力して、「Share model」をクリックします。

![スクリーンショット_2024-08-02_8_28_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/454c7f4e-6aba-b25a-70a3-ca9707e4734f.png)

Resource Access Managerにアクセスするとリソースの共有状況がわかります。

![スクリーンショット_2024-08-02_8_31_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/8040e0f8-e21c-de7a-c409-4162124622e1.png)

共有先AWSアカウントにログインして、共有をい実行したリージョンからResource Access Managerにアクセスすると「自分と共有」の「リソースの共有」画面にて、共有元で指定したリソースが確認できますので、これをクリックします。

![スクリーンショット_2024-08-02_8_45_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/8c25df32-3ce4-394f-8b85-5250585bab78.png)

所有者、レシーバーにはそれぞれのAWSアカウントが表示されているので、自身が共有したものであることを確認した後、「リソース共有を承認」をクリックします。

![スクリーンショット_2024-08-02_8_45_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/b36abd66-aa69-8fe2-183a-4bc11aa5de0e.png)

最後にリソースの共有を承認画面にて「承認」をクリックします。

![スクリーンショット_2024-08-02_8_45_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/640d383a-2a41-6f5f-3037-a425e6038e0b.png)

以上で、アカウント間のカスタムモデル共有が完了しました。

Bedrockのカスタムモデル画面に移動すると「Models shared with you」セクションにて共有されたカスタムモデルが表示されていることが確認できました。

![スクリーンショット_2024-08-02_8_51_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/0edddd5e-069d-d5d0-7aae-dbe13d195b6b.png)

### 共有の解除
Resource Access Managerにて該当の共有リソースを選択して「共有プリンシパル」で共有先AWSアカウントIDであるプリンシパルIDを選択した後に「関連付け解除」をクリック

![スクリーンショット_2024-08-02_8_59_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/3c79fa94-1f3c-337b-3730-516374f8fb64.png)

少しするとステータスが「関連付けが解除されました」となります。

![スクリーンショット_2024-08-02_9_03_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/c5dd2f0c-9494-0d77-900d-fde6ce2021b4.png)

共有先アカウントにログインすると、Resource Access Manager及びBedrockのカスタムモデル画面から先程の共有モデルが消えていることが確認できます。

![スクリーンショット 2024-08-02 9.05.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/1531f8ce-c76d-3a38-df4f-40bf7c2277a6.png)

![スクリーンショット 2024-08-02 9.05.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/31a0e059-33fe-56d7-209e-e8750c86f39d.png)

## さいごに
クロスアカウント共有とリージョンコピー機能の追加によって、作成したカスタムモデルの可搬性がグッとあがりました。これにより開発環境でカスタムモデルを作成して、同様のモデルをSTG環境、本番環境アカウントへ共有、或いはアプリケーションが実行されているそれぞれのリージョンへコピーといったことが容易になったのではないでしょうか。

一方で作成したカスタムモデルを用いて推論を行うには、**高額なプロビジョンドスループットの購入**が前提にあるので、注意が必要です！

https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-use.html