Modèles et plateformes d’IA
Suivre les Modèles de Langage à Grande Échelle (LLM) avec MLflow : Un Guide Complet
À mesure que les Modèles de Langage à Grande Échelle (LLM) grandissent en complexité et en ampleur, suivre leurs performances, expériences et déploiements devient de plus en plus difficile. C’est là que MLflow intervient – en fournissant une plate-forme complète pour gérer l’ensemble du cycle de vie des modèles d’apprentissage automatique, y compris les LLM.
Dans ce guide approfondi, nous allons explorer comment utiliser MLflow pour suivre, évaluer et déployer les LLM. Nous allons couvrir tout, desde la configuration de votre environnement jusqu’à des techniques d’évaluation avancées, avec de nombreux exemples de code et de meilleures pratiques en cours de route.
Configuration de Votre Environnement
Avant de plonger dans le suivi des LLM avec MLflow, configurons notre environnement de développement. Nous devrons installer MLflow et plusieurs autres bibliothèques clés :
pip install mlflow>=2.8.1 pip install openai pip install chromadb==0.4.15 pip install langchain==0.0.348 pip install tiktoken pip install 'mlflow[genai]' pip install databricks-sdk --upgrade
Après l’installation, il est recommandé de redémarrer votre environnement Python pour vous assurer que toutes les bibliothèques sont correctement chargées. Dans un cahier Jupyter, vous pouvez utiliser :
import mlflow
import chromadb
<p>print(f"Version MLflow : {mlflow.__version__}")
print(f"Version ChromaDB : {chromadb.__version__}")
Cela confirmera les versions des bibliothèques clés que nous allons utiliser.
Comprendre les Capacités de Suivi LLM de MLflow
Le système de suivi LLM de MLflow s’appuie sur ses capacités de suivi existantes, en ajoutant des fonctionnalités spécifiquement conçues pour les aspects uniques des LLM. Décomposons les composants clés :
Exécutions et Expériences
Dans MLflow, une “exécution” représente une seule exécution de votre code de modèle, tandis qu’une “expérience” est une collection d’exécutions liées. Pour les LLM, une exécution peut représenter une seule requête ou un lot de prompts traités par le modèle.
Composants de Suivi Clés
- Paramètres : Ce sont des configurations d’entrée pour votre LLM, telles que la température, top_k ou max_tokens. Vous pouvez les enregistrer en utilisant
mlflow.log_param()oumlflow.log_params(). - Métriques : Mesures quantitatives des performances de votre LLM, comme la précision, la latence ou des scores personnalisés. Utilisez
mlflow.log_metric()oumlflow.log_metrics()pour suivre ces métriques. - Prédictions : Pour les LLM, il est crucial d’enregistrer à la fois les prompts d’entrée et les sorties du modèle. MLflow stocke ces prédictions sous forme d’artefacts au format CSV en utilisant
mlflow.log_table(). - Artefacts : Tout fichier ou donnée supplémentaire lié à l’exécution de votre LLM, tels que des points de contrôle de modèle, des visualisations ou des échantillons de données. Utilisez
mlflow.log_artifact()pour stocker ces artefacts.
Décomposons un exemple basique d’enregistrement d’une exécution LLM :
Cet exemple démontre l’enregistrement de paramètres, de métriques et de l’entrée/sortie sous forme de table d’artefacts.
import mlflow
import openai
<p>def query_llm(prompt, max_tokens=100):
response = openai.Completion.create(
engine="text-davinci-002",
prompt=prompt,
max_tokens=max_tokens
)
return response.choices[0].text.strip()</p>
<p>with mlflow.start_run():
prompt = "Expliquez le concept d'apprentissage automatique en termes simples."</p>
<p># Enregistrement des paramètres
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)</p>
<p># Interrogation du LLM et enregistrement du résultat
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))</p>
<p># Enregistrement du prompt et de la réponse
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})</p>
<p>print(f"Réponse : {result}")
Déploiement des LLM avec MLflow
MLflow propose des capacités puissantes pour déployer les LLM, facilitant ainsi le service de vos modèles dans des environnements de production. Décomposons comment déployer un LLM en utilisant les fonctionnalités de déploiement de MLflow.
Création d’un Point de Terminaison
Tout d’abord, nous allons créer un point de terminaison pour notre LLM en utilisant le client de déploiement MLflow :
import mlflow
from mlflow.deployments import get_deploy_client
<p># Initialisation du client de déploiement
client = get_deploy_client("databricks")</p>
<p># Définition de la configuration du point de terminaison
endpoint_name = "llm-endpoint"
endpoint_config = {
"served_entities": [{
"name": "gpt-model",
"external_model": {
"name": "gpt-3.5-turbo",
"provider": "openai",
"task": "llm/v1/completions",
"openai_config": {
"openai_api_type": "azure",
"openai_api_key": "{{secrets/scope/openai_api_key}}",
"openai_api_base": "{{secrets/scope/openai_api_base}}",
"openai_deployment_name": "gpt-35-turbo",
"openai_api_version": "2023-05-15",
},
},
}],
}</p>
<p># Création du point de terminaison
client.create_endpoint(name=endpoint_name, config=endpoint_config)
Ce code configure un point de terminaison pour un modèle GPT-3.5-turbo en utilisant Azure OpenAI. Notez l’utilisation de secrets Databricks pour la gestion sécurisée des clés d’API.
Test du Point de Terminaison
Une fois le point de terminaison créé, nous pouvons le tester :
<div class="relative flex flex-col rounded-lg">
<p>response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "Expliquez brièvement le concept de réseaux de neurones.", "max_tokens": 100,},)</p>
print(response)
Cela enverra un prompt à notre modèle déployé et retournera la réponse générée.
Évaluation des LLM avec MLflow
L’évaluation est cruciale pour comprendre les performances et le comportement de vos LLM. MLflow propose des outils complets pour évaluer les LLM, y compris des métriques intégrées et personnalisées.
Préparation de Votre LLM pour l’Évaluation
Pour évaluer votre LLM avec mlflow.evaluate(), votre modèle doit être sous l’une des formes suivantes :
- Une instance de
mlflow.pyfunc.PyFuncModelou un URI pointant vers un modèle MLflow enregistré. - Une fonction Python qui prend des entrées de chaîne et retourne une chaîne unique.
- Un URI de point de terminaison de déploiement MLflow.
- Définir
model=Noneet inclure les sorties du modèle dans les données d’évaluation.
Décomposons un exemple en utilisant un modèle MLflow enregistré :
import mlflow
import openai
<p>with mlflow.start_run():
system_prompt = "Répondez brièvement à la question suivante."
logged_model_info = mlflow.openai.log_model(
model="gpt-3.5-turbo",
task=openai.chat.completions,
artifact_path="model",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": "{question}"},
],
)</p>
<p># Préparation des données d'évaluation
eval_data = pd.DataFrame({
"question": ["Qu'est-ce que l'apprentissage automatique ?", "Expliquez les réseaux de neurones."],
"ground_truth": [
"L'apprentissage automatique est un sous-ensemble de l'IA qui permet aux systèmes d'apprendre et de s'améliorer à partir de l'expérience sans programmation explicite.",
"Les réseaux de neurones sont des systèmes de calcul inspirés des réseaux de neurones biologiques, composés de nœuds interconnectés qui traitent et transmettent des informations.",
]
})</p>
<p># Évaluation du modèle
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)</p>
<p>print(f"Métriques d'évaluation : {results.metrics}")
Cet exemple enregistre un modèle OpenAI, prépare des données d’évaluation, puis évalue le modèle en utilisant les métriques intégrées de MLflow pour les tâches de réponse à des questions.
Métriques d’Évaluation Personalisées
MLflow permet de définir des métriques d’évaluation personnalisées pour les LLM. Voici un exemple de création d’une métrique personnalisée pour évaluer la professionnalisme des réponses :
from mlflow.metrics.genai import EvaluationExample, make_genai_metric
<p>professionalism = make_genai_metric(
name="professionalism",
definition="Mesure du style de communication formel et approprié.",
grading_prompt=(
"Évaluez le professionnalisme de la réponse sur une échelle de 0 à 4 :\n"
"0 : Extrêmement décontracté ou inapproprié\n"
"1 : Décontracté mais respectueux\n"
"2 : Modérément formel\n"
"3 : Professionnel et approprié\n"
"4 : Très formel et expertement rédigé"
),
examples=[
EvaluationExample(
input="Qu'est-ce que MLflow ?",
output="MLflow est comme votre boîte à outils amie pour la gestion des projets d'apprentissage automatique. C'est super cool !",
score=1,
justification="La réponse est décontractée et utilise un langage informel.",
),
EvaluationExample(
input="Qu'est-ce que MLflow ?",
output="MLflow est une plate-forme open-source pour le cycle de vie de l'apprentissage automatique, y compris l'expérimentation, la reproductibilité et le déploiement.",
score=4,
justification="La réponse est formelle, concise et professionnellement rédigée.",
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)</p>
<p># Utilisation de la métrique personnalisée dans l'évaluation
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)</p>
<p>print(f"Score de professionnalisme : {results.metrics['professionalism_mean']}")
Cette métrique personnalisée utilise GPT-3.5-turbo pour évaluer le professionnalisme des réponses, démontrant comment vous pouvez utiliser les LLM eux-mêmes pour l’évaluation.
Techniques d’Évaluation Avancées des LLM
À mesure que les LLM deviennent plus sophistiqués, les techniques d’évaluation évoluent également. Décomposons certaines méthodes d’évaluation avancées en utilisant MLflow.
Évaluation de la Génération Augmentée par Récupération (RAG)
Les systèmes RAG combinent la puissance des modèles de récupération et de génération. L’évaluation des systèmes RAG nécessite d’évaluer à la fois les composants de récupération et de génération. Voici comment vous pouvez configurer un système RAG et l’évaluer en utilisant MLflow :
from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
<p># Chargement et prétraitement des documents
loader = WebBaseLoader(["https://mlflow.org/docs/latest/index.html"])
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)</p>
<p># Création d'un magasin de vecteurs
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)</p>
<p># Création d'une chaîne RAG
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(),
return_source_documents=True
)</p>
<p># Fonction d'évaluation
def evaluate_rag(question):
result = qa_chain({"query": question})
return result["result"], [doc.page_content for doc in result["source_documents"]]</p>
<p># Préparation des données d'évaluation
eval_questions = [
"Qu'est-ce que MLflow ?",
"Comment MLflow gère-t-il le suivi des expériences ?",
"Quels sont les principaux composants de MLflow ?",
]</p>
<p># Évaluation en utilisant MLflow
with mlflow.start_run():
for question in eval_questions:
answer, sources = evaluate_rag(question)</p>
<p>mlflow.log_param(f"question", question)
mlflow.log_metric("num_sources", len(sources))
mlflow.log_text(answer, f"answer_{question}.txt")</p>
<p>for i, source in enumerate(sources):
mlflow.log_text(source, f"source_{question}_{i}.txt")</p>
<p># Enregistrement de métriques personnalisées
mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))
Cet exemple configure un système RAG en utilisant LangChain et Chroma, puis l’évalue en enregistrant les questions, les réponses, les sources récupérées et les métriques personnalisées dans MLflow.
Évaluation de la Stratégie de Fractionnement
La façon dont vous fractionnez vos documents peut avoir un impact significatif sur les performances RAG. MLflow peut vous aider à évaluer différentes stratégies de fractionnement :
import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter
<p>def evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class):
splitter = splitter_class(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
chunks = splitter.split_documents(documents)</p>
<p>with mlflow.start_run():
mlflow.log_param("chunk_size", chunk_size)
mlflow.log_param("chunk_overlap", chunk_overlap)
mlflow.log_param("splitter_class", splitter_class.__name__)</p>
<p>mlflow.log_metric("num_chunks", len(chunks))
mlflow.log_metric("avg_chunk_length", sum(len(chunk.page_content) for chunk in chunks) / len(chunks))</p>
<p># Évaluation des performances de récupération (simplifiée)
correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)</p>
<p># Évaluation de différentes stratégies
for chunk_size in [500, 1000, 1500]:
for chunk_overlap in [0, 50, 100]:
for splitter_class in [CharacterTextSplitter, TokenTextSplitter]:
evaluate_chunking_strategy(documents, chunk_size, chunk_overlap, splitter_class)</p>
<p># Comparaison des résultats
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"Meilleure stratégie de fractionnement : {best_run['params.splitter_class']} avec taille {best_run['params.chunk_size']} et chevauchement {best_run['params.chunk_overlap']}")
Ce script évalue différentes combinaisons de tailles de fractionnement, de chevauchement et de méthodes de fractionnement, en enregistrant les résultats dans MLflow pour une comparaison facile.
Visualisation des Résultats d’Évaluation des LLM
MLflow propose diverses façons de visualiser vos résultats d’évaluation des LLM :
Utilisation de l’Interface Utilisateur MLflow
Après avoir exécuté vos évaluations, vous pouvez utiliser l’interface utilisateur MLflow pour visualiser les résultats :
- Lancer l’interface utilisateur MLflow :
mlflow ui - Ouvrir un navigateur web et accéder à
http://localhost:5000 - Sélectionner votre expérience et vos exécutions pour afficher les métriques, les paramètres et les artefacts
Visualisations Personnalisées
Vous pouvez créer des visualisations personnalisées de vos résultats d’évaluation en utilisant des bibliothèques comme Matplotlib ou Plotly, puis les enregistrer comme artefacts :
import matplotlib.pyplot as plt
import mlflow
<p>def plot_metric_comparison(metric_name, run_ids):
plt.figure(figsize=(10, 6))
for run_id in run_ids:
run = mlflow.get_run(run_id)
metric_values = mlflow.get_metric_history(run_id, metric_name)
plt.plot([m.step for m in metric_values], [m.value for m in metric_values], label=run.data.tags.get("mlflow.runName", run_id))</p>
<p>plt.title(f"Comparaison de {metric_name}")
plt.xlabel("Étape")
plt.ylabel(metric_name)
plt.legend()</p>
<p># Enregistrement et sauvegarde de la visualisation
plt.savefig(f"{metric_name}_comparison.png")
mlflow.log_artifact(f"{metric_name}_comparison.png")</p>
<p># Utilisation
with mlflow.start_run():
plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])
Cette fonction crée un graphique linéaire comparant une métrique spécifique sur plusieurs exécutions et l’enregistre comme un artefact.
Alternatives à MLflow Open Source
Il existe de nombreuses alternatives à MLflow open source pour la gestion des flux de travail d’apprentissage automatique, chacune offrant des fonctionnalités et des intégrations uniques.
MLflow Géré par Databricks
MLflow géré, hébergé par Databricks, propose les fonctionnalités de base de MLflow open source mais avec des avantages supplémentaires tels que l’intégration transparente avec l’écosystème Databricks, des fonctionnalités de sécurité avancées et une infrastructure gérée. Cela en fait un excellent choix pour les organisations nécessitant une sécurité robuste et une évolutivité.
Azure Machine Learning
Azure Machine Learning propose une solution d’apprentissage automatique complète sur la plateforme cloud Azure. Il est compatible avec les composants MLflow tels que le registre de modèles et le suivi des expériences, bien qu’il ne soit pas basé sur MLflow.
Plateformes ML Dédiées
Plusieurs entreprises proposent des produits ML gérés avec diverses fonctionnalités :
- neptune.ai : Se concentre sur le suivi des expériences et la gestion des modèles.
- Weights & Biases : Offre un suivi d’expériences étendu, une version des datasets et des outils de collaboration.
- Comet ML : Fournit un suivi d’expériences, une surveillance de la production de modèles et un enregistrement de données.
- Valohai : Se spécialise dans les pipelines et l’orchestration d’apprentissage automatique.
Metaflow
Metaflow, développé par Netflix (NFLX ), est un framework open source conçu pour orchestrer les flux de données et les pipelines ML. Bien qu’il excelle dans la gestion de déploiements à grande échelle, il manque de fonctionnalités de suivi d’expériences et de gestion de modèles complètes par rapport à MLflow.
Amazon SageMaker et Google Vertex AI
Les deux Amazon SageMaker (AMZN ) et Google Vertex AI (GOOGL ) proposent des solutions MLOps complètes intégrées à leurs plateformes cloud respectives. Ces services offrent des outils robustes pour la construction, la formation et le déploiement de modèles d’apprentissage automatique à grande échelle.
Comparaison Détallée
MLflow Géré vs. MLflow Open Source
MLflow géré par Databricks offre plusieurs avantages par rapport à la version open source, notamment :
- Configuration et Déploiement : L’intégration transparente avec Databricks réduit le temps de configuration et les efforts.
- Évolutivité : Capable de gérer des charges de travail d’apprentissage automatique à grande échelle avec facilité.
- Sécurité et Gestion : Fonctionnalités de sécurité intégrées telles que le contrôle d’accès basé sur les rôles (RBAC) et le chiffrement des données.
- Intégration : Intégration profonde avec les services Databricks, améliorant l’interopérabilité et la fonctionnalité.
- Stockage et Sauvegarde des Données : Stratégies de sauvegarde automatisées pour assurer la sécurité et la fiabilité des données.
- Coût : Les utilisateurs paient pour la plateforme, le stockage et les ressources de calcul.
- Support et Maintenance : Support et maintenance dédiés fournis par Databricks.
Conclusion
Le suivi des Modèles de Langage à Grande Échelle avec MLflow fournit un cadre robuste pour gérer les complexités du développement, de l’évaluation et du déploiement des LLM. En suivant les meilleures pratiques et en exploitant les fonctionnalités avancées présentées dans ce guide, vous pouvez créer des expériences LLM plus organisées, reproductibles et éclairantes.
Rappelez-vous que le domaine des LLM évolue rapidement et que de nouvelles techniques d’évaluation et de suivi émergent constamment. Restez à jour avec les dernières versions de MLflow et les recherches sur les LLM pour affiner continuellement vos processus de suivi et d’évaluation.
À mesure que vous appliquez ces techniques dans vos projets, vous développerez une compréhension plus approfondie du comportement et des performances de vos LLM, conduisant à des modèles de langage plus efficaces et fiables.














