Обслуживание нескольких моделей в конечной точке обслуживания модели
В этой статье описывается, как программно настроить конечную точку обслуживания модели для обслуживания нескольких моделей и разделения трафика между ними.
Обслуживание нескольких моделей из одной конечной точки позволяет разделить трафик между различными моделями для сравнения производительности и упрощения тестирования A/B. Вы также можете обслуживать разные версии модели одновременно, что упрощает экспериментирование с новыми версиями, сохраняя текущую версию в рабочей среде.
Вы можете обслуживать любой из следующих типов моделей в конечной точке обслуживания модели ИИ Мозаики. Вы не можете обслуживать разные типы моделей в одной конечной точке. Например, нельзя обслуживать пользовательскую модель и внешнюю модель в той же конечной точке.
- Пользовательские модели
- Созданные модели ИИ, доступные через API-интерфейсы модели Foundation, подготовленные для пропускной способности
- Внешние модели
Требования
См. сведения о требованиях для создания конечной точки обслуживания модели.
Сведения о параметрах управления доступом для конечных точек обслуживания моделей и рекомендации по управлению конечными точками см. в статье "Обслуживание списков управления конечными точками".
Создание конечной точки и настройка первоначального разделения трафика
При создании конечных точек обслуживания моделей с помощью API обслуживания Мозаики Databricks Или пользовательского интерфейса обслуживания Мозаичного ИИ Databricks можно также задать начальный трафик для моделей, которые вы хотите обслуживать в этой конечной точке. В следующих разделах приведены примеры настройки разделения трафика для нескольких пользовательских моделей или моделей создания ИИ, обслуживаемых в конечной точке.
Обслуживание нескольких пользовательских моделей в конечной точке
Следующий пример REST API создает одну конечную точку с двумя пользовательскими моделями в каталоге Unity и задает трафик конечной точки, разделенный между этими моделями. Обслуживаемая сущность, current
узлы версии 1 и получает 90% трафика конечной точки, а другая обслуживаемая сущность, challenger
узлы версии 1 model-A
model-B
и получает 10% трафика конечной точки.
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"
}
]
}
}
}
Обслуживание нескольких моделей в подготовленной конечной точке пропускной способности
В следующем примере REST API создается отдельная конечная точка пропускной способности, подготовленная моделью, с двумя моделями, и задает трафик конечной точки, разделенный между этими моделями. Конечная точка с именем multi-pt-model
, узлы версии 2 из mistral_7b_instruct_v0_1-2
которых получает 60 % трафика конечной точки, а также размещает версию 3, из mixtral_8x7b_instruct_v0_1-3
которой получает 40 % трафика конечной точки.
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"
}
]
}
}
}
Обслуживание нескольких внешних моделей в конечной точке
Вы также можете настроить несколько внешних моделей в конечной точке обслуживания, если все они имеют одинаковый тип задачи, и каждая модель имеет уникальныйname
. В одной конечной точке обслуживания нельзя использовать как внешние модели, так и не внешние модели.
В следующем примере создается конечная точка обслуживания, которая направляет 50% трафика gpt-4
, предоставляемого OpenAI, и оставшуюся 50% для claude-3-opus-20240229
предоставления 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}
]
},
}
)
Обновление разделения трафика между обслуживами моделями
Вы также можете обновить трафик, разделенный между обслуживаемой моделями. Следующий пример REST API задает обслуживаемую модель, current
чтобы получить 50% трафика конечной точки и другой модели, challenger
чтобы получить оставшийся 50% трафика.
Вы также можете сделать это обновление на вкладке "Обслуживание" в пользовательском интерфейсе Databricks Mosaic AI с помощью кнопки "Изменить конфигурацию".
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"
}
]
}
}
Запрос отдельных моделей за конечной точкой
В некоторых сценариях может потребоваться запросить отдельные модели за конечной точкой.
Это можно сделать с помощью:
POST /serving-endpoints/{endpoint-name}/served-models/{served-model-name}/invocations
Здесь запрашивается конкретная обслуживаемая модель. Формат запроса совпадает с запросом конечной точки. При запросе отдельной обслуживаемой модели параметры трафика игнорируются.
В контексте примера конечной multi-model
точки, если все запросы отправляются /serving-endpoints/multi-model/served-models/challenger/invocations
, все запросы обслуживаются моделью challenger
.