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.

Zie Een extern model maken voor eindpunten voor het leveren van een taak als u liever de gebruikersinterface van de Server gebruikt om deze taak uit te voeren.

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.

Stap 1: de OpenAI API-sleutel opslaan met behulp van de Databricks Secrets CLI

U kunt de OpenAI API-sleutel opslaan met behulp van de Databricks Secrets CLI (versie 0.205 en hoger). 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 2: 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 3: 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 de name unieke waarden voor elk veld vult.openai_api_key

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

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 4: 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 5: 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.