Crie um modelo de IA generativa atendendo pontos de extremidade

Neste artigo, você aprenderá como criar pontos de extremidade de serviço de modelo que implantam e servem modelos de IA generativa.

O Serviço de Modelo de IA do Mosaico é dá suporte para os seguintes modelos:

  • Modelos externos. Estes são modelos generativos que são hospedados fora da Databricks. Os pontos de extremidade que atendem modelos externos podem ser controlados centralmente 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.

  • Modelos fundamentais abertos de última geração disponibilizados pelas APIs de modelos fundamentais. Esses modelos são arquiteturas de modelo de base com curadoria que dão suporte à inferência otimizada. Modelos básicos, como Meta-Llama-3.1-70B-Instruct, GTE-Large e Mistral-7B estão disponíveis para uso imediato com preços de pagamento por token . Cargas de trabalho de produção, usando modelos de base ou ajustados, podem ser implantadas com garantias de desempenho usando a taxa de transferência provisionada.

O Serviço de Modelo fornece as seguintes opções para criação de ponto de extremidade de modelagem:

  • A interface do usuário de serviço
  • API REST
  • SDK de Implantações do MLflow

Para criar pontos de extremidade que atendem modelos ML ou Python tradicionais, consulte Criar modelo personalizado que atende pontos de extremidade.

Requisitos

import mlflow.deployments

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

Criar um ponto de extremidade de serviço de foundation model

Você pode criar um ponto de extremidade que atende variantes ajustadas de modelos fundamentais disponibilizados usando a taxa de transferência provisionada de APIs de modelos fundamentais. Confira Criar ponto de extremidade de taxa de transferência provisionada usando a API REST.

Para modelos fundamentais que são disponibilizados usando APIs de modelos fundamentais pagas por token, o Databricks fornece automaticamente pontos de extremidade específicos para acessar os modelos com suporte no workspace do Databricks. Para acessá-los, selecione a guia Servir na barra lateral esquerda do workspace. As APIs de foundation model estão localizadas na parte superior da exibição de lista pontos de extremidade.

Para consultar esses pontos de extremidade, consulte Consultar modelos de IA generativa.

Criar um ponto de extremidade de serviço de modelo externo

O conteúdo a seguir descreve como criar um ponto de extremidade que atende a um modelo de IA generativa disponibilizado por meio do uso de modelos externos do Databricks.

Servindo a interface do usuário

  1. No campo Nome, forneça um nome para o ponto de extremidade.
  2. Na seção Entidades atendidas
    1. Clique no campo Entidade para abrir o formulário Selecionar entidade atendida.
    2. Selecione Modelo externo.
    3. Selecione o provedor de modelo que você deseja usar.
    4. Clique em Confirmar
    5. Forneça o nome do modelo externo que você deseja usar. O formulário é atualizado dinamicamente com base em sua seleção. Consulte os modelos externos disponíveis.
    6. Selecione o tipo de tarefa. As tarefas disponíveis são chat, conclusões e inserçõ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 token de acesso pessoal que você deseja que o ponto de extremidade use para acessar esse modelo.
  3. Clique em Criar. A página Pontos de extremidade de serviço é exibida com o estado De serviço do ponto de extremidade mostrado como Não Pronto.

Criar um ponto de extremidade de serviço de modelo

API REST

Importante

Os parâmetros da API REST para criar pontos de extremidade de serviço que atendem a modelos externos estão em Versão Prévia Pública.

O exemplo a seguir cria um ponto de extremidade que fornece a primeira versão do modelo text-embedding-ada-002 fornecido pela OpenAI.

Consulte POST /api/2.0/serving-endpoints para obter os parâmetros de configuração dos pontos de extremidade.

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

SDK de Implantações do MLflow

A seguir, cria um ponto de extremidade para inserções com o OpenAI text-embedding-ada-002.

Para pontos de extremidade de modelo externos, você deve fornecer chaves de API para o provedor de modelo que deseja usar. Consulte POST /api/2.0/serving-endpoints na API REST para obter detalhes do esquema de solicitação e resposta. Para obter um guia passo a passo, consulte Tutorial: Criar pontos de extremidade de modelo externos para consultar modelos de OpenAI.

Também é possível criar pontos de extremidade para conclusões e tarefas de chat, conforme especificado pelo campo task na seção external_model da configuração. Consulte Modelos externos no Serviço de Modelo do Mosaic AI para modelos e provedores com suporte 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 os pontos de extremidade que servem ao modelo

Após habilitar um ponto de extremidade de modelo, você pode definir a configuração de computação conforme desejado. Essa configuração é particularmente útil se você precisar de recursos adicionais para seu modelo. O tamanho da carga de trabalho e a configuração de computação desempenham uma função fundamenta em quais os recursos são alocados para servir seu modelo.

Até que a nova configuração esteja pronta, a configuração antiga continuará atendendo ao tráfego de previsão. Embora haja uma atualização em andamento, outra atualização não pode ser feita. Na interface do usuário de serviço, é possível cancelar uma atualização de configuração em andamento selecionando Cancelar atualização no canto superior direito da página de detalhes do ponto de extremidade. Essa funcionalidade só está disponível na interface do usuário de serviço.

Quando um external_model está presente em uma configuração de ponto de extremidade, a lista de entidades atendidas só pode ter um objeto served_entity. Os pontos de extremidade existentes com external_model não podem ser atualizados para que deixem de ter external_model. Se o ponto de extremidade for criado sem um external_model, você não poderá atualizá-lo para adicionar um external_model.

API REST

Para atualizar seu ponto de extremidade, consulte a documentação de configuração de atualização da API REST para obter detalhes do 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}}"
        }
      }
    }
  ]
}

SDK de Implantações do MLflow

Para atualizar seu ponto de extremidade, consulte a documentação de configuração de atualização da API REST para obter detalhes do 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,
        }
    ],
}

Recursos adicionais