Создание конечных точек обслуживания модели создания модели искусственного интеллекта

Из этой статьи вы узнаете, как создавать конечные точки обслуживания моделей, которые развертывают и обслуживают созданные модели искусственного интеллекта.

Мозаичная служба моделей ИИ поддерживает следующие модели:

  • Внешние модели. Это генеривные модели, размещенные за пределами Databricks. Конечные точки, обслуживающие внешние модели, могут централизованно управляться, и клиенты могут устанавливать ограничения скорости и управление доступом для них. К примерам относятся модели создания ИИ, такие как, GPT-4 OpenAI, Anthropic в Клоде и другие.

  • Современные модели открытого фонда, предоставляемые API-интерфейсами модели Foundation. Эти модели являются курируемыми архитектурами базовых моделей, поддерживающими оптимизированное вывод. Базовые модели, такие как Meta-Llama-3.1-70B-Instruct, GTE-Large и Mistral-7B, доступны для немедленного использования с оплатой за токен . Рабочие нагрузки, использующие базовые или точно настроенные модели, можно развернуть с гарантиями производительности с помощью подготовленной пропускной способности.

Служба моделей предоставляет следующие параметры для создания конечной точки обслуживания модели:

  • Пользовательский интерфейс обслуживания
  • REST API
  • Пакет SDK для развертываний MLflow

Сведения о создании конечных точек, обслуживающих традиционные модели машинного обучения или Python, см. в разделе "Создание конечных точек службы пользовательских моделей".

Требования

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Создание конечной точки обслуживания базовой модели

Вы можете создать конечную точку, которая обслуживает точно настроенные варианты базовых моделей, доступных с помощью API-интерфейсов модели Foundation, подготовленных пропускной способностью. См. статью "Создание подготовленной конечной точки пропускной способности с помощью REST API".

Для базовых моделей, доступных с помощью API-интерфейсов модели Foundation за токен, Databricks автоматически предоставляет определенные конечные точки для доступа к поддерживаемым моделям в рабочей области Databricks. Чтобы получить к ним доступ, выберите вкладку "Обслуживание " в левой боковой панели рабочей области. API-интерфейсы модели foundation находятся в верхней части представления списка конечных точек.

Сведения о запросах этих конечных точек см. в разделе "Модели создания запросов и искусственного интеллекта".

Создание конечной точки обслуживания внешней модели

Ниже описано, как создать конечную точку, которая служит модели создания искусственного интеллекта, доступной с помощью внешних моделей Databricks.

Обслуживающий пользовательский интерфейс

  1. В поле "Имя" укажите имя конечной точки.
  2. В разделе "Обслуживаемые сущности "
    1. Щелкните поле "Сущность", чтобы открыть форму "Выбор обслуживаемой сущности".
    2. Выберите внешнюю модель.
    3. Выберите поставщик модели, который вы хотите использовать.
    4. Щелкните Confirm (Подтвердить).
    5. Укажите имя внешней модели, которую вы хотите использовать. Форма динамически обновляется на основе выбранного фрагмента. См. доступные внешние модели.
    6. Выберите тип задачи. Доступные задачи : чат, завершение и внедрение.
    7. Укажите сведения о конфигурации для доступа к выбранному поставщику моделей. Обычно это секрет, ссылающийся на личный маркер доступа, который требуется использовать конечной точке для доступа к этой модели.
  3. Нажмите кнопку Создать. Откроется страница "Обслуживание конечных точек" с состоянием конечной точки обслуживания, отображаемой как "Не готово".

Создание конечной точки обслуживания модели

REST API

Внимание

Параметры REST API для создания конечных точек обслуживания, обслуживающих внешние модели, находятся в общедоступной предварительной версии.

В следующем примере создается конечная точка, которая служит первой версией модели, предоставленной text-embedding-ada-002 OpenAI.

Дополнительные сведения о параметрах конфигурации конечной точки см. в разделе POST /api/2.0/service-endpoints .

{
  "name": "openai_endpoint",
  "config":
  {
    "served_entities":
    [
      {
        "name": "openai_embeddings",
        "external_model":{
          "name": "text-embedding-ada-002",
          "provider": "openai",
          "task": "llm/v1/embeddings",
          "openai_config":{
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        }
      }
    ]
  },
  "rate_limits": [
    {
      "calls": 100,
      "key": "user",
      "renewal_period": "minute"
    }
  ],
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ]
}

Далее представлен пример ответа.

{
  "name": "openai_endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1699617587000,
  "last_updated_timestamp": 1699617587000,
  "state": {
    "ready": "READY"
  },
  "config": {
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model": {
          "provider": "openai",
          "name": "text-embedding-ada-002",
          "task": "llm/v1/embeddings",
          "openai_config": {
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        },
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1699617587000
      }
  ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "openai_embeddings",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ],
  "id": "69962db6b9db47c4a8a222d2ac79d7f8",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

Пакет SDK для развертываний MLflow

В следующем примере создается конечная точка для внедрения с помощью OpenAI text-embedding-ada-002.

Для внешних конечных точек модели необходимо указать ключи API для поставщика моделей, который вы хотите использовать. Дополнительные сведения о схеме запроса и ответа см. в разделе POST /api/2.0/services-endpoints в REST API. Пошаговое руководство см . в руководстве по созданию конечных точек внешней модели для запроса моделей OpenAI.

Вы также можете создавать конечные точки для завершения и задач чата, как указано task в поле в external_model разделе конфигурации. Дополнительные сведения о поддерживаемых моделях и поставщиках для каждой задачи см . в разделе "Внешние модели и модели ИИ Для мозаики".


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="chat",
    config={
        "served_entities": [
            {
                "name": "completions",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

Обновление конечных точек обслуживания модели

После включения конечной точки модели можно настроить конфигурацию вычислений в нужном виде. Эта конфигурация особенно полезна, если требуются дополнительные ресурсы для модели. Размер рабочей нагрузки и конфигурация вычислений играют ключевую роль в выборе ресурсов, выделяемых для обслуживания модели.

Пока новая конфигурация не будет готова, старая конфигурация будет обслуживать трафик прогнозирования. Пока выполняется обновление, еще одно обновление невозможно сделать. В пользовательском интерфейсе обслуживания можно отменить обновление конфигурации во время выполнения, нажав кнопку "Отменить обновление " в правом верхнем углу страницы сведений о конечной точке. Эта функция доступна только в пользовательском интерфейсе обслуживания.

external_model При наличии в конфигурации конечной точки список обслуживающих сущностей может иметь только один объект served_entity. Существующие конечные точки с external_model не может быть обновлены, чтобы больше не было external_model. Если конечная точка создана без нее external_model, ее нельзя обновить, чтобы добавить external_model.

REST API

Чтобы обновить конечную точку, ознакомьтесь с документацией по конфигурации обновления REST API для сведений о схеме запроса и ответа.

{
  "name": "openai_endpoint",
  "served_entities":
  [
    {
      "name": "openai_chat",
      "external_model":{
        "name": "gpt-4",
        "provider": "openai",
        "task": "llm/v1/chat",
        "openai_config":{
          "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
        }
      }
    }
  ]
}

Пакет SDK для развертываний MLflow

Чтобы обновить конечную точку, ознакомьтесь с документацией по конфигурации обновления REST API для сведений о схеме запроса и ответа.

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
    endpoint="chat",
    config={
        "served_entities": [
            {
                "name": "chats",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chats",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
  }

rate_limits = client.update_endpoint(
    endpoint="chat",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 10,
            }
        ],
    },
)
assert rate_limits == {
    "rate_limits": [
        {
            "key": "user",
            "renewal_period": "minute",
            "calls": 10,
        }
    ],
}

Дополнительные ресурсы