Tutorial: criar pontos de extremidade de modelo externo para consultar modelos do OpenAI
Este artigo fornece instruções passo a passo para configurar e consultar um ponto de extremidade de modelo externo que serve modelos do OpenAI para conclusões, chats e inserções usando o SDK de implantações do MLflow. Saiba mais sobre modelos externos.
Se preferir usar a interface do usuário de Serviço para realizar esta tarefa, consulte Criar um ponto de extremidade de serviço de modelo externo.
Requisitos
- Databricks Runtime 13.0 ML ou superior.
- MLflow 2.9 ou superior.
- Chaves de API do OpenAI.
- Instale a CLI do Databricks versão 0.205 ou superior.
(Opcional) Etapa 0: Armazene a chave da API OpenAI usando a CLI do Databricks Secrets
Você pode fornecer suas chaves de API como cadeias de caracteres de texto simples na Etapa 3 ou usando Azure Databricks Secrets.
Para armazenar a chave da API OpenAI como um segredo, você pode usar a CLI do Databricks Secrets (versão 0.205 e superior). Você também pode usar a API REST para segredos.
A seguir, cria o escopo do segredo nomeado, my_openai_secret_scope
e, em seguida, cria o segredo openai_api_key
nesse escopo.
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
Etapa 1: instalar o MLflow com suporte a modelos externos
Use o seguinte para instalar uma versão do MLflow com suporte a modelos externos:
%pip install mlflow[genai]>=2.9.0
Etapa 2: criar e gerenciar um ponto de extremidade de modelo externo
Importante
Os exemplos de código nesta seção demonstram o uso do SKL CRUD de Implantações do MLflow em Visualização Pública.
Para criar um ponto de extremidade externo para um modelo de linguagem grande (LLM), utilize o método create_endpoint()
do SDK de Implantações do MLflow. Você também pode criar pontos de extremidade de modelo externos na interface do usuário de Serviço.
O trecho de código a seguir cria um ponto de extremidade de conclusões para o OpenAI gpt-3.5-turbo-instruct
, conforme especificado na seção served_entities
da configuração. Para o ponto de extremidade, preencha o name
e o openai_api_key
com seus valores exclusivos para cada campo.
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}}"
}
}
}]
}
)
O snippet de código a seguir mostra como você pode fornecer sua chave de API OpenAI como uma cadeia de caracteres de texto simples para uma maneira alternativa de criar o mesmo ponto de extremidade de conclusão acima.
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"
}
}
}]
}
)
Se estiver usando o OpenAI do Azure, também é possível especificar o nome da implantação do OpenAI do Azure, a URL do ponto de extremidade e a versão da API na seção openai_config
da configuração.
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"
},
},
}
],
},
)
Para atualizar um ponto de extremidade, use update_endpoint()
. O trecho de código a seguir demonstra como atualizar os limites de taxa de um ponto de extremidade para 20 chamadas por minuto por usuário.
client.update_endpoint(
endpoint="openai-completions-endpoint",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 20
}
],
},
)
Etapa 3: enviar solicitações para um ponto de extremidade de modelo externo
Importante
Os exemplos de código nesta seção demonstram o uso do método predict()
do SDK de Implantações do MLflow.
Você pode enviar solicitações de chats, conclusões e inserções para um ponto de extremidade de modelo externo usando o método predict()
de SDK de Implantação do MLflow.
O seguinte envia uma solicitação para gpt-3.5-turbo-instruct
hospedado pelo 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
}
}
Etapa 4: compare modelos de um fornecedor diferente
O serviço de modelos dá suporte para muitos provedores de modelos externos, incluindo Open IA, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI, entre outros. É possível comparar LLMs entre provedores, ajudando você a otimizar a precisão, a velocidade e o custo de seus aplicativos usando o AI Playground.
O exemplo a seguir cria um ponto de extremidade para o Anthropic claude-2
e compara sua resposta a uma pergunta que usa o gpt-3.5-turbo-instruct
do OpenAI. Ambas as respostas têm o mesmo formato padrão, o que facilita a comparação.
Criar um ponto de extremidade para o 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}}"
},
},
}
],
},
)
Compare as respostas de cada ponto de extremidade
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
}
]