Criar um ponto de extremidade de IA generativa servindo modelo

Prévia

O Mosaic AI Model Serving está em Public Preview e é compatível com os sites us-east1 e us-central1.

Neste artigo, o senhor aprenderá a criar um endpoint de modelo de serviço que implante e sirva modelos generativos de AI.

O Mosaic AI Model Serving é compatível com os seguintes modelos:

  • Modelos externos. Esses são modelos generativos que são hospedados fora da Databricks. que atendem a modelos externos podem ser controlados de forma centralizada e os clientes podem estabelecer limites de taxa e controle de acesso para eles. Os exemplos incluem modelos de IA generativa, como o GPT-4 da OpenAI, o Claude da Anthropic e outros.

A servindo modelo oferece as seguintes opções para a criação da servindo modelo endpoint:

  • A UI de serviço

  • API REST

  • SDK de implantações do MLflow

Para criar endpoints que atendam a modelos tradicionais de ML ou Python, consulte Criar endpoint de modelo de serviço personalizado.

Requisitos

  • Um Databricks workspace em uma região de modelos externos suportados.

  • Para criar um endpoint usando o SDK do MLflow Deployments, o senhor deve instalar o cliente do MLflow Deployment. Para instalá-lo, execute:

import mlflow.deployments

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

Criar um modelo de serviço externo endpoint

A seguir, descrevemos como criar um endpoint que serve um modelo de IA generativo disponibilizado usando modelos externos da Databricks.

  1. No campo Name (Nome ), forneça um nome para seu endpoint.

  2. Na seção Entidades atendidas

    1. Clique no campo Entity (Entidade ) para abrir o formulário Select served entity (Selecionar entidade atendida ).

    2. Selecione o modelo externo.

    3. Selecione o provedor de modelos que o senhor deseja usar.

    4. Clique em Confirm

    5. Forneça o nome do modelo externo que o senhor deseja usar. O formulário é atualizado dinamicamente com base em sua seleção. Veja os modelos externos disponíveis.

    6. Selecione o tipo de tarefa. As tarefas disponíveis são bate-papo, conclusões e incorporações.

    7. Forneça os detalhes de configuração para acessar o provedor de modelo selecionado. Normalmente, esse é o segredo que faz referência ao access tokenpessoal que o senhor deseja que o endpoint use para acessar esse modelo.

  3. Clique em Create. A página Serving endpoints é exibida com o estado Serving endpoint mostrado como Not Ready.

Criar um modelo de serviço endpoint

Importante

Os parâmetros do site REST API para a criação de pontos de extremidade de serviço que atendem a modelos externos estão em Public Preview.

O exemplo a seguir cria um endpoint que serve a primeira versão do modelo text-embedding-ada-002 fornecido pela OpenAI.

Consulte POST /api/2.0/serving-endpoint para os parâmetros de configuração do endpoint.

{
  "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"
    }
  ]
}

A seguir, um exemplo de resposta.

{
  "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
}

O seguinte cria um endpoint para embeddings com OpenAI text-embedding-ada-002.

Para o endpoint de modelo externo, o senhor deve fornecer a chave API para o provedor de modelo que deseja usar. Consulte POST /api/2.0/serving-endpoint em REST API para obter detalhes do esquema de solicitação e resposta. Para obter um guia passo a passo, consulte o tutorial: Criar endpoint de modelo externo para consultar modelos OpenAI.

Também é possível criar endpoints para conclusões e tarefas de chat, conforme especificado pelo campo task na seção external_model da configuração. Consulte Modelos externos no Mosaic AI Model Serving para saber quais são os modelos e provedores suportados para cada tarefa.


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",
}

Atualizar o endpoint do modelo de serviço

Depois de ativar um endpoint modelo, o senhor pode definir a configuração do compute conforme desejar. Essa configuração é particularmente útil se o senhor precisar de recurso adicional para o seu modelo. O tamanho da carga de trabalho e a compute configuração key do site desempenham um papel importante em quais recursos são alocados para atender ao seu modelo.

Até que a nova configuração esteja pronta, a configuração antiga continua atendendo ao tráfego de previsão. Enquanto houver uma atualização em andamento, outra atualização não poderá ser feita. Na interface de usuário do Serving, o senhor pode cancelar uma atualização de configuração em andamento selecionando Cancel update (Cancelar atualização ) no canto superior direito da página de detalhes do endpoint. Essa funcionalidade só está disponível na UI de serviço.

Quando um external_model está presente em uma configuração de endpoint, a lista de entidades servidas só pode ter um objeto served_entity. O ponto de extremidade existente com um external_model não pode ser atualizado para não ter mais um external_model. Se o endpoint for criado sem um external_model, o senhor não poderá atualizá-lo para adicionar um external_model.

Para atualizar seu endpoint, consulte a documentação de configuração de atualização da API REST para obter detalhes sobre o esquema de solicitação e resposta.

{
  "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}}"
        }
      }
    }
  ]
}

Para atualizar seu endpoint, consulte a documentação de configuração de atualização da API REST para obter detalhes sobre o esquema de solicitação e resposta.

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,
        }
    ],
}