Skapa basmodell som betjänar slutpunkter
I den här artikeln får du lära dig hur du skapar modell som betjänar slutpunkter som distribuerar och hanterar grundmodeller.
Mosaic AI Model Serving stöder följande modeller:
Externa modeller. Det här är grundläggande modeller som finns utanför Databricks. Slutpunkter som hanterar externa modeller kan styras centralt och kunderna kan fastställa hastighetsbegränsningar och åtkomstkontroll för dem. Exempel är grundmodeller som OpenAI:s GPT-4, Anthropics Claude och andra.
Toppmoderna öppna grundmodeller som görs tillgängliga av Foundation Model-API:er. Dessa modeller är utvalda grundmodellarkitekturer som stöder optimerad slutsatsdragning. Basmodeller som Meta-Llama-3.1-70B-Instruct, GTE-Large och Mistral-7B är tillgängliga för omedelbar användning med prissättning för betala per token . Produktionsarbetsbelastningar med bas- eller finjusterade modeller kan distribueras med prestandagarantier med hjälp av etablerat dataflöde.
Modellservern innehåller följande alternativ för att skapa en modell som betjänar slutpunkten:
- Användargränssnittet för servering
- REST-API
- SDK för MLflow-distributioner
Information om hur du skapar slutpunkter som hanterar traditionella ML- eller Python-modeller finns i Skapa anpassade modellserverslutpunkter.
Krav
- En Databricks-arbetsyta i en region som stöds.
- Om du vill skapa slutpunkter med MLflow Deployments SDK måste du installera MLflow-distributionsklienten. Installera den genom att köra:
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
Skapa en basmodell som betjänar slutpunkten
Du kan skapa en slutpunkt som hanterar finjusterade varianter av grundmodeller som görs tillgängliga med hjälp av API:er för Foundation Model-etablerade dataflöden. Se Skapa din etablerade dataflödesslutpunkt med hjälp av REST-API:et.
För grundmodeller som görs tillgängliga med foundation model-API:er betalar per token tillhandahåller Databricks automatiskt specifika slutpunkter för åtkomst till de modeller som stöds på din Databricks-arbetsyta. För att komma åt dem select fliken Servering i arbetsytans vänstra sidopanel. API:erna för Foundation Model finns högst upp i slutpunktsvyn list.
För att göra förfrågningar mot dessa slutpunkter, se Fråga grundmodeller.
Skapa en extern modell som betjänar slutpunkten
Följande beskriver hur du skapar en slutpunkt som frågar en grundmodell som görs tillgänglig med hjälp av externa Databricks-modeller.
Serveringsgränssnitt
- I fältet Namn anger du ett namn för slutpunkten.
- I avsnittet Serverade entiteter
- Klicka i fältet Entitet för att öppna formuläret Select hanterad entitet.
- Select Extern modell.
- Select den modellprovider som du vill använda.
- Klicka på Bekräfta
- Ange namnet på den externa modell som du vill använda. Formuläret uppdateras dynamiskt baserat på ditt val. Se tillgängliga externa modeller.
- Select aktivitetstypen. Tillgängliga uppgifter är chatt, slutföranden och inbäddningar.
- Ange konfigurationsinformation för åtkomst till den valda modellprovidern. Det här är vanligtvis hemligheten som refererar till den personliga åtkomsttoken som du vill att slutpunkten ska använda för att komma åt den här modellen.
- Klicka på Skapa. Sidan Serveringsslutpunkter visas med tillståndet Serveringsslutpunkt som visas som Inte redo.
REST-API
Viktigt!
REST API-parameters för att skapa serverslutpunkter som hanterar externa modeller finns i offentlig förhandsversion.
I följande exempel skapas en slutpunkt som hanterar den första versionen av text-embedding-ada-002
modellen som tillhandahålls av OpenAI.
Se POST /api/2.0/serving-endpoints för slutpunktskonfiguration parameters.
{
"name": "openai_endpoint",
"config":
{
"served_entities":
[
{
"name": "openai_embeddings",
"external_model":{
"name": "text-embedding-ada-002",
"provider": "openai",
"task": "llm/v1/embeddings",
"openai_config":{
"openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
}
}
}
]
},
"rate_limits": [
{
"calls": 100,
"key": "user",
"renewal_period": "minute"
}
],
"tags": [
{
"key": "team",
"value": "gen-ai"
}
]
}
Följande är ett exempelsvar.
{
"name": "openai_endpoint",
"creator": "user@email.com",
"creation_timestamp": 1699617587000,
"last_updated_timestamp": 1699617587000,
"state": {
"ready": "READY"
},
"config": {
"served_entities": [
{
"name": "openai_embeddings",
"external_model": {
"provider": "openai",
"name": "text-embedding-ada-002",
"task": "llm/v1/embeddings",
"openai_config": {
"openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
}
},
"state": {
"deployment": "DEPLOYMENT_READY",
"deployment_state_message": ""
},
"creator": "user@email.com",
"creation_timestamp": 1699617587000
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "openai_embeddings",
"traffic_percentage": 100
}
]
},
"config_version": 1
},
"tags": [
{
"key": "team",
"value": "gen-ai"
}
],
"id": "69962db6b9db47c4a8a222d2ac79d7f8",
"permission_level": "CAN_MANAGE",
"route_optimized": false
}
SDK för MLflow-distributioner
Följande skapar en slutpunkt för inbäddningar med OpenAI text-embedding-ada-002
.
För externa modellslutpunkter måste du ange API-nycklar för den modellprovider som du vill använda. Se POST /api/2.0/serving-endpoints i REST-API:et för information om begäran och svar schema. En stegvis guide finns i Självstudie: Skapa externa modellslutpunkter för att fråga OpenAI-modeller.
Du kan också skapa slutpunkter för slutföranden och chattuppgifter, enligt vad task
som anges i fältet i external_model
avsnittet i konfigurationen. Se externa modeller i Mosaic AI Model Serving för modeller som stöds och providers för varje uppgift.
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
name="chat",
config={
"served_entities": [
{
"name": "completions",
"external_model": {
"name": "gpt-4",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config": {
"openai_api_key": "{{secrets/scope/key}}",
},
},
}
],
},
)
assert endpoint == {
"name": "chat",
"creator": "alice@company.com",
"creation_timestamp": 0,
"last_updated_timestamp": 0,
"state": {...},
"config": {...},
"tags": [...],
"id": "88fd3f75a0d24b0380ddc40484d7a31b",
}
Update modell som betjänar slutpunkter
När du har aktiverat en modellslutpunkt kan du set beräkningskonfigurationen efter behov. Den här konfigurationen är särskilt användbar om du behöver ytterligare resurser för din modell. Arbetsbelastningens storlek och beräkningskonfiguration spelar en viktig roll i vilka resurser som allokeras för att betjäna din modell.
Tills den nya konfigurationen är klar fortsätter den gamla konfigurationen att betjäna förutsägelsetrafik. Medan en update pågår, kan en annan update inte göras. I användargränssnittet för servering kan du avbryta en pågående konfiguration update genom att välja Avbryt update längst upp till höger på informationssidan för slutpunkten. Den här funktionen är endast tillgänglig i användargränssnittet för servering.
När en external_model
finns i en slutpunktskonfiguration kan de hanterade entiteterna list bara ha ett served_entity objekt. Befintliga slutpunkter med en external_model
kan inte uppdateras för att inte längre ha en external_model
. Om slutpunkten skapas utan en external_model
kan man inte update den för att lägga till en external_model
.
REST-API
Om du vill update slutpunkten kan du läsa dokumentationen om REST API update konfiguration för information om begäran och svar schema.
{
"name": "openai_endpoint",
"served_entities":
[
{
"name": "openai_chat",
"external_model":{
"name": "gpt-4",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config":{
"openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
}
}
}
]
}
SDK för MLflow-distributioner
Om du vill update slutpunkten kan du läsa dokumentationen om REST API update konfiguration för information om begäran och svar schema.
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
endpoint="chat",
config={
"served_entities": [
{
"name": "chats",
"external_model": {
"name": "gpt-4",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config": {
"openai_api_key": "{{secrets/scope/key}}",
},
},
}
],
},
)
assert endpoint == {
"name": "chats",
"creator": "alice@company.com",
"creation_timestamp": 0,
"last_updated_timestamp": 0,
"state": {...},
"config": {...},
"tags": [...],
"id": "88fd3f75a0d24b0380ddc40484d7a31b",
}
rate_limits = client.update_endpoint(
endpoint="chat",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 10,
}
],
},
)
assert rate_limits == {
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 10,
}
],
}