Skapa generativa AI-modeller 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 generativa AI-modeller.
Mosaic AI Model Serving stöder följande modeller:
Externa modeller. Det här är generativa 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 generativa AI-modeller 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 väljer du fliken Servering i arbetsytans vänstra sidopanel. API:erna för grundmodell finns överst i listvyn Slutpunkter.
Information om hur du kör frågor mot dessa slutpunkter finns i Fråga efter generativa AI-modeller.
Skapa en extern modell som betjänar slutpunkten
Följande beskriver hur du skapar en slutpunkt som hanterar en generativ AI-modell 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 Välj hanterad entitet .
- Välj Extern modell.
- Välj 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.
- Välj aktivitetstyp. 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-parametrarna 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 slutpunktskonfigurationsparametrar .
{
"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. Mer information om begäran och svarsschema finns i POST /api/2.0/serving-endpoints i REST-API:et. 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 och leverantörer som stöds 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",
}
Uppdatera modell som betjänar slutpunkter
När du har aktiverat en modellslutpunkt kan du ange beräkningskonfigurationen som önskat. 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. Det pågår en uppdatering, men det går inte att göra någon annan uppdatering. I användargränssnittet för servering kan du avbryta en pågående konfigurationsuppdatering genom att välja Avbryt uppdatering längst upp till höger på slutpunktens informationssida. 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 listan över hanterade entiteter 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 kan external_model
du inte uppdatera den för att lägga till en external_model
.
REST-API
Information om begäran och svarsschema finns i dokumentationen för REST API-uppdateringskonfiguration för att uppdatera slutpunkten.
{
"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
Information om begäran och svarsschema finns i dokumentationen för REST API-uppdateringskonfiguration för att uppdatera slutpunkten.
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,
}
],
}