엔드포인트를 제공하는 모델에 여러 모델 제공
이 문서에서는 여러 모델을 제공하도록 엔드포인트를 제공하는 모델을 프로그래밍 방식으로 구성하는 방법과 모델 간에 분할된 트래픽을 설명합니다.
단일 엔드포인트에서 여러 모델을 제공하면 서로 다른 모델 간에 트래픽을 분할하여 성능을 비교하고 A/B 테스트를 용이하게 할 수 있습니다. 또한 다른 버전의 모델을 동시에 제공할 수 있으므로 프로덕션 환경에서 현재 버전을 유지하면서 새 버전을 더 쉽게 실험할 수 있습니다.
Mosaic AI 모델 서비스 엔드포인트에서 다음 모델 형식을 제공할 수 있습니다. 단일 엔드포인트에서 다른 모델 형식을 제공할 수 없습니다. 예를 들어 동일한 엔드포인트에서 사용자 지정 모델 및 외부 모델을 제공할 수 없습니다.
- 사용자 지정 모델
- 기본 모델 API 프로비전된 처리량을 통해 사용할 수 있는 생성 AI 모델
- 외부 모델
요구 사항
엔드포인트 만들기를 제공하는 모델에 대한 요구 사항을 참조하세요.
끝점 관리를 위해 끝점을 제공하는 모델에 대한 액세스 제어 옵션을 이해하려면 끝점 ACL 제공을 참조하세요.
끝점을 만들고 초기 트래픽 분할 설정
Databricks Mosaic AI 서비스 API 또는 UI를 제공하는 Databricks Mosaic AI를 사용하여 엔드포인트를 제공하는 모델을 만들 때 해당 엔드포인트에서 제공하려는 모델에 대한 초기 트래픽 분할을 설정할 수도 있습니다. 다음 섹션에서는 엔드포인트에서 제공되는 여러 사용자 지정 모델 또는 생성 AI 모델에 대한 트래픽 분할을 설정하는 예제를 제공합니다.
엔드포인트에 여러 사용자 지정 모델 제공
다음 REST API 예제에서는 Unity 카탈로그에 두 개의 사용자 지정 모델을 사용하여 단일 엔드포인트를 만들고 해당 모델 간에 분할된 엔드포인트 트래픽을 설정합니다. 제공된 엔터티 current
, 호스트 버전 1 및 model-A
엔드포인트 트래픽의 90%를 가져오는 반면, challenger
다른 제공된 엔터티는 버전 1을 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 예제에서는 두 개의 모델로 프로비전된 처리량 엔드포인트를 단일 Foundation Model API를 만들고 해당 모델 간에 분할된 엔드포인트 트래픽을 설정합니다. 명명된 multi-pt-model
엔드포인트는 엔드포인트 트래픽의 mistral_7b_instruct_v0_1-2
60%를 가져오는 버전 2를 호스트하며, 그 중 mixtral_8x7b_instruct_v0_1-3
3개는 엔드포인트 트래픽의 40%를 가져오는 버전 3을 호스트합니다.
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
경우 여러 외부 모델을 구성할 수도 있습니다. 동일한 서비스 엔드포인트에는 외부 모델과 외부 모델이 모두 있을 수 없습니다.
다음 예제에서는 OpenAI에서 제공하는 트래픽 gpt-4
의 50%를 라우팅하고 나머지 50%는 Anthropic에서 제공하는 서비스 엔드포인트를 claude-3-opus-20240229
만듭니다.
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 예제에서는 엔드포인트 트래픽과 다른 모델의 50%를 가져와서 나머지 50%의 트래픽을 가져오기 위해 제공된 모델을 current
challenger
설정합니다.
구성 편집 버튼을 사용하여 Databricks Mosaic AI UI의 서비스 탭에서 이 업데이트를 수행할 수도 있습니다.
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
제공된 모델에서 제공됩니다.