Självstudie: Skapa externa modellslutpunkter för att fråga OpenAI-modeller
Den här artikeln innehåller stegvisa instruktioner för att konfigurera och fråga en extern modellslutpunkt som hanterar OpenAI-modeller för slutföranden, chatt och inbäddning med hjälp av SDK för MLflow-distributioner. Läs mer om externa modeller.
Om du föredrar att använda användargränssnittet för servering för att utföra den här uppgiften kan du läsa Skapa en extern modell som betjänar slutpunkten.
Krav
- Databricks Runtime 13.0 ML eller senare.
- MLflow 2.9 eller senare.
- OpenAI API-nycklar.
- Installera Databricks CLI version 0.205 eller senare.
(Valfritt) Steg 0: Lagra OpenAI API-nyckeln med hjälp av Databricks Secrets CLI
Du kan ange dina API-nycklar antingen som klartextsträngar i steg 3 eller med hjälp av Azure Databricks-hemligheter.
Om du vill lagra OpenAI API-nyckeln som en hemlighet kan du använda Databricks Secrets CLI (version 0.205 och senare). Du kan också använda REST-API:et för hemligheter.
Följande skapar det hemliga omfånget med my_openai_secret_scope
namnet , och skapar sedan hemligheten openai_api_key
i det omfånget.
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
Steg 1: Installera MLflow med stöd för externa modeller
Använd följande för att installera en MLflow-version med stöd för externa modeller:
%pip install mlflow[genai]>=2.9.0
Steg 2: Skapa och hantera en extern modellslutpunkt
Viktigt!
Kodexemplen i det här avsnittet visar användningen av CRUD SDK för MLflow-distributioner för offentlig förhandsversion .
Om du vill skapa en extern modellslutpunkt för en stor språkmodell (LLM) använder du create_endpoint()
metoden från MLflow Deployments SDK. Du kan också skapa externa modellslutpunkter i användargränssnittet för servering.
Följande kodfragment skapar en slutpunkt för slutföranden för OpenAI gpt-3.5-turbo-instruct
, enligt beskrivningen served_entities
i avsnittet i konfigurationen. För slutpunkten måste du fylla i name
och openai_api_key
med dina unika värden för varje fält.
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}}"
}
}
}]
}
)
Följande kodfragment visar hur du kan ange din OpenAI API-nyckel som en klartextsträng för ett alternativt sätt att skapa samma slutpunkt för slutföranden som ovan.
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"
}
}
}]
}
)
Om du använder Azure OpenAI kan du också ange Azure OpenAI-distributionsnamnet, slutpunkts-URL:en och API-versionen i avsnittet i openai_config
konfigurationen.
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"
},
},
}
],
},
)
Om du vill uppdatera en slutpunkt använder du update_endpoint()
. Följande kodfragment visar hur du uppdaterar en slutpunkts hastighetsgränser till 20 anrop per minut per användare.
client.update_endpoint(
endpoint="openai-completions-endpoint",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 20
}
],
},
)
Steg 3: Skicka begäranden till en extern modellslutpunkt
Viktigt!
Kodexemplen i det här avsnittet visar hur MLflow Deployments SDK:s predict()
metod används.
Du kan skicka chatt-, slutförande- och inbäddningsbegäranden till en extern modellslutpunkt med MLflow Deployments SDK:s predict()
metod.
Följande skickar en begäran till gpt-3.5-turbo-instruct
som hanteras av 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
}
}
Steg 4: Jämför modeller från en annan leverantör
Modelltjänster stöder många externa modellleverantörer, inklusive Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI med mera. Du kan jämföra LLM:er mellan leverantörer, vilket hjälper dig att optimera noggrannheten, hastigheten och kostnaden för dina program med hjälp av AI Playground.
I följande exempel skapas en slutpunkt för Anthropic claude-2
och dess svar jämförs med en fråga som använder OpenAI gpt-3.5-turbo-instruct
. Båda svaren har samma standardformat, vilket gör dem enkla att jämföra.
Skapa en slutpunkt för antropisk 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}}"
},
},
}
],
},
)
Jämför svaren från varje slutpunkt
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
}
]