Fornecer vários modelos a um ponto de extremidade de serviço de modelo
Este artigo descreve como configurar programaticamente um ponto de extremidade de serviço de modelo para atender a vários modelos e a divisão de tráfego entre eles.
Atender a vários modelos de um único endpoint permite dividir o tráfego entre diferentes modelos para comparar seu desempenho e facilitar o teste 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, mantendo a versão atual em produção.
Você pode fornecer qualquer um dos seguintes tipos de modelo em um endpoint do Mosaic AI Model Serving. Você não pode atender a diferentes tipos de modelo em um único ponto de extremidade. Por exemplo, você não pode servir um modelo personalizado e um modelo externo no mesmo ponto de extremidade.
- Modelos personalizados
- Modelos de IA generativa disponibilizados por meio de APIs do Foundation Model provisionaram a taxa de transferência
- Modelos externos
Requisitos
Consulte os Requisitos para a criação do ponto de extremidade de serviço de modelo.
Para entender as opções de controle de acesso para pontos de extremidade de serviço de modelo e diretrizes de melhores práticas para o gerenciamento de ponto de extremidade, consulte ACLs de pontos de extremidade de serviço.
Criar um ponto de extremidade e definir a divisão de tráfego inicial
Ao criar pontos de extremidade de serviço de modelo usando a API de serviço do Databricks Mosaic AI ou a interface do usuário de serviço do Databricks Mosaic AI, você também pode definir a divisão de tráfego inicial para os modelos que deseja atender nesse ponto de extremidade. As seções a seguir fornecem exemplos de como definir a divisão de tráfego para vários modelos personalizados ou modelos de IA generativa atendidos em um endpoint.
Fornecer vários modelos personalizados a um endpoint
O exemplo de API REST a seguir cria um único endpoint com dois modelos personalizados no Catálogo do Unity e define a divisão de tráfego de endpoint entre esses modelos. A entidade atendida, current
, hospeda a versão 1 e model-A
obtém 90% do tráfego do endpoint, enquanto a outra entidade atendida, challenger
, hospeda a versão 1 e model-B
obtém 10% do tráfego do 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"
}
]
}
}
}
Fornecer vários modelos para um endpoint de taxa de transferência provisionada
O exemplo de API REST a seguir cria um único terminal de taxa de transferência provisionado de APIs do Foundation Model com dois modelos e define a divisão de tráfego de terminal entre esses modelos. O endpoint chamado multi-pt-model
, hospeda a versão 2 que mistral_7b_instruct_v0_1-2
obtém 60% do tráfego do endpoint e também hospeda a versão 3 mixtral_8x7b_instruct_v0_1-3
, que obtém 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"
}
]
}
}
}
Fornecer vários modelos externos para um ponto de extremidade
Você 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
. Não é permitido misturar modelos externos e internos no mesmo ponto de extremidade de serviço.
O exemplo a seguir cria um endpoint de veiculação que roteia 50% do tráfego para o gpt-4
fornecido pela OpenAI e os 50% restantes para o 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}
]
},
}
)
Atualizar a divisão de tráfego entre modelos fornecidos
Você também pode atualizar a divisão de tráfego entre os modelos fornecidos. O exemplo de API REST a seguir define o modelo servido, current
, para obter 50% do tráfego de endpoint e o outro modelo, challenger
, para obter os 50% restantes do tráfego.
Você também pode fazer essa atualização na guia Serviço na interface do usuário do Databricks Mosaic AI UI usando o botão 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 ponto de extremidade
Em alguns cenários, talvez você queira consultar modelos individuais por trás do ponto de extremidade.
Você pode fazer isso usando:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Aqui, o modelo fornecido específico é consultado. O formato de solicitação é o mesmo que consultar o ponto de extremidade. Ao consultar o modelo de serviço individual, as configurações de tráfego são ignoradas.
No contexto do exemplo de ponto de extremidade 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 servido por challenger
.