Azure Machine Learning スタジオを使用して AI21 の Jamba-Instruct モデルをデプロイする方法

この記事では、Azure Machine Learning スタジオを使用して、AI21 の Jamba-Instruct モデルを従量課金制のサーバーレス API としてデプロイする方法を学習します。

Jamba Instruct モデルは、AI21 のハイブリッド Mamba-Transformer アーキテクチャを利用した AI21 の運用環境グレードの Mamba ベースの大規模言語モデル (LLM) です。 これは、AI21 のハイブリッド構造状態空間モデル (SSM) トランスフォーマー Jamba モデルのインストラクションチューニングされたバージョンです。 Jamba Instruct モデルは、品質とパフォーマンスに関して商業利用できる信頼性を持つように構築されています。

重要

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することは推奨されません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。

詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

Jamba Instruct モデルをサーバーレス API としてデプロイする

モデル カタログ内の特定のモデルは、従量課金制の請求でサーバーレス API としてデプロイでき、企業のセキュリティとコンプライアンス組織のニーズを維持しながら、サブスクリプションでホストせずに API として使用する方法が提供されます。 このデプロイ オプションでは、サブスクリプションからのクォータを必要としません。

従量課金制のサーバーレス API としてデプロイされる AI21-Jamba-Instruct モデルは、Microsoft Azure Marketplace を通じて AI21 によって提供されます。 AI21 は、このモデルの使用条件と価格を変更または更新する可能性があります。

サーバーレス API としてデプロイされた Jamba Instruct の使用を開始するには、LangChainLiteLLMOpenAIAzure API との統合を検討してください。

ヒント

AI21 のブログMicrosoft Tech Community ブログを通して、Azure AI モデル カタログで現在利用可能な AI21 の Jamba-Instruct モデルに関するお知らせを確認してください。

前提条件

  • 有効な支払い方法を持つ Azure サブスクリプション。 無料または試用版の Azure サブスクリプションは機能しません。 Azure サブスクリプションを持っていない場合は、始めるために有料の Azure アカウントを作成してください。

  • Azure Machine Learning ワークスペースとコンピューティング インスタンス。 これらを所有していない場合は、クイックスタート: ワークスペース リソースの作成に関する記事の手順に従って作成してください。 Jamba Instruct 用のサーバーレス API モデル デプロイ オファリングは、次のリージョン内に作成されたワークスペースでのみ使用できます。

    • 米国東部
    • 米国東部 2
    • 米国中北部
    • 米国中南部
    • 米国西部
    • 米国西部 3
    • スウェーデン中部

    サーバーレス API エンドポイントのデプロイをサポートする各モデルが利用できるリージョンの一覧については、「サーバーレス API エンドポイントのモデルが利用できるリージョン」を参照してください。

  • Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure Machine Learning の操作に対するアクセスを許可するために使用されます。 この記事の手順を実行するには、ユーザー アカウントに、Azure サブスクリプションの所有者共同作成者ロールを割り当てる必要があります。 別の方法として、アカウントに、次のアクセス許可を持つカスタム ロールを割り当てることができます。

    • Azure サブスクリプションで - ワークスペースを Azure Marketplace オファリングにサブスクライブするため、各ワークスペースに対して 1 回、オファリングごと:

      • Microsoft.MarketplaceOrdering/agreements/offers/plans/read
      • Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
      • Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.SaaS/register/action
    • リソース グループで - SaaS リソースを作成して使用するため:

      • Microsoft.SaaS/resources/read
      • Microsoft.SaaS/resources/write
    • ワークスペースで - エンドポイントをデプロイするため (Azure Machine Learning データ サイエンティスト ロールには、既に次のアクセス許可が含まれています):

      • Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
      • Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*

    アクセス許可の詳細については、「Azure Machine Learning ワークスペースへのアクセスの管理」を参照してください。

新しいデプロイを作成する

以下の手順は、AI21-Jamba-Instruct のデプロイ方法を示します。 デプロイを作成するには:

  1. [Azure Machine Learning Studio] に移動します。

  2. モデルをデプロイするワークスペースを選択します。 サーバーレス API モデル デプロイ オファリングを使用するには、ワークスペースが米国東部 2 またはスウェーデン中部リージョンに属している必要があります。

  3. デプロイするモデルをモデル カタログから選択します。

    別の方法として、ワークスペースに移動し、[エンドポイント]>[Serverless endpoints] (サーバーレス エンドポイント)>[作成] を選択して、デプロイを開始することもできます。

  4. モデル カタログ内のモデルの概要ページで、[デプロイ] を選択し、次に [Azure AI Content Safety を使用したサーバーレス API] を選びます。

  5. デプロイ ウィザードで、[Azure Marketplace の使用条件] へのリンクを選び、使用条件の詳細を確認します。

  6. [Marketplace オファーの詳細] タブを選択して、選択したモデルの価格について確認することもできます。

  7. これが初めてワークスペースにモデルをデプロイする機会である場合は、Azure Marketplace の特定のオファリングに対し、ワークスペースをサブスクライブする必要があります。 この手順では、前提条件に記載されている Azure サブスクリプションのアクセス許可とリソース グループのアクセス許可がアカウントに付与されていることが必要です。 各ワークスペースには、特定の Azure Marketplace オファリングへのそれぞれのサブスクリプションがあり、これにより支出を制御および監視できます。 [サブスクライブしてデプロイ] を選択します。 現在、ワークスペース内の各モデルに対して 1 つのデプロイしかできません。

  8. 特定の Azure Marketplace オファリングにワークスペースをサインアップすると、"同じ" ワークスペース内の "同じ" オファリングの以降のデプロイで再度サブスクライブする必要はありません。 そのため、以降のデプロイに対するサブスクリプション レベルのアクセス許可を持つ必要はありません。 このシナリオが該当する場合は、[デプロイを続行] を選択します。

  9. デプロイに名前を付けます。 この名前は、デプロイ API URL の一部になります。 この URL は、Azure リージョンごとに一意である必要があります。

  10. 展開 を選択します。 デプロイが完了し、サーバーレス エンドポイント ページにリダイレクトされるまで待ちます。

  11. エンドポイントを選択してその [詳細] ページを開きます。

  12. [テスト] タブを選択して、モデルの操作を開始します。

  13. デプロイを呼び出して予測変換を生成する [ターゲット] URL と [秘密鍵] をメモすることもできます。

  14. エンドポイントの詳細、URL、アクセス キーは、[ワークスペース]>[エンドポイント]>[Serverless endpoints] (サーバーレス エンドポイント) に移動することでいつでも確認できます。

サーバーレス API としてデプロイされた Jamba モデルの課金について確認するには、「サーバーレス API としてデプロイされた Jamba モデルのコストとクォータに関する考慮事項」を参照してください。

Jamba Instruct をサービスとして使用する

Jamba Instruct モデルは以下のようにして使用できます。

  1. [ワークスペース] で、[エンドポイント]>[Serverless endpoints] (サーバーレス エンドポイント) を選択します。
  2. 作成した のデプロイを見つけて選びます。
  3. [ターゲット] URL と [キー] のトークン値をコピーします。
  4. ルート /chat/completions 上の Azure AI Model Inference API または /v1/chat/completions 上の AI21 の Azure クライアントを使用して API 要求を行います。

API の使用方法の詳細については、リファレンスのセクションを参照してください。

サーバーレス API としてデプロイされた Jamba Instruct の参照

Jamba Instruct モデルは、以下の API を両方とも受け入れます。

  • 複数ターン チャットまたは単一ターン質問回答用のルート /chat/completions 上の Azure AI モデル推論 API [Azure AI Model Inference API]。 この API がサポートされているのは、Jamba Instruct がチャット補完用に微調整されているからです。
  • AI21 の Azure クライアント。 呼び出される REST エンドポイントの詳細については、「AI21 の REST ドキュメント」を参照してください。

Azure AI モデル推論 API

Azure AI Model Inference API スキーマについては、チャット入力候補のリファレンス記事を参照してください。OpenAPI 仕様は、エンドポイント自体から取得できます

単一ターン チャットとマルチターン チャットは同じ要求と応答の形式を持ちますが、質問回答 (単一ターン) で要求内に含まれるのは 1 つのユーザー メッセージだけであるのに対し、マルチターン チャットでは各要求でチャット メッセージ履歴全体を送信する必要があるという点が異なります。

マルチターン チャットにおいて、メッセージ スレッドは以下の性質を持ちます。

  • ユーザーとモデルからのすべてのメッセージを古いものから新しいものの順で保持します。
  • メッセージは userassistant のロール メッセージに交互に切り替わります
  • 必要に応じて、メッセージ スレッドは、コンテキストを提供するシステム メッセージで始まります。

次の擬似コードは、最初のシステム メッセージを含むチャット要求の 4 番目の呼び出しのメッセージ スタックの例です。

[
    {"role": "system", "message": "Some contextual information here"},
    {"role": "user", "message": "User message 1"},
    {"role": "assistant", "message": "System response 1"},
    {"role": "user", "message": "User message 2"},
    {"role": "assistant"; "message": "System response 2"},
    {"role": "user", "message": "User message 3"},
    {"role": "assistant", "message": "System response 3"},
    {"role": "user", "message": "User message 4"}
]

AI21 の Azure クライアント

メソッド POST を使用して、/v1/chat/completions ルートに要求を送信します。

Request

POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json

要求スキーマ

ペイロードは、次のパラメーターを含む JSON 形式の文字列です:

キー Type 必須であるか/既定値 使用できる値 説明
model string `Default` である必要があります。
messages list[object] オブジェクトのリスト (メッセージごとに 1 つ、古いものから新しいものの順)。 最も古いメッセージはロールが system である可能性があります。 それ以降のすべてのメッセージは、ユーザー ロールとアシスタント ロールの間で交互に切り替わる必要があります。 以下のメッセージ オブジェクト定義を参照してください。
max_tokens integer N
4096
0 – 4096 生成された各応答メッセージに対して許可するトークンの最大数。 通常、出力の長さを制限する最善の方法は、システム プロンプトで長さの制限を指定することです (たとえば、"回答を 3 つの文までに制限する" など)
temperature float N
1
0.0 – 2.0 各回答でどの程度の変動を提供するか。 この値を 0 に設定すると、同じ質問に対して毎回同じ応答が行われることが保証されます。 高い値を設定すると、変動幅が増えます。 トークンのサンプリング元の分布を変更します。 これと top_p の両方ではなく、いずれかを変更することをお勧めします。
top_p float N
1
0 <value<=1.0 各ステップの次のトークンのプールを、考えられるトークンの上位 N パーセンタイルに制限します。1.0 は考えられるトークンすべてのプールを意味し、0.01 は最も可能性の高い次のトークンのみのプールを意味します。
stop stringまたはlist[string] N
"" API がそこで出力の生成を停止する必要がある (複数の) 単語を含む文字列または文字列のリスト。 改行は "\n" として使用できます。 返されるテキストに停止シーケンスは含まれません。
n integer N
1
1 – 16 各プロンプトに対して何個の応答を生成するべきか。 Azure AI Studio のプレイグラウンドでは、マルチ応答プレイグラウンドを使用するため n=1 となります。
stream boolean N
False
TrueまたはFalse ストリーミングを有効にするかどうか。 true の場合、結果は一度に 1 つのトークンとして返されます。 true に設定した場合、n は 1 である必要がありますが、これは自動的に設定されます。

messages オブジェクトには次のフィールドがあります:

  • role: ["文字列、必須"] メッセージの作成者または目的。 次のいずれかの値です。
    • user: ユーザーによって指定された入力。 ここで指定された、system プロンプト内で指定された命令と競合する命令は、system プロンプトの命令よりも優先されます。
    • assistant: そのモデルによって生成される応答。
    • system: 生成されるメッセージのトーンと音声に関する一般的なガイダンスを提供する初期命令。 初期システム メッセージは省略可能ですが、チャットのトーンに関するガイダンスを提供するために推奨されています。 たとえば、"あなたは地球科学のバックグラウンドと魅力的なフランス訛りを持つ親切なチャットボットです" などです。
  • content: ["文字列、必須"] メッセージの内容。

要求の例

単一ターンの例

{
    "model": "jamba-instruct",
    "messages": [
    {
      "role":"user",
      "content":"Who was the first emperor of rome?"}
  ],
    "temperature": 0.8,
    "max_tokens": 512
}

チャットの例 (3 番目のユーザー応答を含む 4 番目の要求)

{
  "model": "jamba-instruct",
  "messages": [
     {"role": "system",
      "content": "You are a helpful genie just released from a bottle. You start the conversation with 'Thank you for freeing me! I grant you one wish.'"},
     {"role":"user",
      "content":"I want a new car"},
     {"role":"assistant",
      "content":"🚗 Great choice, I can definitely help you with that! Before I grant your wish, can you tell me what kind of car you're looking for?"},
     {"role":"user",
      "content":"A corvette"},
     {"role":"assistant",
      "content":"Great choice! What color and year?"},
     {"role":"user",
      "content":"1963 black split window Corvette"}
  ],
  "n":3
}

応答スキーマ

応答は、結果がストリーミングされるか否かに若干左右されます。

"ストリーミングされていない結果" では、すべての応答が 1 つの応答内にまとめて提供されます。これには usage プロパティも含まれます。

"ストリーミングされた結果" では、

  • 各応答は choices フィールド内に 1 つのトークンを含んでいます。
  • choices オブジェクトの構造が異なります。
  • usage オブジェクトを含むのは最後の応答だけです。
  • 応答全体が data オブジェクト内にラップされます。
  • 最後の応答オブジェクトは data: [DONE] です。

応答ペイロードは、次のフィールドを持つディクショナリです。

キー Type 説明
id string 要求の一意の識別子。
model string 使用されるモデルの名前。
choices list[object モデルによって生成された応答テキスト。 非ストリーミング応答の場合、これは n 個の項目を含むリストです。 ストリーミングされた応答の場合、これは 1 つのトークンを含む 1 つのオブジェクトです。 以下のオブジェクトの説明を参照してください。
created integer 入力候補が作成されたときの Unix タイムスタンプ (秒単位)。
object string オブジェクトの種類。これは常に chat.completion です。
usage object 入力候補要求の使用状況の統計情報。 詳細については以下を参照してください。

choices 応答オブジェクトには、モデルによって生成された応答が含まれています。 オブジェクトには次のフィールドがあります:

キー Type 説明
index integer メッセージのリスト内の 0 から始まるメッセージのインデックス。 リスト内の位置に対応していない場合があります。 ストリーミングされたメッセージの場合、これは常に 0 です。
messageまたはdelta object 生成されたメッセージ (またはストリーミング応答内のトークン)。 要求内での記述と同じオブジェクトの種類で、以下の 2 つの違いがあります。
- 非ストリーミング応答では、このオブジェクトは message と呼ばれます。
- ストリーミング応答では、これは delta と呼ばれ、message または role のどちらかだけを含みます。
finish_reason string モデルがトークンの生成を停止した理由。
- stop: モデルが自然な停止点、または指定された停止シーケンスに到達した。
- length: トークンの最大数に到達した。
- content_filter: 生成された応答が責任ある AI のポリシーに違反した。
- null: ストリーミングのみ。 ストリーミング応答では、最後の応答を除くすべての応答が null になります。

usage 応答オブジェクトには以下のフィールドが含まれます。

キー Type Value
prompt_tokens integer プロンプト内のトークンの数。 プロンプト トークンの数には、必要に応じてモデルがプロンプト リストを 1 つの文字列の形式にできるように、システムによって追加される余分なトークンが含まれていることに注意してください。 通常、余分なトークンの数はスレッド内のメッセージの数に比例するため、比較的少ないはずです。
completion_tokens integer 入力候補に生成されたトークンの数。
total_tokens integer トークンの合計数。

非ストリーミング応答の例

{
  "id":"cmpl-524c73beb8714d878e18c3b5abd09f2a",
  "choices":[
    {
      "index":0,
      "message":{
        "role":"assistant",
        "content":"The human nose can detect over 1 trillion different scents, making it one of the most sensitive smell organs in the animal kingdom."
      },
      "finishReason":"stop"
    }
  ],
  "created": 1717487036,
  "usage":{
    "promptTokens":116,
    "completionTokens":30,
    "totalTokens":146
  }
}

ストリーミング応答の例

data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"role": "assistant"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": ""}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " The"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " first e"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "mpe"}, "created": 1717487336, "finish_reason": null}]}
... 115 responses omitted for sanity ...
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "me"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "."}, "created": 1717487336,"finish_reason": "stop"}], "usage": {"prompt_tokens": 107, "completion_tokens": 121, "total_tokens": 228}}
data: [DONE]

コストとクォータ

サーバーレス API としてデプロイされた Jamba Instruct のコストとクォータに関する考慮事項

サーバーレス API としてデプロイされる Jamba モデルは、Azure Marketplace を通じて AI21 によって提供され、Azure Machine Learning スタジオと統合されて使用されます。 モデルをデプロイまたは微調整するときに、Azure Marketplace の価格を確認できます。

ワークスペースが Azure Marketplace から特定のモデル オファリングにサブスクライブするたびに、その消費に関連するコストを追跡するための新しいリソースが作成されます。 推論と微調整に関連するコストを追跡するために同じリソースが使用されますが、各シナリオを個別に追跡するために複数の測定値を使用できます。

コストを追跡する方法の詳細については、「Azure Marketplace を通じて提供されるモデルのコストを監視する」を参照してください。

クォータはデプロイごとに管理されます。 各デプロイのレート制限は、1 分あたり 200,000 トークン、1 分あたり 1,000 個の API 要求です。 ただし、現在、プロジェクトのモデルごとに 1 つのデプロイに制限しています。 現在のレート制限がシナリオに十分でない場合は、Microsoft Azure サポートにお問い合わせください。

コンテンツのフィルター処理

サーバーレス API としてデプロイされたモデルは、Azure AI Content Safety によって保護されます。 Azure AI Content Safety を有効にすると、プロンプトと入力候補の両方が、有害なコンテンツ出力の検出と防止を目的とした一連の分類モデルを通過します。 コンテンツ フィルタリング システムは、入力プロンプトと (出力される) 入力候補の両方で、有害な可能性があるコンテンツ特有のカテゴリを検出し、アクションを実行します。 Azure AI Content Safety の詳細を確認します。