Azure AI Studio を使用して AI21 の Jamba ファミリ モデルをデプロイする方法

重要

この記事で説明する機能の一部は、プレビューでのみ使用できる場合があります。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

この記事では、Azure AI Studio を使用して、AI21 の Jamba ファミリ モデルを従量課金制のサーバーレス API としてデプロイする方法を学習します。

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

ヒント

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

Jamba ファミリ モデルをサーバーレス API としてデプロイする

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

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

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

前提条件

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

  • AI Studio ハブ。 Jamba ファミリ モデル用のサーバーレス API モデル デプロイは、次のリージョン内に作成されたハブでのみ提供されます。

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

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

  • Azure AI Studio プロジェクト

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

    • Azure サブスクリプションで - 各プロジェクトについて 1 回、オファリングごとに、AI Studio プロジェクトを Azure Marketplace オファリングにサブスクライブするため:

      • 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
    • AI Studio プロジェクトで - エンドポイントをデプロイするため (Azure AI 開発者ロールには、次のアクセス許可が既に含まれています):

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

    アクセス許可について詳しくは、「Azure AI Studio でのロールベースのアクセス制御」をご覧ください。

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

これらの手順は AI21 Jamba 1.5 Large または AI21 Jamba 1.5 Mini モデルのデプロイを示したものです。 デプロイを作成するには:

  1. Azure AI Studio にサインインします。

  2. 左側のサイドバーで [モデル カタログ] を選びます。

  3. AI21 Jamba 1.5 LargeAI21 Jamba 1.5 MiniAI21 Jamba Instruct などの AI21 モデルを検索して選択し、[詳細] ページを開きます。

  4. [デプロイ] を選び、モデルのサーバーレス API デプロイ ウィンドウを開きます。

  5. または、AI Studio でプロジェクトから開始して、デプロイを始めることもできます。

    1. プロジェクトの左側のサイドバーで、[コンポーネント]>[デプロイ] を選びます。

    2. [+ デプロイの作成] を選択します。

    3. AI21 Jamba 1.5 LargeAI21 Jamba 1.5 MiniAI21 Jamba Instruct などの AI21 モデルを検索して選択し、モデルの [詳細] ページを開きます。

    4. [確認] を選択して、モデルのサーバーレス API デプロイ ウィンドウを開きます。

  6. モデルをデプロイするプロジェクトを選びます。 AI21-Jamba ファミリ モデルをデプロイするには、プロジェクトが「前提条件」セクションに記載されているいずれかのリージョン内に存在している必要があります。

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

  8. 選択したモデルの価格を参照するには、[利用料金および使用条件] タブを選択します。

  9. [サブスクライブしてデプロイ] ボタンを選びます。 プロジェクトにモデルを初めてデプロイする場合は、特定のオファリング用のプロジェクトをサブスクライブする必要があります。 この手順は、「前提条件」に記載されている Azure サブスクリプションのアクセス許可とリソース グループのアクセス許可がアカウントに付与されていることを必要とします。 プロジェクトごとに、モデルの特定の Azure Marketplace オファリングへの固有のサブスクリプションがあり、それを使って支出を管理および監視できます。 現在、プロジェクト内のモデルごとに行うことができるデプロイは 1 つだけです。

  10. 特定の Azure Marketplace オファリングのプロジェクトにサブスクライブすると、"同じ" プロジェクト内の "同じ" オファリングの以降のデプロイで再度サブスクライブする必要はありません。 このシナリオが当てはまる場合は、[デプロイを続行する] オプションを選択できます。

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

  12. 展開 を選択します。 デプロイの準備ができるまで待つと、[デプロイ] ページにリダイレクトされます。

  13. [デプロイ] ページに戻ってデプロイを選び、エンドポイントのターゲット URL とシークレット キーをメモします。 API の使用方法の詳細については、リファレンスのセクションを参照してください。

  14. エンドポイントの詳細、URL、アクセス キーは、[プロジェクトの概要] ページに移動していつでも確認できます。 次に、プロジェクトの左側のサイドバーで、[コンポーネント]>[デプロイ] を選びます。

従量課金制トークンベースの課金を使用してサーバーレス API としてデプロイされた AI21-Jamba ファミリ モデルの課金については、「サーバーレス API としてデプロイされた Jamba Instruct のコストとクォータに関する考慮事項」を参照してください。

Jamba ファミリ モデルをサーバーレス API として使用する

Jamba ファミリ モデルは次のように使用できます。

  1. [プロジェクトの概要] ページで、左側のサイドバーに移動し、[コンポーネント]>[デプロイ] を選びます。

  2. 作成したデプロイを見つけて選択します。

  3. [ターゲット] URL と [キー] の値をコピーします。

  4. API 要求を行います。

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

サーバーレス API としてデプロイされた Jamba ファミリ モデルに関するリファレンス

Jamba ファミリ モデルは、以下の API の両方を受け入れます。

Azure AI モデル推論 API

Azure AI モデルの推論 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 jamba-1.5-largejamba-1.5-mini、または jamba-instruct のいずれかである必要があります
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 である必要がありますが、これは自動的に設定されます。
tools array[tool] N "" モデルによって呼び出される tools の一覧。 現在のところ、関数のみがツールとしてサポートされています。 これを使用し、モデルによって JSON 入力が生成される関数の一覧を提供します。 最大 128 個の関数がサポートされています。
response_format object N
null
"" { "type": "json_object" } に設定すると、JSON モードが有効になります。これにより、モデルが生成するメッセージが有効な JSON であることが保証されます。
documents array[document] N "" ユーザーがプロンプトで明示的に指定した場合に、モデルが応答の根拠にできる関連する documents の一覧。 基本的にプロンプトの拡張機能として機能し、メタデータを追加する機能を備えています。 各ドキュメントは辞書です。

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

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

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

  • type (必須、文字列) - ツールの種類。 現時点では "function" のみがサポートされています。
  • function (必須、オブジェクト) - 関数の詳細。
    • name (必須、文字列) - 呼び出される関数の名前。
    • description (省略可能、文字列) - 関数の動作の説明。
    • parameters (省略可能、オブジェクト) - 関数が受け取るパラメーター。JSON スキーマ オブジェクトとして記述されます。

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

  • id (オプション、文字列) - 一意識別子。 引用にリンクされます。 最大 128 文字です。
  • content (必須、文字列) - ドキュメントの内容
  • metadata (省略可能、メタデータの配列)
    • key (必須、文字列) - "author"、"date"、"url" などのメタデータの種類。モデルが理解できるものにする必要があります。
    • value (必須、文字列) - メタデータの値

要求の例

1 ターンの例: Jamba 1.5 large と Jamba 1.5 mini

{
   "model":"jamba-1.5-large",  <jamba-1.5-large|jamba-1.5-mini>
   "messages":[
      {
         "role":"user",
         "content":"I need help with your product. Can you please assist?"
      }
   ],
   "temperature":1,
   "top_p":1,
   "n":1,
   "stop":"\n",
   "stream":false
}

1 ターンの例: ドキュメントありの Jamba 1.5 large と Jamba 1.5 mini

{
   "model":"jamba-1.5-large",  <jamba-1.5-large|jamba-1.5-mini>
   "messages":[
      {
         "role":"system",
         "content":'''<documents>
          # Documents

          You can use the following documents for reference:

          ## Document ID: 0
          Text: Harry Potter is a series of seven fantasy novels written by British author J. K. Rowling.

          ## Document ID: 1
          Text: The Great Gatsby is a novel by American writer F. Scott Fitzgerald.
          </documents>'''},

       {
           "role":"user",
           "content":"Who wrote Harry Potter?"
       }
   ],
   "temperature":0.4,
   "top_p":1,
   "n":1,
   "stop":"\n",
   "stream":false
}

チャットの例 (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 つのオブジェクトです。 以下のオブジェクトの説明を参照してください。
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 になります。

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

キー Type 説明
role string このメッセージの作成者の役割。
content string or null メッセージの内容。
tool_calls array or null モデルによって生成されたツールの呼び出し。

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

キー Type 説明
id string ツール呼び出しの ID。
type string ツールの型。 現在、function のみがサポートされています。
function object モデルが呼び出した関数。

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

キー Type 説明
name string 呼び出す関数の名前。
arguments string モデルによって JSON 形式で生成された、関数を呼び出すための引数。

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 ファミリ モデルのコストとクォータに関する考慮事項

Jamba ファミリ モデルはサーバーレス API としてデプロイされ、Azure Marketplace で AI21 が提供しており、Azure AI Studio と統合して使用されます。 モデルをデプロイまたは微調整するときに、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 の詳細を確認します。