Руководство. Создание конечных точек внешней модели для запроса моделей OpenAI
В этой статье приведены пошаговые инструкции по настройке и запросу внешней конечной точки модели, которая служит моделям OpenAI для завершения, чата и внедрения с помощью пакета SDK для развертываний MLflow. Дополнительные сведения о внешних моделях.
Если вы предпочитаете использовать пользовательский интерфейс обслуживания для выполнения этой задачи, см. статью "Создание внешней конечной точки обслуживания модели".
Требования
- Databricks Runtime 13.0 ML или более поздней версии.
- MLflow 2.9 или более поздней версии.
- Ключи API OpenAI.
- Установите интерфейс командной строки Databricks версии 0.205 или более поздней.
(Необязательно) Шаг 0. Хранение ключа API OpenAI с помощью интерфейса командной строки секретов Databricks
Ключи API можно предоставить в виде строк обычного текста на шаге 3 или с помощью секретов Azure Databricks.
Чтобы сохранить ключ API OpenAI в качестве секрета, можно использовать интерфейс командной строки секретов Databricks (версия 0.205 и выше). Для секретов также можно использовать REST API.
Далее создается именованной областью секрета, my_openai_secret_scope
а затем создается секрет openai_api_key
в этой области.
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
Шаг 1. Установка MLflow с поддержкой внешних моделей
Используйте следующую команду, чтобы установить версию MLflow с поддержкой внешних моделей:
%pip install mlflow[genai]>=2.9.0
Шаг 2. Создание конечной точки внешней модели и управление ими
Внимание
Примеры кода в этом разделе демонстрируют использование пакета SDK CRUD для общедоступной предварительной версии MLflow.
Чтобы создать внешнюю конечную точку модели для крупной языковой модели (LLM), используйте create_endpoint()
метод из пакета SDK для развертываний MLflow. Можно также создать внешние конечные точки модели в пользовательском интерфейсе обслуживания.
Следующий фрагмент кода создает конечную точку завершения для OpenAI gpt-3.5-turbo-instruct
, как указано в served_entities
разделе конфигурации. Для конечной точки обязательно заполните name
openai_api_key
уникальные значения для каждого поля.
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}"
}
}
}]
}
)
В следующем фрагменте кода показано, как предоставить ключ API OpenAI в виде строки открытого текста, чтобы создать ту же конечную точку завершения, что и выше.
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_key_plaintext": "sk-yourApiKey"
}
}
}]
}
)
При использовании Azure OpenAI можно также указать имя развертывания Azure OpenAI, URL-адрес конечной точки и версию API в openai_config
разделе конфигурации.
client.create_endpoint(
name="openai-completions-endpoint",
config={
"served_entities": [
{
"name": "openai-completions",
"external_model": {
"name": "gpt-3.5-turbo-instruct",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/my_openai_secret_scope/openai_api_key}}",
"openai_api_base": "https://my-azure-openai-endpoint.openai.azure.com",
"openai_deployment_name": "my-gpt-35-turbo-deployment",
"openai_api_version": "2023-05-15"
},
},
}
],
},
)
Чтобы обновить конечную точку, используйте update_endpoint()
. В следующем фрагменте кода показано, как обновить ограничения скорости конечной точки до 20 вызовов в минуту на пользователя.
client.update_endpoint(
endpoint="openai-completions-endpoint",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 20
}
],
},
)
Шаг 3. Отправка запросов во внешнюю конечную точку модели
Внимание
Примеры кода в этом разделе демонстрируют использование метода пакета SDK для predict()
развертывания MLflow.
Вы можете отправлять запросы чата, завершения и внедрения запросов во внешнюю конечную точку модели с помощью метода пакета SDK для predict()
развертываний MLflow.
В следующем примере отправляется запрос gpt-3.5-turbo-instruct
на размещение OpenAI.
completions_response = client.predict(
endpoint="openai-completions-endpoint",
inputs={
"prompt": "What is the capital of France?",
"temperature": 0.1,
"max_tokens": 10,
"n": 2
}
)
completions_response == {
"id": "cmpl-8QW0hdtUesKmhB3a1Vel6X25j2MDJ",
"object": "text_completion",
"created": 1701330267,
"model": "gpt-3.5-turbo-instruct",
"choices": [
{
"text": "The capital of France is Paris.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
},
{
"text": "Paris is the capital of France",
"index": 1,
"finish_reason": "stop",
"logprobs": None
},
],
"usage": {
"prompt_tokens": 7,
"completion_tokens": 16,
"total_tokens": 23
}
}
Шаг 4. Сравнение моделей из другого поставщика
Служба моделей поддерживает множество внешних поставщиков моделей, включая Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI и многое другое. Вы можете сравнить LLM между поставщиками, помогая оптимизировать точность, скорость и стоимость приложений с помощью игровой площадки ИИ.
В следующем примере создается конечная точка для anthropic claude-2
и сравнивается ответ на вопрос, использующий OpenAI gpt-3.5-turbo-instruct
. Оба ответа имеют одинаковый стандартный формат, что упрощает их сравнение.
Создание конечной точки для anthropic claude-2
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
client.create_endpoint(
name="anthropic-completions-endpoint",
config={
"served_entities": [
{
"name": "claude-completions",
"external_model": {
"name": "claude-2",
"provider": "anthropic",
"task": "llm/v1/completions",
"anthropic_config": {
"anthropic_api_key": "{{secrets/my_anthropic_secret_scope/anthropic_api_key}}"
},
},
}
],
},
)
Сравнение ответов из каждой конечной точки
openai_response = client.predict(
endpoint="openai-completions-endpoint",
inputs={
"prompt": "How is Pi calculated? Be very concise."
}
)
anthropic_response = client.predict(
endpoint="anthropic-completions-endpoint",
inputs={
"prompt": "How is Pi calculated? Be very concise."
}
)
openai_response["choices"] == [
{
"text": "Pi is calculated by dividing the circumference of a circle by its diameter."
" This constant ratio of 3.14159... is then used to represent the relationship"
" between a circle's circumference and its diameter, regardless of the size of the"
" circle.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
}
]
anthropic_response["choices"] == [
{
"text": "Pi is calculated by approximating the ratio of a circle's circumference to"
" its diameter. Common approximation methods include infinite series, infinite"
" products, and computing the perimeters of polygons with more and more sides"
" inscribed in or around a circle.",
"index": 0,
"finish_reason": "stop",
"logprobs": None
}
]