Freigeben über


Tutorial: Erstellen externer Modellendpunkte zum Abfragen von OpenAI-Modellen

Dieser Artikel enthält Schrittanleitungen zum Konfigurieren und Abfragen eines externen Modellendpunkts, der OpenAI-Modelle für Vervollständigungen, Chats und Einbettungen mithilfe des MLflow Deployments SDK bereitstellt. Erfahren Sie mehr über externe Modelle.

Wenn Sie es vorziehen, diese Aufgabe mithilfe der Serving-Benutzeroberfläche zu erledigen, lesen Sie Erstellen eines Bereitstellungsendpunkts für ein externes Modell.

Anforderungen

  • Mindestens Databricks Runtime 13.0 ML
  • MLflow 2.9 oder höher
  • OpenAI-API-Schlüssel.
  • Installieren Sie die Databricks-CLI (Version 0.205 oder höher).

(Optional) Schritt 0: Speichern des OpenAI-API-Schlüssels mithilfe der CLI für Databricks-Geheimnisse

Sie können Ihre API-Schlüssel entweder als Klartext-Strings in Schritt 3 oder unter Verwendung von Azure Databricks Secrets bereitstellen.

Um den OpenAI-API-Schlüssel mithilfe der CLI als Geheimnis zu speichern, können Sie Databricks-Geheimnisse (Version 0.205 oder höher) verwenden. Sie können auch die REST-API für Geheimnisse verwenden.

Im Folgenden wird der geheime Bereich mit dem Namen „my_openai_secret_scope“ erstellt, und anschließend wird der geheime Schlüssel „openai_api_key“ in diesem Bereich erstellt.

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

Schritt 1: Installieren von MLflow mit Unterstützung externer Modelle

Verwenden Sie Folgendes, um eine MLflow-Version mit Unterstützung für externe Modelle zu installieren:

%pip install mlflow[genai]>=2.9.0

Schritt 2: Erstellen und Verwalten eines externen Modellendpunkts

Wichtig

Die Codebeispiele in diesem Abschnitt veranschaulichen die Verwendung der Public Preview des MLflow Deployments CRUD SDK.

Verwenden Sie zum Erstellen eines externen Modellendpunkts für ein großes Sprachmodell (LLM) die create_endpoint()-Methode aus dem MLflow Deployments SDK. Sie können auch externe Modellendpunkte auf der Serving-Benutzeroberfläche erstellen.

Der folgende Codeschnipsel erstellt einen Vervollständigungsendpunkt für OpenAI gpt-3.5-turbo-instruct, wie im Abschnitt „served_entities“ der Konfiguration angegeben. Füllen Sie für Ihren Endpunkt name und openai_api_key mit Ihren eindeutigen Werten für jedes Feld auf.

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

Der folgende Codeschnipsel zeigt, wie Sie Ihren OpenAI-API-Schlüssel als Klartext-Zeichenfolge bereitstellen können, um denselben Endpunkt für die Vervollständigung wie oben zu erstellen.

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

Wenn Sie Azure OpenAI verwenden, können Sie auch den Azure OpenAI-Bereitstellungsnamen, die Endpunkt-URL und die API-Version im Abschnitt openai_config der Konfiguration angeben.

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

Um einen Endpunkt zu aktualisieren, verwenden Sie update_endpoint(). Der folgende Codeschnipsel veranschaulicht, wie die Ratenbegrenzungen eines Endpunkts auf 20 Aufrufe pro Minute pro Benutzer*in aktualisiert werden.

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

Schritt 3: Senden von Anforderungen an einen externen Modellendpunkt

Wichtig

Die Codebeispiele in diesem Abschnitt veranschaulichen die Verwendung der predict()-Methode des MLflow Deployments SDK.

Sie können Chat-, Vervollständigungs- und Einbettungsanforderungen mithilfe der predict()-Methode des MLflow Deployments SDK an einen externen Modellendpunkt senden.

Im Folgenden wird eine Anforderung an das von OpenAI gehostete gpt-3.5-turbo-instruct-Modell gesendet.

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

Schritt 4: Vergleichen von Modellen von einem anderen Anbieter

Die Modellbereitstellung unterstützt viele externe Modellanbieter, darunter OpenAI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI u. v. m. Sie können LLMs anbieterübergreifend vergleichen und dabei helfen, die Genauigkeit, Geschwindigkeit und Kosten Ihrer Anwendungen mithilfe des KI-Playgroundzu optimieren.

Das folgende Beispiel erstellt einen Endpunkt für Anthropic claude-2 und vergleicht die Antwort auf eine Frage, die OpenAI gpt-3.5-turbo-instruct verwendet. Beide Antworten haben das gleiche Standardformat, wodurch sie einfach verglichen werden können.

Erstellen eines Endpunkts für 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}}"
                    },
                },
            }
        ],
    },
)

Vergleichen der Antworten von den einzelnen Endpunkten


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

Zusätzliche Ressourcen

Externe Modelle in Mosaic AI Model Serving