如何使用 Azure Machine Learning 工作室來部署 AI21 的 Jamba 系列模型
重要
此功能目前處於公開預覽。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。
如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
在本文中,您將了解如何使用 Azure Machine Learning 工作室,將 AI21 的 Jamba 系列模型部署為採用隨用隨付計費方式的無伺服器 API。
Jamba 系列模型是 AI21 的生產等級 Mamba 型大型語言模型 (LLM),其利用的是 AI21 的混合式 Mamba-Transformer 架構。 這是 AI21 混合式結構化狀態空間模型 (SSM) 轉換器 Jamba 模型的指令微調版本。 Jamba 系列模型的建置目的是在商業用途上提供可靠的品質和效能。
提示
透過 AI21 的部落格和 Microsoft Tech Community 部落格,查看我們關於目前可在 Azure AI 模型目錄上取得之 AI21 Jamba 系列模型的公告。
將 Jamba 系列模型部署為無伺服器 API
模型目錄中的某些模型可以部署為採用隨用隨付計費方式的無伺服器 API,讓使用者能以 API 的形式加以取用,而不需在您的訂用帳戶上裝載這些模型,同時保有企業安全性與合規性組織需求。 此部署選項不需要您的訂用帳戶提供配額。
部署為採用隨用隨付計費方式之無伺服器 API 的 AI21-Jamba 1.5 Large 模型是由 AI21 透過 Microsoft Azure Marketplace 所提供。 AI21 可能會變更或更新此模型的使用規定和價格。
若要開始使用部署為無伺服器 API 的 Jamba 1.5 Large,請探索我們與 LangChain、LiteLLM、OpenAI 和 Azure API 的整合。
必要條件
具有有效付款方式的 Azure 訂用帳戶。 免費版或試用版 Azure 訂用帳戶將無法運作。 如果您沒有 Azure 訂用帳戶,請建立付費 Azure 帳戶以開始。
Azure Machine Learning 工作區和計算執行個體。 如果您沒有這些資源,請使用快速入門:建立工作區資源 (部分機器翻譯) 一文中的步驟來建立這些資源。 適用於 Jamba 系列模型的無伺服器 API 模型部署供應項目僅適用於在這些區域中建立的工作區:
- 美國東部
- 美國東部 2
- 美國中北部
- 美國中南部
- 美國西部
- 美國西部 3
- 瑞典中部
如需支援無伺服器 API 端點部署之每個模型可用的區域清單,請參閱無伺服器 API 端點中模型的區域可用性 (部分機器翻譯)。
Azure 角色型存取控制 (Azure RBAC) 可用來授與 Azure Machine Learning 作業的存取權。 若要執行本文中的步驟,您的使用者帳戶必須獲指派 Azure 訂用帳戶的擁有者或參與者角色。 或者,可以為您的帳戶指派具有下列權限的自訂角色:
在 Azure 訂用帳戶上 - 以為工作區訂閱 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
在工作區上 - 以部署端點 (Azure Machine Learning 資料科學家角色已經包含這些權限):
Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*
如需關於權限的詳細資訊,請參閱管理對 Azure Machine Learning 工作區的存取 (部分機器翻譯)。
建立新的部署
這些步驟會示範 AI21 Jamba 1.5 Large
或 AI21 Jamba 1.5 Mini
模型的部署。 若要建立部署:
選取您要在其中部署模型的工作區。 若要使用無伺服器 API 模型部署供應項目,您的工作區必須屬於必要條件中所列的其中一個支援區域。
搜尋並選取 AI21 模型,例如
AI21 Jamba 1.5 Large
或AI21 Jamba 1.5 Mini
,或從模型目錄選取AI21 Jamba Instruct
。或者,您可以移至工作區,然後選取 [端點] > [無伺服器端點] > [建立] 來起始部署。
在模型目錄中的模型概觀頁面上,選取 [部署],然後選取 [具有 Azure AI 內容安全的無伺服器 API]。
在部署精靈上,選取 [Azure Marketplace 條款] 的連結,以深入了解使用規定。
您也可以選取 [Marketplace 供應項目詳細資料] 索引標籤,以了解所選模型的價格。
如果這是您第一次在工作區中部署模型,您必須為您的工作區訂閱 Azure Marketplace 中的特殊供應項目。 此步驟會要求您的帳戶具有必要條件中所列的 Azure 訂用帳戶權限和資源群組權限。 每個工作區都有自己的特定 Azure Marketplace 供應項目的訂用帳戶,可讓您控制及監視支出。 選取 [訂閱並部署]。 目前,您只能在工作區內針對每個模型有一個部署。
當您為工作區註冊特定 Azure Marketplace 供應項目之後,就不需要再次訂閱相同工作區中的相同供應項目的後續部署。 因此,您不需要具有後續部署的訂用帳戶層級權限。 如果此案例適合您,請選取 [繼續部署]。
為部署指定名稱。 此名稱會成為部署 API URL 的一部分。 此 URL 在每個 Azure 區域中都必須是唯一的。
選取部署。 等候部署完成,即會將您重新導向無伺服器端點頁面。
選取端點以開啟其 [詳細資料] 頁面。
選取 [測試] 索引標籤以開始與模型互動。
您也可以記下 [目標] URL 和 [祕密金鑰],以呼叫部署並產生完成。
您可以瀏覽至 [工作區] > [端點] > [無伺服器端點],以尋找端點的詳細資料、URL 和存取金鑰。
若要了解部署為採用隨用隨付語彙基元型計費方式之無伺服器 API 的 AI21-Jamba 系列模型如何計費,請參閱部署為無伺服器 API 的 Jamba 系列模型的成本和配額考量。
使用 Jamba 系列模型作為無伺服器 API
您可以如下所示,使用 Jamba 系列模型:
- 在 [工作區] 中,選取 [端點] > [無伺服器端點]。
- 尋找並選取您所建立的 部署。
- 複製 [目標] URL 和 [金鑰] 權杖值。
- 使用路由
/chat/completions
上的 Azure AI 模型推斷 API 或/v1/chat/completions
上的 AI21 Azure 用戶端 (英文) 來提出 API 要求。
如需使用 API 的詳細資訊,請參閱參考一節。
作為部署為無伺服器 API 的 Jamba 系列模型的參考
Jamba 系列模型接受這兩個 API:
- 路由
/chat/completions
上用於進行多回合聊天或單回合問題解答的 Azure AI 模型推斷 API [Azure AI 模型推斷 API]。 Jamba 系列模型已針對聊天完成進行過微調,因此可支援此 API。 - AI21 的 Azure 用戶端 (英文)。 如需所呼叫 REST 端點的詳細資訊,請造訪 AI21 的 REST 文件 (英文)。
Azure AI 模型推斷 API
您可以在聊天完成參考文章中找到 Azure AI 模型推斷 API 結構描述,並且可以從端點本身取得 OpenAPI 規格。
單回合和多回合聊天具有相同的要求和回應格式,不同之處在於問題解答 (單回合) 只涉及要求中的單一使用者訊息,而多回合聊天則要求您在每個要求中傳送整個聊天訊息歷程記錄。
在多回合聊天中,訊息對話具有下列屬性:
- 包含來自使用者和模型的所有訊息,從最舊到最新排序。
- 訊息會在
user
與assistant
角色的訊息之間交替 - (選擇性) 訊息對話會從系統訊息開始以提供內容。
下列虛擬程式碼是聊天要求中第四個呼叫的訊息堆疊範例,其中包含初始的系統訊息。
[
{"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
路由:
要求
POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json
要求結構描述
承載是包含下列參數的 JSON 格式字串:
機碼 | 類型 | 必要/預設 | 允許的值 | 描述 |
---|---|---|---|---|
model |
string |
Y | jamba-instruct 、AI21 Jamba 1.5 Large 或 AI21 Jamba 1.5 Mini |
|
messages |
list[object] |
Y | 物件清單,每個訊息一個,從最舊到最新排序。 最舊的訊息可以是角色 system 。 之後的所有訊息則必須在使用者和助理角色之間交替。 請參閱下面的訊息物件定義。 |
|
max_tokens |
integer |
N4096 |
0 – 4096 | 所產生的每個回應訊息允許的語彙基元數目上限。 一般來說,想要限制輸出長度,最佳的方式是在系統提示中提供長度限制 (例如,「將您的答案限制為三個句子」) |
temperature |
float |
N1 |
0.0 – 2.0 | 要在每個答案中提供多少變化。 將此值設定為 0 可保證相同的問題每次都會有相同的回應。 設定較高的值會促進更多變化。 請修改要從中進行語彙基元取樣的分佈。 建議改變此項目或 top_p ,但不建議同時改變。 |
top_p |
float |
N1 |
0 <值<=1.0 | 將每個步驟中下一個語彙基元的集區限制為可能語彙基元的前 N 個百分位數,其中 1.0 表示所有可能語彙基元的集區,0.01 則表示只有下一個最可能語彙基元的集區。 |
stop |
string 或 list[string] |
N |
"" | 字串或字串清單,其中包含 API 應該停止產生輸出的字組。 允許以「\n」作為新行字元。 傳回的文字不會包含停止序列。 |
n |
integer |
N1 |
1 – 16 | 要為每個提示產生多少個回應。 使用 Azure AI Studio 的遊樂場時,n=1 ,因為我們會處理多重回應遊樂場。 |
stream |
boolean |
NFalse |
True 或 False |
是否要啟用串流。 如果為 true,則會一次傳回一個語彙基元的結果。 如果設定為 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
}
聊天範例 (包含第三個使用者回應的第四個要求)
{
"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
}
回應結構描述
回應會稍微取決於結果是否有串流。
在「非串流結果」中,所有回應會在單一回應內一起傳遞,其中也包含 usage
屬性。
在「串流結果」中,
- 每個回應都會在
choices
欄位中包含單一語彙基元。 choices
物件結構會不同。- 只有最後一個回應包含
usage
物件。 - 整個回應會包裝在
data
物件中。 - 最終的回應物件是
data: [DONE]
。
回應承載是具有下列欄位的字典。
機碼 | 類型 | 描述 |
---|---|---|
id |
string |
要求的唯一識別碼。 |
model |
string |
所用模型的名稱。 |
choices |
list[object ] |
模型產生的回應文字。 若為非串流回應,其為具有 n 項目的清單。 若為串流回應,其為包含單一語彙基元的單一物件。 請參閱下面的物件描述。 |
created |
integer |
建立完成時的 Unix 時間戳記 (以秒為單位)。 |
object |
string |
物件類型,一律為 chat.completion 。 |
usage |
object |
完成要求的使用量統計資料。 如需詳細資料,請參閱下文。 |
choices
回應物件包含模型產生的回應。 物件具有下列欄位:
機碼 | 類型 | 描述 |
---|---|---|
index |
integer |
訊息清單內訊息的零基索引。 可能不會對應至清單中的位置。 若為串流訊息,這一律為零。 |
message 或 delta |
object |
產生的訊息 (或串流回應中的語彙基元)。 和要求所述相同的物件類型,具有兩個變更: - 在非串流回應中,此物件稱為 message 。 - 在串流回應中,其稱為 delta ,且包含 message 或 role ,但永遠不會同時包含兩者。 |
finish_reason |
string |
模型停止產生權杖的原因: - stop :模型到達了自然停止點,或所提供的停止序列。 - length :已到達語彙基元數目上限。 - content_filter :產生的回應違反了負責任 AI 原則。 - null :僅串流。 在串流回應中,除了最後一個回應以外的所有回應都會是 null 。 |
usage
回應物件包含下列欄位。
機碼 | 類型 | 值 |
---|---|---|
prompt_tokens |
integer |
提示中的權杖數目。 請注意,提示語彙基元計數包含系統為了將提示清單格式化為模型所需的單一字串而新增的額外語彙基元。 額外的語彙基元數目通常與對話中的訊息數目成正比,而且應該相對較小。 |
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,其由 AI21 透過 Azure Marketplace 來提供,並與 Azure AI Studio 整合以供使用。 您可以在部署或微調模型時找到 Azure Marketplace 價格。
每當工作區向 Azure Marketplace 訂閱指定的模型供應項目時,都會建立新的資源,以便追蹤與其使用量相關聯的成本。 會使用相同的資源來追蹤與推斷和微調相關聯的成本;不過,可以使用多個計量獨立追蹤每個情節。
如需如何追蹤成本的詳細資訊,請參閱監視透過 Azure Marketplace 提供的模型成本 (部分機器翻譯)。
配額會根據每個部署管理。 每個部署的速率限制為每分鐘 200,000 個權杖,每分鐘 1,000 個 API 要求。 不過,我們目前限制每個專案的每個模型為一個部署。 如果目前的速率限制無法滿足您的情節,請連絡 Microsoft Azure 支援。
內容篩選
部署為無伺服器 API 的模型會受到 Azure AI 內容安全所保護。 啟用 Azure AI 內容安全後,提示和完成都會通過旨在偵測及防止有害內容輸出的一組分類模型。 內容篩選 (預覽) 系統會偵測並針對輸入提示和輸出完成中潛在有害內容的特定類別採取動作。 深入了解 Azure AI 內容安全 (部分機器翻譯)。
相關內容
- 模型目錄和集合 (部分機器翻譯)
- 使用線上端點部署和評分機器學習模型
- 規劃和管理 Azure AI Studio 的成本 (部分機器翻譯)
- 無伺服器 API 端點中模型的區域可用性