Delen via


Zelfstudie: Externe modeleindpunten maken om query's uit te voeren op OpenAI-modellen

Dit artikel bevat stapsgewijze instructies voor het configureren en opvragen van een extern modeleindpunt dat OpenAI-modellen dient voor voltooiingen, chatten en insluiten met behulp van de MLflow Deployments SDK. Meer informatie over externe modellen.

Als u de gebruikersinterface voor het bedienen verkiest voor deze taak, zie Een extern model-serveer-eindpunt maken.

Vereisten

  • Databricks Runtime 13.0 ML of hoger.
  • MLflow 2.9 of hoger.
  • OpenAI API-sleutels.
  • Installeer de Databricks CLI versie 0.205 of hoger.

(Optioneel) Stap 0: de OpenAI API-sleutel opslaan met behulp van de Databricks Secrets CLI

U kunt uw API-sleutels opgeven als tekenreeksen zonder opmaak in stap 3 of met behulp van Azure Databricks Secrets.

Als u de OpenAI API-sleutel als geheim wilt opslaan, kunt u de Databricks Secrets CLI (versie 0.205 en hoger) gebruiken. U kunt ook de REST API gebruiken voor geheimen.

Met het volgende maakt u het geheime bereik met de naam my_openai_secret_scopeen maakt u vervolgens het geheim openai_api_key in dat bereik.

databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key

Stap 1: MLflow installeren met ondersteuning voor externe modellen

Gebruik het volgende om een MLflow-versie te installeren met ondersteuning voor externe modellen:

%pip install mlflow[genai]>=2.9.0

Stap 2: Een extern modeleindpunt maken en beheren

Belangrijk

In de codevoorbeelden in deze sectie wordt het gebruik van de CRUD SDK voor openbare preview-implementaties van MLflow gedemonstreerd.

Als u een extern modeleindpunt voor een LLM (Large Language Model) wilt maken, gebruikt u de create_endpoint() methode van de MLflow Deployments SDK. U kunt ook externe modeleindpunten maken in de serveerinterface.

Met het volgende codefragment wordt een eindpunt voor voltooiing voor OpenAI gpt-3.5-turbo-instructgemaakt, zoals opgegeven in de served_entities sectie van de configuratie. Zorg ervoor dat u voor uw eindpunt zowel name als openai_api_key vult met uw unieke waarden voor elk veld.

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

In het volgende codefragment ziet u hoe u uw OpenAI API-sleutel kunt opgeven als een tekenreeks zonder opmaak voor een alternatieve manier om hetzelfde voltooiingseindpunt te maken als hierboven.

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

Als u Azure OpenAI gebruikt, kunt u ook de azure OpenAI-implementatienaam, eindpunt-URL en API-versie opgeven in de openai_config sectie van de configuratie.

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

Als u een eindpunt wilt bijwerken, gebruikt u update_endpoint(). In het volgende codefragment ziet u hoe u de frequentielimieten van een eindpunt bijwerkt naar 20 aanroepen per minuut per gebruiker.

client.update_endpoint(
    endpoint="openai-completions-endpoint",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 20
            }
        ],
    },
)

Stap 3: Aanvragen verzenden naar een eindpunt van een extern model

Belangrijk

De codevoorbeelden in deze sectie laten het gebruik zien van de methode van de MLflow Deployments SDK predict() .

U kunt chat-, voltooiings- en insluitingsaanvragen verzenden naar een extern modeleindpunt met behulp van de methode van predict() de MLflow Deployments SDK.

Hieronder wordt een aanvraag verzonden naar gpt-3.5-turbo-instruct gehost door 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
    }
}

Stap 4: Modellen van een andere provider vergelijken

Modelservice ondersteunt veel externe modelproviders, waaronder Open AI, Antropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI en meer. U kunt LLM's vergelijken tussen providers, zodat u de nauwkeurigheid, snelheid en kosten van uw toepassingen kunt optimaliseren met behulp van de AI Playground.

In het volgende voorbeeld wordt een eindpunt voor antropisch claude-2 gemaakt en wordt het antwoord ervan vergeleken met een vraag die Gebruikmaakt van OpenAI gpt-3.5-turbo-instruct. Beide antwoorden hebben dezelfde standaardindeling, waardoor ze eenvoudig te vergelijken zijn.

Een eindpunt maken voor Antropische 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}}"
                    },
                },
            }
        ],
    },
)

De antwoorden van elk eindpunt vergelijken


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

Aanvullende bronnen

Externe modellen in Mosaic AI Model Serving.