Oktatóanyag: Külső modellvégpontok létrehozása OpenAI-modellek lekérdezéséhez

Ez a lap részletes útmutatást nyújt egy külső modellvégpont konfigurálásához és lekérdezéséhez, amely OpenAI-modelleket szolgál ki a befejezésekhez, csevegésekhez és beágyazásokhoz. A végpontot az MLflow Deployments SDK-val hozza létre, és az OpenAI-ügyféllel kérdezi le. További információkért tekintse meg a külső modelleket.

Miután létrehozott egy végpontot, a Databricks azt javasolja, hogy konfigurálja a Unity AI Gatewayt, hogy olyan szabályozási funkciókat adjon hozzá, mint a használatkövetés, a hasznos adatok naplózása, a védőkorlátok és a sebességkorlátok. A Modellszolgáltatás szolgáltatással kiszolgált összes külső modell lekérdezhető az OpenAI-kompatibilis API használatával, így egyetlen ügyfelet használhat a szolgáltatók között. Lásd : AI-szabályozás a Unity AI Gateway használatával.

Tip

Mondja meg a Genie Code-nak (ügynök módnak), hogy tegye ezt Önért:

Create a new notebook that uses the MLflow Deployments SDK to create an external model endpoint named openai-completions-endpoint that serves OpenAI's gpt-3.5-turbo-instruct model for completions, reading my OpenAI API key from a Databricks secret scope. Then send a test completion request to the endpoint and display the response.

Ha a feladat elvégzéséhez a Kiszolgáló felhasználói felületét szeretné használni, tekintse meg a külső modell kiszolgálóvégpontjának létrehozását.

Requirements

  • Databricks Runtime 13.0 ML vagy újabb.
  • MLflow 2.9 vagy újabb.
  • OpenAI API-kulcsok.
  • Telepítse a Databricks CLI 0.205-ös vagy újabb verzióját.

(Nem kötelező) 0. lépés: Az OpenAI API-kulcs tárolása a Databricks Titkos kulcsok parancssori felületével

Az API-kulcsokat egyszerű szöveges sztringekként is megadhatja a 3. lépésben, vagy az Azure Databricks Titkos kulcsok használatával.

Az OpenAI API-kulcs titkos kulcsként való tárolásához használhatja a Databricks Titkos kulcsok parancssori felületét (0.205-ös vagy újabb verzió). A REST API-t titkos kódokhoz is használhatja.

Az alábbiakban létrejön a titkos hatókör neve, my_openai_secret_scope, majd ebben a hatókörben létrejön a titkos kulcs openai_api_key.

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

1. lépés: Az MLflow telepítése külső modellek támogatásával

Az alábbiak segítségével telepítsen egy MLflow-verziót külső modellek támogatásával:

%pip install mlflow[genai]>=2.9.0

2. lépés: Külső modellvégpont létrehozása és kezelése

Important

Az ebben a szakaszban szereplő kód példák a nyilvános előzetes verziójú MLflow deployments CRUD SDK használatát mutatják be.

Ha külső modellvégpontot szeretne létrehozni egy nagy nyelvi modellhez (LLM), használja az create_endpoint() MLflow Deployments SDK metódusát. Külső modellvégpontokat is létrehozhat a kiszolgáló felhasználói felületén.

Az alábbi kódrészlet létrehoz egy befejezési végpontot az OpenAI gpt-3.5-turbo-instructszámára, a served_entities konfiguráció szakaszában megadott módon. A végpont esetében mindenképpen töltse ki a name és openai_api_key az egyes mezők egyedi értékeivel.

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

Az alábbi kódrészlet bemutatja, hogyan adhat meg az OpenAI API-kulcsot egyszerű szöveges sztringként, hogy alternatív módon hozza létre ugyanazt a befejezési végpontot, mint fent.

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

Ha Azure OpenAI-t használ, a konfiguráció szakaszában megadhatja az Azure OpenAI üzembehelyezési nevét, végpont openai_config URL-címét és API-verzióját is.

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

A sebességkorlátok, a használatkövetés, a hasznos adatok naplózása vagy a végponton lévő védőkorlátok konfigurálásához használja a Unity AI Gatewayt. A Sebességkorlátok Unity AI-átjárón keresztül történő konfigurálása támogatja a lekérdezésalapú (QPM) és a jogkivonatalapú (TPM) korlátokat is, és lehetővé teszi felhasználónkénti, csoportonkénti és végpontszintű korlátok beállítását.

Lásd: Configure governance on model service endpoints (legacy) című programozott példát, amely frissíti a végpontot a sebességkorlátok és más Unity AI Gateway funkciók hozzáadására.

Note

A korábban dokumentált client.update_endpoint() minta egy felső szintű rate_limits mezővel elavult. Használja inkább a Unity AI Gateway konfigurációját a végponton.

3. lépés: Kérések küldése külső modellvégpontra

A Databricks azt javasolja, hogy külső modellvégpontokat kérdezz le az OpenAI-ügyfél használatával. A Modellszolgáltatás egy egységes, OpenAI-kompatibilis API-t tesz elérhetővé a szolgáltatók között, így ugyanaz az ügyfélkód működik, függetlenül attól, hogy az alapul szolgáló modell OpenAI-ból, Anthropic, Cohere-ből, Amazon Bedrock-ból, Google Cloud Vertex AI-ből vagy egyéni szolgáltatóból származik- e.

Telepítse az OpenAI-klienst a számítási környezetére:

%pip install openai

Az alábbiakban egy csevegés befejezésére vonatkozó kérést küldünk egy OpenAI-csevegőmodellt kiszolgáló végpontnak. Cserélje le a base_url értéket a Azure Databricks munkaterület URL-címére, és adja meg a an Azure Databricks személyes hozzáférési jogkivonatot a api_key számára. Állítsa a paramétert model a végpontot kiszolgáló modell nevére.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("DATABRICKS_TOKEN"),
    base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)

response = client.chat.completions.create(
    model="openai-chat-endpoint",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the capital of France?"}
    ],
    max_tokens=128,
    temperature=0.1,
)
print(response.choices[0].message.content)

Ha befejezési kérelmet szeretne küldeni a feladathoz konfigurált végpontnak, használja a llm/v1/completions következőt client.completions.create():

response = client.completions.create(
    model="openai-completions-endpoint",
    prompt="What is the capital of France?",
    max_tokens=10,
    temperature=0.1,
    n=2,
)
print(response)

Ha beágyazási kérelmet szeretne küldeni a llm/v1/embeddings feladatra konfigurált végpontnak, használja a következőt: client.embeddings.create()

response = client.embeddings.create(
    model="openai-embeddings-endpoint",
    input="Databricks is a unified analytics platform.",
)
print(response.data[0].embedding)

Ha egy Azure Databricks jegyzetfüzetből futtatja az OpenAI-ügyfelet, használhatja a databricks-openai segítőt, amely automatikusan konfigurálja a hitelesítést és a munkaterület alap URL-címét. Részletekért lásd: Alapmodellek használata .

4. lépés: Egy másik szolgáltató modelljeinek összehasonlítása

A modellszolgáltatás számos külső modellszolgáltatót támogat, többek között az Open AI-t, az antropikust, a cohere-t, az Amazon Bedrockot, a Google Cloud Vertex AI-t és sok mást. Összehasonlíthatja az LLM-eket a szolgáltatók között, így optimalizálhatja az alkalmazások pontosságát, sebességét és költségeit az AI Playgroundhasználatával.

Az alábbi példa létrehoz egy végpontot az antropikus claude-2 számára, és összehasonlítja annak válaszát egy OpenAI-t gpt-3.5-turbo-instructhasználó kérdéssel. Mindkét válasz formátuma ugyanaz, ami megkönnyíti az összehasonlítást.

Végpont létrehozása az Anthropic Claude-2 számára

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

Az egyes végpontok válaszainak összehasonlítása

Mivel minden külső modellvégpont egy OpenAI-kompatibilis API-t tesz elérhetővé, mindkét végpontot ugyanazzal az OpenAI-ügyféllel kérdezheti le, ha a paramétert a model megfelelő végpontnévre váltja.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("DATABRICKS_TOKEN"),
    base_url="https://<workspace-name>.cloud.databricks.com/serving-endpoints"
)

prompt = "How is Pi calculated? Be very concise."

openai_response = client.completions.create(
    model="openai-completions-endpoint",
    prompt=prompt,
)
anthropic_response = client.completions.create(
    model="anthropic-completions-endpoint",
    prompt=prompt,
)

print("OpenAI:", openai_response.choices[0].text)
print("Anthropic:", anthropic_response.choices[0].text)

További források