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.
(Optioneel) Stap 0: de OpenAI API-sleutel opslaan met behulp van de Databricks Secrets CLI
U kunt uw API-sleutels opgeven als tekenreeksen zonder opmaak in stap 3 of met behulp van Azure Databricks Secrets.
Als u de OpenAI API-sleutel als geheim wilt opslaan, kunt u de Databricks Secrets CLI (versie 0.205 en hoger) gebruiken. U kunt ook de REST API gebruiken voor geheimen.
Met het volgende maakt u het geheime bereik met de naam my_openai_secret_scope
en 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 1: 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 2: 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-instruct
gemaakt, 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}}"
}
}
}]
}
)
In het volgende codefragment ziet u hoe u uw OpenAI API-sleutel kunt opgeven als een tekenreeks zonder opmaak voor een alternatieve manier om hetzelfde voltooiingseindpunt te maken als hierboven.
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"
}
}
}]
}
)
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 3: 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 4: 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
}
]