Partilhar via


Crie um modelo de IA generativo servindo endpoints

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

O Mosaic AI Model Serving suporta os seguintes modelos:

  • Modelos externos. Estes são modelos generativos que são hospedados fora do Databricks. Os endpoints que atendem modelos externos podem ser controlados centralmente e os clientes podem estabelecer limites de taxa e controle de acesso para eles. Exemplos incluem modelos generativos de IA como GPT-4 da OpenAI, Claude da Anthropic e outros.

  • Modelos de fundação aberta de última geração disponibilizados por APIs de modelo de fundação. Esses modelos são arquiteturas de modelo de base selecionadas que suportam 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 pagos por token . As cargas de trabalho de produção, usando modelos básicos ou ajustados, podem ser implantadas com garantias de desempenho usando taxa de transferência provisionada.

O Model Serving fornece as seguintes opções para a criação de pontos finais de serviço de modelo:

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

Para criar pontos de extremidade que servem modelos tradicionais de ML ou Python, consulte Criar ponto de extremidade de serviço de modelo personalizado.

Requerimentos

import mlflow.deployments

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

Criar um modelo de base que sirva o ponto de extremidade

Você pode criar um ponto de extremidade que atenda variantes ajustadas de modelos de base disponibilizados usando a taxa de transferência provisionada de APIs de Modelo de Fundação. Consulte Criar seu ponto de extremidade de taxa de transferência provisionado usando a API REST.

Para modelos de base que são disponibilizados usando APIs de modelo de base pay-per-token, o Databricks fornece automaticamente pontos de extremidade específicos para acessar os modelos suportados em seu espaço de trabalho Databricks. Para acessá-los, selecione a guia Servindo na barra lateral esquerda do espaço de trabalho. As APIs do Modelo de Base estão localizadas na parte superior da exibição da lista Pontos de Extremidade.

Para consultar esses pontos de extremidade, consulte Modelos de IA generativa de consulta.

Criar um modelo externo servindo ponto de extremidade

A seguir descrevemos como criar um ponto de extremidade que atenda a um modelo de IA generativa disponibilizado usando modelos externos Databricks.

Servindo a interface do usuário

  1. No campo Nome, forneça um nome para o seu ponto de extremidade.
  2. Na secção Entidades servidas
    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 na sua seleção. Consulte os modelos externos disponíveis.
    6. Selecione o tipo de tarefa. As tarefas disponíveis são chat, finalizaçõ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 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 do ponto de extremidade de serviço 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 modelos externos estão em Visualização pública.

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

Consulte POST /api/2.0/serving-endpoints para obter os parâmetros de configuração do ponto final.

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

Segue-se 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 MLflow

O seguinte cria um ponto de extremidade para incorporações com 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 OpenAI.

Você também pode criar pontos de extremidade para conclusão e tarefas de chat, conforme especificado pelo task campo na external_model seção da configuração. Consulte Modelos externos em Mosaic AI Model Serving para 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 modelo de serviço de pontos de extremidade

Depois de 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 um papel fundamental nos recursos alocados para atender ao seu modelo.

Até que a nova configuração esteja pronta, a configuração antiga continua servindo o 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, você pode 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 servidas só pode ter um objeto served_entity. Os pontos de extremidade existentes com um external_model não podem ser atualizados para não terem mais um external_modelarquivo . Se o ponto de extremidade for criado sem um external_model, você não poderá atualizá-lo para adicionar um external_modelarquivo .

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 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