Servir vários modelos para um modelo servindo endpoint
Este artigo descreve como configurar programaticamente um modelo de atendimento endpoint para atender a vários modelos e a divisão do tráfego entre eles.
O fornecimento de vários modelos a partir de um único endpoint permite que o senhor divida o tráfego entre diferentes modelos para comparar seu desempenho e facilitar os testes A/B. Você também pode servir diferentes versões de um modelo ao mesmo tempo, o que facilita a experimentação de novas versões e mantém a versão atual em produção.
O senhor pode servir qualquer um dos seguintes tipos de modelo em um endpoint do Mosaic AI Model Serving. O senhor não pode atender a diferentes tipos de modelos em um único endpoint. Por exemplo, o senhor não pode servir um modelo personalizado e um modelo externo no mesmo endpoint.
Generative AI models made available through Foundation Model APIs provisionamento Taxa de transferência
Requisitos
Consulte os Requisitos para a criação do modelo endpoint.
Para entender as opções de controle de acesso para o endpoint modelo Servindo e as orientações de práticas recomendadas para o gerenciamento endpoint, consulte Servindo endpoint ACLs.
Crie um endpoint e defina a divisão de tráfego inicial
Ao criar o endpoint servindo modelo usando o Databricks Mosaic AI servindo API ou o Databricks Mosaic AI servindo UI, o senhor também pode definir a divisão de tráfego inicial para os modelos que deseja servir nesse endpoint. As seções a seguir fornecem exemplos de configuração da divisão de tráfego para vários modelos personalizados ou modelos generativos AI servidos em um endpoint.
Servir vários modelos personalizados em um endpoint
O seguinte exemplo REST API cria um único endpoint com dois modelos personalizados em Unity Catalog e define a divisão de tráfego endpoint entre esses modelos. A entidade servida, current
, hospeda a versão 1 de model-A
e recebe 90% do tráfego endpoint, enquanto a outra entidade servida, challenger
, hospeda a versão 1 de model-B
e recebe 10% do tráfego endpoint.
POST /api/2.0/serving-endpoints
{
"name":"multi-model"
"config":
{
"served_entities":
[
{
"name":"current",
"entity_name":"catalog.schema.model-A",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
},
{
"name":"challenger",
"entity_name":"catalog.schema.model-B",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
}
],
"traffic_config":
{
"routes":
[
{
"served_model_name":"current",
"traffic_percentage":"90"
},
{
"served_model_name":"challenger",
"traffic_percentage":"10"
}
]
}
}
}
Servir vários modelos para um provisionamento Taxa de transferência endpoint
O exemplo a seguir REST API cria um único Foundation Model APIs provisionamento Taxa de transferência endpoint com dois modelos e define a divisão de tráfego endpoint entre esses modelos. O endpoint chamado multi-pt-model
hospeda a versão 2 do mistral_7b_instruct_v0_1-2
, que recebe 60% do tráfego do endpoint, e também hospeda a versão 3 do mixtral_8x7b_instruct_v0_1-3
, que recebe 40% do tráfego do endpoint.
POST /api/2.0/serving-endpoints
{
"name":"multi-pt-model"
"config":
{
"served_entities":
[
{
"name":"mistral_7b_instruct_v0_1-2",
"entity_name":"system.ai.mistral_7b_instruct_v0_1",
"entity_version":"2",
"min_provisioned_throughput":0,
"max_provisioned_throughput":1940
},
{
"name":"mixtral_8x7b_instruct_v0_1-3",
"entity_name":"system.ai.mixtral_8x7b_instruct_v0_1",
"entity_version":"3",
"min_provisioned_throughput":0,
"max_provisioned_throughput":1240
}
],
"traffic_config":
{
"routes":
[
{
"served_model_name":"mistral_7b_instruct_v0_1-2",
"traffic_percentage":"60"
},
{
"served_model_name":"mixtral_8x7b_instruct_v0_1-3",
"traffic_percentage":"40"
}
]
}
}
}
Servir vários modelos externos para um ponto de extremidade
O senhor também pode configurar vários modelos externos em um endpoint de serviço, desde que todos tenham o mesmo tipo de tarefa e cada modelo tenha um name
exclusivo. O senhor não pode ter modelos externos e não externos no mesmo endpoint de serviço.
O exemplo a seguir cria um endpoint de atendimento que roteia 50% do tráfego para gpt-4
fornecido pela OpenAI e os 50% restantes para claude-3-opus-20240229
fornecido pela Anthropic.
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="mix-chat-endpoint",
config={
"served_entities": [
{
"name": "served_model_name_1",
"external_model": {
"name": "gpt-4",
"provider": "openai",
"task": "llm/v1/chat",
"openai_config": {
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
}
}
},
{
"name": "served_model_name_2",
"external_model": {
"name": "claude-3-opus-20240229",
"provider": "anthropic",
"task": "llm/v1/chat",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
}
}
}
],
"traffic_config": {
"routes": [
{"served_model_name": "served_model_name_1", "traffic_percentage": 50},
{"served_model_name": "served_model_name_2", "traffic_percentage": 50}
]
},
}
)
Atualize a divisão de tráfego entre os modelos servidos
Você também pode atualizar a divisão de tráfego entre os modelos atendidos. O exemplo de API REST a seguir define o modelo servido, current
, para obter 50% do tráfego do endpoint e o outro modelo, challenger
, para obter os 50% restantes do tráfego.
O senhor também pode fazer essa atualização no site Serving tab na interface do usuário Databricks Mosaic AI usando o botão Edit configuration (Editar configuração).
PUT /api/2.0/serving-endpoints/{name}/config
{
"served_entities":
[
{
"name":"current",
"entity_name":"catalog.schema.model-A",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
},
{
"name":"challenger",
"entity_name":"catalog.schema.model-B",
"entity_version":"1",
"workload_size":"Small",
"scale_to_zero_enabled":true
}
],
"traffic_config":
{
"routes":
[
{
"served_model_name":"current",
"traffic_percentage":"50"
},
{
"served_model_name":"challenger",
"traffic_percentage":"50"
}
]
}
}
Consultar modelos individuais por trás de um endpoint
Em alguns cenários, o senhor pode querer consultar modelos individuais por trás do endpoint.
Você pode fazer isso usando:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Aqui o modelo servido específico é query. O formato da solicitação é o mesmo que consultar o endpoint. Ao consultar o modelo servido individual, as configurações de tráfego são ignoradas.
No contexto do exemplo endpoint multi-model
, se todas as solicitações forem enviadas para /serving-endpoints/multi-model/served-models/challenger/invocations
, todas as solicitações serão atendidas pelo modelo atendido challenger
.