Databricks 模型服務中的外部模型
重要
本文中的程式代碼範例示範公開預覽 MLflow 部署 CRUD API 的使用方式。
本文說明 Databricks 模型服務中的外部模型,包括其支援的模型提供者和限制。
什麼是外部模型?
外部模型是裝載在 Databricks 外部的第三方模型。 受模型服務支援,外部模型可讓您簡化組織內各種大型語言模型 (LLM) 提供者的使用和管理,例如 OpenAI 和人類。 您也可以使用 Databricks 模型作為提供者來提供自定義模型,以提供這些端點的速率限制。 作為此支援的一部分,模型服務提供高階介面,藉由提供統一端點來處理特定 LLM 相關要求,簡化與這些服務的互動。
此外,外部模型的 Azure Databricks 支援也提供集中式認證管理。 藉由將 API 金鑰儲存在一個安全的位置,組織可以藉由將敏感性 API 金鑰暴露在系統中,藉以增強其安全性狀態。 它也有助於防止在程式碼中公開這些密鑰,或要求終端使用者安全地管理密鑰。
請參閱 教學課程:建立外部模型端點來查詢 OpenAI 模型 ,以取得使用 MLflow 部署 SDK 之端點建立和查詢這些端點所服務支援模型的逐步指引。 如需如何使用服務 UI 和 REST API 的指示,請參閱下列指南:
需求
- 模型提供者的 API 金鑰。
- 外部模型支持區域中的 Databricks 工作區。
模型提供者
模型服務中的外部模型是設計來支援各種模型提供者。 提供者代表機器學習模型的來源,例如 OpenAI、人類等。 每個提供者都有其特定特性和組態,這些特性和組態會封裝在external_model
外部模型端點組態的欄位中。
支援下列提供者:
- openai:適用於 OpenAI 所提供的模型,以及 Azure OpenAI 和 Azure OpenAI 與 AAD 的 Azure 整合。
- 人類:針對人類學所提供的模型。
- cohere:適用於 Cohere 所提供的模型。
- 亞馬遜基岩:亞馬遜貝德洛克提供的模型。
- ai21labs:適用於 AI21Labs 所提供的模型。
- google-cloud-vertex-ai:適用於Google Cloud頂點 AI 所提供的模型。
- databricks-model-service:針對 Databricks 模型服務具有相容架構的端點。 請參閱 端點設定。
若要要求此處未列出的提供者支援,請連絡您的 Databricks 帳戶小組。
支援的模型
您選擇的模型會直接影響您從 API 呼叫取得的回應結果。 因此,選擇符合使用案例需求的模型。 例如,若要產生交談式回應,您可以選擇聊天模型。 相反地,若要產生文字的內嵌,您可以選擇內嵌模型。
下表提供支援模型和對應 端點類型的非詳盡清單。 在為任何新發行的模型類型設定端點時,下列模型關聯可用來作為實用指南,因為它們可供指定提供者使用。 客戶須負責確保符合適用的模型授權。
注意
隨著 LLM 的快速發展,不保證這份列表隨時都是最新的。
模型提供者 | llm/v1/completions | llm/v1/chat | llm/v1/embeddings |
---|---|---|---|
OpenAI** | * gpt-3.5-turbo-指示 * babbage-002 * davinci-002 |
* gpt-3.5-turbo * gpt-4 * gpt-3.5-turbo-0125 * gpt-3.5-turbo-1106 * gpt-4-0125-preview * gpt-4-turbo-preview * gpt-4-1106-preview * gpt-4-vision-preview * gpt-4-1106-vision-preview |
* text-embedding-ada-002 * text-embedding-3-large * text-embedding-3-small |
Azure OpenAI** | * text-davinci-003 * gpt-35-turbo-指示 |
* gpt-35-turbo * gpt-35-turbo-16k * gpt-4 * gpt-4-32k |
* text-embedding-ada-002 * text-embedding-3-large * text-embedding-3-small |
Anthropic | * claude-1 * claude-1.3-100k * claude-2 * claude-2.1 * claude-2.0 * claude-instant-1.2 |
* claude-3-opus-20240229 * claude-3-sonnet-20240229 * claude-2.1 * claude-2.0 * claude-instant-1.2 |
|
Cohere** | *命令 * command-light-nightly * command-light * command-nightly |
* embed-english-v2.0 * embed-多語系-v2.0 * embed-english-light-v2.0 * embed-english-v3.0 * embed-english-light-v3.0 * embed-多語系-v3.0 * embed-多語系-light-v3.0 |
|
Databricks 模型服務 | 提供端點的 Databricks | 提供端點的 Databricks | 提供端點的 Databricks |
Amazon Bedrock | 人類: * claude-instant-v1 * claude-v1 * claude-v2 Cohere: * command-text-v14 * command-text-v14:7:4k * command-light-text-v14 * command-light-text-v14:7:4k AI21 Labs: * j2-grande-instruct * j2-jumbo-instruct * j2-mid * j2-mid-v1 * j2-ultra j2-ultra-v1 |
人類: * claude-instant-v1:2:100k * claude-v2 * claude-v2:0:18k * claude-v2:0:100k * claude-v2:1 * claude-v2:1:18k * claude-v2:1:200k * claude-3-sonnet-20240229-v1:0 |
亞馬遜: * titan-embed-text-v1 * titan-embed-g1-text-02 * titan-embed-text-v1:2:8k |
AI21 Labs† | * j2-mid * j2-light * j2-ultra |
||
Google Cloud 頂點 AI | text-bison | * chat-bison * 雙子座親 |
textembedding-gecko |
**
模型提供者支援微調完成和聊天模型。 若要查詢微調的模型,請使用微調模型的名稱填 name
入組態的 external model
字段。
†模型提供者支援自定義完成模型。
使用 Databricks 模型服務端點上的模型
、 和 llm/v1/embeddings
端點類型支援 llm/v1/chat
llm/v1/completions
Databricks 模型服務端點做為提供者。 這些端點必須接受標示為必要的標準查詢參數,而根據 Databricks 模型服務端點是否支援這些參數,可能會忽略其他參數。
如需標準查詢參數,請參閱 API 參考中的 POST /service-endpoints/{name}/調用 。
這些端點必須以下列 OpenAI 格式產生回應。
針對完成工作:
{
"id": "123", # Not Required
"model": "test_databricks_model",
"choices": [
{
"text": "Hello World!",
"index": 0,
"logprobs": null, # Not Required
"finish_reason": "length" # Not Required
}
],
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
針對聊天工作:
{
"id": "123", # Not Required
"model": "test_chat_model",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
},
{
"index": 1,
"message": {
"role": "human",
"content": "\n\nWhat is the weather in San Francisco?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
針對內嵌工作:
{
"data": [
{
"embedding": [
0.0023064255,
-0.009327292,
.... # (1536 floats total for ada-002)
-0.0028842222,
],
"index": 0
},
{
"embedding": [
0.0023064255,
-0.009327292,
.... #(1536 floats total for ada-002)
-0.0028842222,
],
"index": 0
}
],
"model": "test_embedding_model",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
端點組態
若要提供和查詢外部模型,您需要設定服務端點。 請參閱 建立提供端點的自定義模型
對於提供端點的外部模型,您必須在served_entities
端點組態的 區段中包含 external_model
字段及其參數。
欄位 external_model
會定義此端點轉送要求的模型。 指定模型時,提供者必須支援您所要求的模型。 例如,作為提供者支援之類的text-embedding-ada-002
模型,openai
但其他提供者可能不支援。 如果提供者不支援模型,Databricks 會在嘗試將要求路由傳送至該模型時傳回 HTTP 4xx 錯誤。
下表摘要說明 external_model
欄位參數。 如需端點組態參數,請參閱 POST /api/2.0/service-endpoints 。
參數 | Description |
---|---|
name |
要使用的模型名稱。 例如, gpt-3.5-turbo 針對 OpenAI 的 GPT-3.5-Turbo 模型。 |
provider |
指定這個模型的提供者名稱。 這個字串值必須對應至支援的外部模型 提供者。 例如, openai 針對 OpenAI 的 GPT-3.5 模型。 |
task |
工作會對應至您想要的語言模型互動類型。 支援的工作為 「llm/v1/completions」、“llm/v1/chat”、“llm/v1/embeddings”。 |
<provider>_config |
包含模型所需的任何其他組態詳細數據。 這包括指定 API 基底 URL 和 API 金鑰。 請參閱 設定端點的提供者。 |
以下是使用 API 建立外部模型端點的 create_endpoint()
範例。 在此範例中,傳送至完成端點的要求會轉送至 claude-2
所提供的 anthropic
模型。
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="anthropic-completions-endpoint",
config={
"served_entities": [
{
"name": "test",
"external_model": {
"name": "claude-2",
"provider": "anthropic",
"task": "llm/v1/completions",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
}
}
}
]
}
)
設定端點的提供者
當您建立端點時,必須提供指定模型提供者的必要組態。 下列各節摘要說明每個模型提供者可用的端點組態參數。
OpenAI
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
openai_api_key |
OpenAI 服務的 API 金鑰。 | Yes | |
openai_api_type |
選擇性欄位,指定要使用的 OpenAI API 類型。 | No | |
openai_api_base |
OpenAI API 的基底 URL。 | No | https://api.openai.com/v1 |
openai_api_version |
指定 OpenAI API 版本的選擇性欄位。 | No | |
openai_organization |
在OpenAI中指定組織的選擇性欄位。 | No |
Cohere
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
cohere_api_key |
Cohere 服務的 API 金鑰。 | Yes |
Anthropic
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
anthropic_api_key |
Anthropic 服務的 API 金鑰。 | Yes |
Azure OpenAI
相較於直接 OpenAI 服務,Azure OpenAI 具有不同的功能。 如需概觀,請參閱 比較檔。
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
openai_api_key |
Azure OpenAI 服務的 API 金鑰。 | Yes | |
openai_api_type |
調整此參數以代表慣用的安全性存取驗證通訊協定。 針對存取權杖驗證,請使用 azure 。 若要使用 Azure Active Directory 進行驗證(Azure AD), azuread 請使用 。 |
Yes | |
openai_api_base |
Azure 提供的 Azure OpenAI API 服務基底 URL。 | Yes | |
openai_api_version |
要利用的 Azure OpenAI 服務版本,由日期指定。 | Yes | |
openai_deployment_name |
Azure OpenAI 服務的部署資源名稱。 | Yes | |
openai_organization |
在OpenAI中指定組織的選擇性欄位。 | No |
下列範例示範如何使用 Azure OpenAI 建立端點:
client.create_endpoint(
name="openai-chat-endpoint",
config={
"served_entities": [{
"external_model": {
"name": "gpt-3.5-turbo",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
"openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
"openai_deployment_name": "my-gpt-35-turbo-deployment",
"openai_api_version": "2023-05-15"
}
}
}]
}
)
Google Cloud 頂點 AI
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
private_key |
這是服務帳戶的私鑰,可存取 Google Cloud Vertex AI Service。 請參閱 管理服務帳戶密鑰的最佳做法。 | Yes | |
region |
這是Google Cloud頂點 AI 服務的區域。 如需詳細資訊,請參閱支援的區域。 某些模型僅適用於特定區域。 | Yes | |
project_id |
這是服務帳戶相關聯的Google Cloud項目標識碼。 | Yes |
Amazon Bedrock
若要使用 Amazon Bedrock 作為外部模型提供者,客戶必須確定 Bedrock 已在指定的 AWS 區域中啟用,而指定的 AWS 密鑰組具有適當的許可權來與 Bedrock 服務互動。 如需詳細資訊,請參閱 AWS 身分識別和存取管理。
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
aws_region |
要使用的 AWS 區域。 貝德羅克必須在那裡啟用。 | Yes | |
aws_access_key_id |
AWS 存取金鑰標識碼,具有與 Bedrock 服務互動的許可權。 | Yes | |
aws_secret_access_key |
AWS 秘密存取密鑰與存取金鑰標識元配對,具有與 Bedrock 服務互動的許可權。 | Yes | |
bedrock_provider |
亞馬遜貝德羅克的基礎供應商。 支援的值(不區分大小寫)包括:人類、Cohere、AI21Labs、Amazon | Yes |
下列範例示範如何使用 Amazon Bedrock 建立端點。
client.create_endpoint(
name="bedrock-anthropic-completions-endpoint",
config={
"served_entities": [
{
"external_model": {
"name": "claude-v2",
"provider": "amazon-bedrock",
"task": "llm/v1/completions",
"amazon_bedrock_config": {
"aws_region": "<YOUR_AWS_REGION>",
"aws_access_key_id": "{{secrets/my_amazon_bedrock_secret_scope/aws_access_key_id}}",
"aws_secret_access_key": "{{secrets/my_amazon_bedrock_secret_scope/aws_secret_access_key}}",
"bedrock_provider": "anthropic",
},
}
}
]
},
)
如果有 AWS 許可權問題,Databricks 建議您直接使用 Amazon Bedrock API 來驗證認證。
AI21 Labs
組態參數 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
ai21labs_api_key |
這是 AI21 Labs 服務的 API 金鑰。 | Yes |
查詢外部模型端點
建立外部模型端點之後,即可接收來自使用者的流量。
您可以使用 OpenAI 用戶端、REST API 或 MLflow 部署 SDK,將評分要求傳送至端點。
下列範例會使用 OpenAI 用戶端查詢 claude-2
Anthropic 所裝載的完成模型。 若要使用 OpenAI 用戶端,請使用裝載您要查詢之模型的模型服務端點名稱填 model
入字段。
此範例會使用先前建立的端點 , anthropic-completions-endpoint
設定為從人類模型提供者存取外部模型。 請參閱如何 建立外部模型端點。
如需您可以查詢的其他模型及其提供者,請參閱 支援模型 。
import os
import openai
from openai import OpenAI
client = OpenAI(
api_key="dapi-your-databricks-token",
base_url="https://example.staging.cloud.databricks.com/serving-endpoints"
)
completion = client.completions.create(
model="anthropic-completions-endpoint",
prompt="what is databricks",
temperature=1.0
)
print(completion)
預期的輸出回應格式:
{
"id": "123", # Not Required
"model": "anthropic-completions-endpoint",
"choices": [
{
"text": "Hello World!",
"index": 0,
"logprobs": null, # Not Required
"finish_reason": "length" # Not Required
}
],
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
其他查詢參數
您可以在查詢中傳遞端點提供者所支援的任何其他參數。
例如:
logit_bias
(由 OpenAI、Cohere 支援)。top_k
(由人類學,科赫支援)。frequency_penalty
(由 OpenAI、Cohere 支援)。presence_penalty
(由 OpenAI、Cohere 支援)。stream
(由 OpenAI、人類學、科赫、亞馬遜人類學支援)。 這僅適用於聊天和完成要求。
限制
根據您選擇的外部模型,您的設定可能會導致數據在數據產生所在的區域之外進行處理。
請參閱 模型服務限制和區域。
其他資源
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應