Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 kompletteringar för OpenAI gpt-3.5-turbo-instruct
, som anges i avsnittet served_entities
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 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}}"
},
},
}
],
},
)
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
}
]