Amazon Nova で Bedrock Model Distillation を使ってみた
こんにちは、森田です。
本記事では、re:Invent 2024 で発表された Amazon Bedrock Model Distillation を実際に使ってみたいと思います。
Amazon Bedrock Model Distillation とは
Amazon Bedrock で蒸留モデルを作成することができる機能です。
蒸留モデルを作ることで応答速度やコストの観点でメリットがあるとされています。
詳しくは以下も併せてご参照ください。
ざっくりと仕組み
Model Distillation では、生徒モデルを学習させるためのデータが必要となります。
また、このデータは、教師モデルにデータセットを入力することで作成されます。
やってみた
データの準備
各入力データについては、以下のフォーマットで記述します。
{
"schemaVersion": "bedrock-conversation-2024",
"system": [
{
"text": "A chat between a curious User and an artificial intelligence Bot. The Bot gives helpful, detailed, and polite answers to the User's questions."
}
],
"messages": [
{
"role": "user",
"content": [
{
"text": "What is the weather like today?"
}
]
},
{
"role": "assistant",
"content": [
{
"text": "Today's weather is sunny."
}
]
}
]
}
schemaVersion
としてbedrock-conversation-2024
を指定するという点がポイントです。
また、Amazon Nova のみ、マルチターンの会話を対応しています。
これらのデータを複数個用意してデータセットを作成します。
データセットにする際に、JSONL形式で格納します。
{"schemaVersion":"bedrock-conversation-2024","system":[{"text":"A chat between a curious User and an artificial intelligence Bot. The Bot gives helpful, detailed, and polite answers to the User's questions."}],"messages":[{"role":"user","content":[{"text":"What is the weather like today?"}]},{"role":"assistant","content":[{"text":"Today's weather is sunny."}]}]}
{"schemaVersion":"bedrock-conversation-2024","system":[{"text":"A chat between a curious User and an artificial intelligence Bot. The Bot gives helpful, detailed, and polite answers to the User's questions about AWS services."}],"messages":[{"role":"user","content":[{"text":"What is AWS?"}]},{"role":"assistant","content":[{"text":"AWS (Amazon Web Services) is Amazon's cloud computing platform that provides a wide range of IT services through the internet. These services include computing, storage, databases, and more. Users only pay for what they use, making it a cost-effective solution for businesses of all sizes to build and run their IT systems."}]}]}
この時のデータセットのサンプル数としては、100個以上必要なのでご注意ください。
作成したJSONLファイルは、S3バケットへ格納します。
ジョブの作成
続いて、蒸留ジョブを作成します。
今回は、バージニアリージョンのマネジメントコンソールから行います。
ジョブの作成時に、教師モデルと生徒モデルの指定を行います。
教師モデルをNova Pro
とすると、Nova Micro、Nova Lite
が選択できるようでした。
Directly upload to S3 location
を選択して、JSONLファイルのS3パスを指定します。
あとは、ロールの設定などを行い、ジョブの作成をクリックします。
ジョブの完了まで待ちます。(100個のデータで学習させた場合、1~2時間ほどかかりました。)
ジョブが正常に完了すると、以下のようにカスタムモデルとして表示されます。
モデル名をクリックすると、蒸留モデルのARNが確認できます。
モデルを呼び出すためには、プロビジョンドスループットが必要となります。
最小請求単位 1 時間なので、利用する際にはご注意ください。
さいごに
今回は、データセットを実際に作成して学習させてみました。
データセットのフォーマットで結構ハマりましたが、なんとかモデルの作成までできました。
モデル呼び出しログを使ったモデル蒸留もどこかのタイミングでやってみたいと思います。