Tutoriel : créer des points de terminaison de modèle externe pour interroger des modèles OpenAI
Cet article fournit des instructions pas à pas pour configurer et interroger un point de terminaison de modèle externe qui sert les modèles OpenAI pour les achèvements, les conversations et les incorporations à l’aide du Kit de développement logiciel (SDK) MLflow Deployments. En savoir plus sur les modèles externes.
Si vous préférez utiliser l’interface utilisateur de service pour accomplir cette tâche, consultez Créer un point de terminaison externe de mise en service de modèle.
Spécifications
- Databricks Runtime 13.0 ML ou version ultérieure.
- MLflow 2.9 ou version ultérieure.
- Clés API OpenAI.
- Installez Databricks CLI version 0.205 ou ultérieure.
(Facultatif) Étape 0 : Stocker la clé API OpenAI à l’aide de l’interface CLI Databricks Secrets
Vous pouvez fournir vos clés API en tant que chaînes de texte en clair à l’étape 3 ou à l’aide d’Azure Databricks Secrets.
Pour stocker la clé API OpenAI en tant que secret, vous pouvez utiliser l’interface CLI Databricks Secrets (version 0.205 ou ultérieure). Vous pouvez également utiliser l’API REST pour les secrets.
Le code suivant crée l’étendue de secret nommée, my_openai_secret_scope
, et crée ensuite le secret openai_api_key
dans cette étendue.
databricks secrets create-scope my_openai_secret_scope
databricks secrets put-secret my_openai_secret_scope openai_api_key
Étape 1 : Installer MLflow avec la prise en charge des modèles externes
Utilisez ce qui suit pour installer une version MLflow avec prise en charge des modèles externes :
%pip install mlflow[genai]>=2.9.0
Étape 2 : Créer et gérer un point de terminaison de modèle externe
Important
Les exemples de code de cette section démontrent l’utilisation de la préversion publique du Kit de développement logiciel (SDK) CRUD MLflow Deployments.
Pour créer un point de terminaison de modèle externe pour un grand modèle de langage (LLM), utilisez la méthode create_endpoint()
du Kit de développement logiciel (SDK) MLflow Deployments. Vous pouvez également créer des points de terminaison de modèle externe dans l’interface utilisateur de mise en service.
L’extrait de code suivant crée un point de terminaison d’achèvement pour OpenAI gpt-3.5-turbo-instruct
, comme spécifié dans la section served_entities
de la configuration. Pour votre point de terminaison, veillez à remplir name
et openai_api_key
par vos valeurs uniques pour chaque champ.
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}}"
}
}
}]
}
)
L’extrait de code suivant montre comment vous pouvez fournir votre clé API OpenAI en tant que chaîne de texte en clair pour créer le même point de terminaison d’achèvement que ci-dessus.
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"
}
}
}]
}
)
Si vous utilisez Azure OpenAI, vous pouvez également spécifier le nom du déploiement Azure OpenAI, l’URL du point de terminaison et la version de l’API dans la section openai_config
de la configuration.
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"
},
},
}
],
},
)
Pour mettre à jour un point de terminaison, utilisez update_endpoint()
. L’extrait de code suivant montre comment mettre à jour les limites de débit d’un point de terminaison à 20 appels par minute par utilisateur.
client.update_endpoint(
endpoint="openai-completions-endpoint",
config={
"rate_limits": [
{
"key": "user",
"renewal_period": "minute",
"calls": 20
}
],
},
)
Étape 3 : Envoyer des requêtes à un point de terminaison de modèle externe
Important
Les exemples de code de cette section démontrent l’utilisation de la méthode predict()
du SDK MLflow Deployments.
Vous pouvez envoyer des demandes de conversation, d’achèvement et d’intégration à un point de terminaison de modèle externe à l’aide de la méthode predict()
du SDK MLflow Deployments.
Le code suivant envoie une requête à gpt-3.5-turbo-instruct
hébergé par 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
}
}
Étape 4 : Comparer les modèles d’un autre fournisseur
Le service de modèles prend en charge de nombreux fournisseurs de modèles externes, notamment Open AI, Anthropic, Cohere, Amazon Bedrock, Google Cloud Vertex AI, et bien d’autres encore. Vous pouvez comparer les LLM entre les fournisseurs, ce qui vous permet d’optimiser l’exactitude, la vitesse et le coût de vos applications à l’aide du Terrain de jeu IA.
L’exemple suivant crée un point de terminaison pour Anthropic claude-2
et compare sa réponse à une question qui utilise OpenAI gpt-3.5-turbo-instruct
. Les deux réponses ont le même format standard, ce qui les rend faciles à comparer.
Créer un point de terminaison pour 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}}"
},
},
}
],
},
)
Comparer les réponses de chaque point de terminaison
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
}
]