KI-Modelle und Plattformen
Verfolgung von Large Language Models (LLMs) mit MLflow: Ein umfassender Leitfaden
Da Large Language Models (LLMs) in Komplexität und Umfang wachsen, wird die Verfolgung ihrer Leistung, Experimente und Bereitstellungen immer herausfordernder. Hier kommt MLflow ins Spiel – es bietet eine umfassende Plattform für die Verwaltung des gesamten Lebenszyklus von Machine-Learning-Modellen, einschließlich LLMs.
In diesem umfassenden Leitfaden werden wir erkunden, wie man MLflow für die Verfolgung, Bewertung und Bereitstellung von LLMs nutzen kann. Wir werden alles abdecken, von der Einrichtung der Umgebung bis hin zu fortgeschrittenen Bewertungstechniken, mit vielen Code-Beispielen und Best-Practices auf dem Weg.
Einrichtung der Umgebung
Bevor wir uns mit der Verfolgung von LLMs mit MLflow befassen, müssen wir unsere Entwicklungsumgebung einrichten. Wir müssen MLflow und einige andere wichtige Bibliotheken installieren:
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
Nach der Installation ist es eine gute Praxis, die Python-Umgebung neu zu starten, um sicherzustellen, dass alle Bibliotheken ordnungsgemäß geladen werden. In einem Jupyter-Notebook können Sie Folgendes verwenden:
import mlflow
import chromadb
<p>print(f"MLflow-Version: {mlflow.__version__}")
print(f"ChromaDB-Version: {chromadb.__version__}")
Dies bestätigt die Versionen der wichtigsten Bibliotheken, die wir verwenden werden.
Verständnis der LLM-Verfolgungsfähigkeiten von MLflow
Die LLM-Verfolgungsfähigkeiten von MLflow basieren auf seinen bestehenden Verfolgungsfähigkeiten und fügen Funktionen hinzu, die speziell für die einzigartigen Aspekte von LLMs konzipiert sind. Lassen Sie uns die wichtigsten Komponenten aufschlüsseln:
Läufe und Experimente
In MLflow stellt ein “Lauf” eine einzelne Ausführung des Modellcodes dar, während ein “Experiment” eine Sammlung von verwandten Läufen ist. Für LLMs kann ein Lauf beispielsweise eine einzelne Abfrage oder eine Charge von Prompts darstellen, die vom Modell verarbeitet werden.
Wichtige Verfolgungskomponenten
- Parameter: Diese sind Eingabekonfigurationen für Ihr LLM, wie z.B. Temperatur, Top_k oder Max_Token. Sie können diese mit
mlflow.log_param()odermlflow.log_params()protokollieren. - Metriken: Quantitative Maße für die Leistung Ihres LLMs, wie z.B. Genauigkeit, Latenz oder benutzerdefinierte Punktzahlen. Verwenden Sie
mlflow.log_metric()odermlflow.log_metrics(), um diese zu verfolgen. - Vorhersagen: Für LLMs ist es wichtig, sowohl die Eingabe-Prompts als auch die Ausgaben des Modells zu protokollieren. MLflow speichert diese als Artefakte im CSV-Format mit
mlflow.log_table(). - Artefakte: Alle zusätzlichen Dateien oder Daten, die mit dem LLM-Lauf in Zusammenhang stehen, wie z.B. Modell-Checkpoints, Visualisierungen oder Datensatz-Beispiele. Verwenden Sie
mlflow.log_artifact(), um diese zu speichern.
Lassen Sie uns ein grundlegendes Beispiel für die Protokollierung eines LLM-Laufs betrachten:
Dieses Beispiel demonstriert die Protokollierung von Parametern, Metriken und der Eingabe/Ausgabe als Tabellen-Artefakt.
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 = "Erklären Sie das Konzept des maschinellen Lernens in einfachen Worten."</p>
<p># Protokollieren von Parametern
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)</p>
<p># Abfrage des LLM und Protokollierung des Ergebnisses
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))</p>
<p># Protokollieren des Prompts und der Antwort
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})</p>
<p>print(f"Antwort: {result}")
Bereitstellung von LLMs mit MLflow
MLflow bietet leistungsstarke Funktionen für die Bereitstellung von LLMs, um es einfacher zu machen, Ihre Modelle in Produktionsumgebungen bereitzustellen. Lassen Sie uns erkunden, wie Sie ein LLM mit den Bereitstellungsfunktionen von MLflow bereitstellen können.
Erstellen eines Endpunkts
Zunächst erstellen wir einen Endpunkt für unser LLM mit dem Bereitstellungs-Client von MLflow:
import mlflow
from mlflow.deployments import get_deploy_client
<p># Initialisieren des Bereitstellungs-Clients
client = get_deploy_client("databricks")</p>
<p># Definieren der Endpunkt-Konfiguration
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># Erstellen des Endpunkts
client.create_endpoint(name=endpoint_name, config=endpoint_config)
Dieser Code richtet einen Endpunkt für ein GPT-3.5-Turbo-Modell mit Azure OpenAI ein. Beachten Sie die Verwendung von Databricks-Geheimnissen für die sichere API-Schlüsselverwaltung.
Testen des Endpunkts
Sobald der Endpunkt erstellt ist, können wir ihn testen:
<div class="relative flex flex-col rounded-lg">
<p>response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "Erklären Sie das Konzept der neuronalen Netze kurz.", "max_tokens": 100,},)</p>
print(response)
Dies sendet eine Abfrage an unser bereitgestelltes Modell und gibt die generierte Antwort zurück.
Bewertung von LLMs mit MLflow
Die Bewertung ist entscheidend für das Verständnis der Leistung und des Verhaltens Ihrer LLMs. MLflow bietet umfassende Tools für die Bewertung von LLMs, einschließlich integrierter und benutzerdefinierter Metriken.
Vorbereitung Ihres LLMs für die Bewertung
Um Ihr LLM mit mlflow.evaluate() zu bewerten, muss Ihr Modell in einer der folgenden Formen vorliegen:
- Ein
mlflow.pyfunc.PyFuncModel-Instanz oder ein URI, der auf ein protokolliertes MLflow-Modell verweist. - Eine Python-Funktion, die String-Eingaben annimmt und eine einzelne String-Ausgabe zurückgibt.
- Ein MLflow-Bereitstellungs-Endpunkt-URI.
- Setzen Sie
model=Noneund schließen Sie Modellausgaben in die Bewertungsdaten ein.
Lassen Sie uns ein Beispiel mit einem protokollierten MLflow-Modell betrachten:
import mlflow
import openai
<p>with mlflow.start_run():
system_prompt = "Beantworten Sie die folgende Frage knapp."
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># Vorbereiten der Bewertungsdaten
eval_data = pd.DataFrame({
"question": ["Was ist maschinelles Lernen?", "Erklären Sie neuronale Netze."],
"ground_truth": [
"Maschinelles Lernen ist ein Teilbereich der künstlichen Intelligenz, der es Systemen ermöglicht, aus Erfahrungen zu lernen und sich zu verbessern, ohne explizite Programmierung.",
"Neuronale Netze sind Rechenmodelle, die von biologischen neuronalen Netzen inspiriert sind und aus miteinander verbundenen Knoten bestehen, die Informationen verarbeiten und übertragen.",
]
})</p>
<p># Bewerten des Modells
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)</p>
<p>print(f"Bewertungsmetriken: {results.metrics}")
Dieses Beispiel protokolliert ein OpenAI-Modell, bereitet Bewertungsdaten vor und bewertet das Modell dann mit den integrierten Metriken von MLflow für Frage-Antwort-Aufgaben.
Benutzerdefinierte Bewertungsmetriken
MLflow ermöglicht es Ihnen, benutzerdefinierte Metriken für die Bewertung von LLMs zu definieren. Hier ist ein Beispiel für die Erstellung einer benutzerdefinierten Metrik zur Bewertung der Professionalität von Antworten:
from mlflow.metrics.genai import EvaluationExample, make_genai_metric
<p>professionalism = make_genai_metric(
name="professionalism",
definition="Maß für formellen und angemessenen Kommunikationsstil.",
grading_prompt=(
"Bewerten Sie die Professionalität der Antwort auf einer Skala von 0-4:\n"
"0: Extrem locker oder unangemessen\n"
"1: Locker, aber respektvoll\n"
"2: Mittelmäßig formal\n"
"3: Professionell und angemessen\n"
"4: Hoch formal und expertenmäßig gestaltet"
),
examples=[
EvaluationExample(
input="Was ist MLflow?",
output="MLflow ist wie Ihr freundlicher Nachbarschaftstoolkit für die Verwaltung von ML-Projekten. Es ist super cool!",
score=1,
justification="Die Antwort ist locker und verwendet informelle Sprache.",
),
EvaluationExample(
input="Was ist MLflow?",
output="MLflow ist eine Open-Source-Plattform für den maschinellen Lernzyklus, einschließlich Experimentierung, Reproduzierbarkeit und Bereitstellung.",
score=4,
justification="Die Antwort ist formal, präzise und professionell formuliert.",
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)</p>
<p># Verwenden der benutzerdefinierten Metrik in der Bewertung
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)</p>
<p>print(f"Professionalitäts-Score: {results.metrics['professionalism_mean']}")
Diese benutzerdefinierte Metrik verwendet GPT-3.5-Turbo, um die Professionalität von Antworten zu bewerten, und zeigt, wie Sie LLMs selbst für die Bewertung nutzen können.
Fortgeschrittene LLM-Bewertungstechniken
Da LLMs immer komplexer werden, werden auch die Techniken für ihre Bewertung komplexer. Lassen Sie uns einige fortgeschrittene Bewertungsmethoden mit MLflow erkunden.
Retrieval-Augmented-Generation-(RAG)-Bewertung
RAG-Systeme kombinieren die Kraft von Retrieval-basierten und generativen Modellen. Die Bewertung von RAG-Systemen erfordert die Bewertung sowohl der Retrieval- als auch der Generierungskomponenten. Hier ist, wie Sie ein RAG-System einrichten und mit MLflow bewerten können:
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># Laden und Vorverarbeiten von Dokumenten
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># Erstellen eines Vektor-Speichers
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)</p>
<p># Erstellen eines RAG-Chain
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># Bewertungsfunktion
def evaluate_rag(question):
result = qa_chain({"query": question})
return result["result"], [doc.page_content for doc in result["source_documents"]]</p>
<p># Vorbereiten der Bewertungsdaten
eval_questions = [
"Was ist MLflow?",
"Wie handhabt MLflow die Experiment-Verfolgung?",
"Was sind die Hauptkomponenten von MLflow?",
]</p>
<p># Bewerten mit 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># Protokollieren von benutzerdefinierten Metriken
mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))
Dieses Beispiel richtet ein RAG-System mit LangChain und Chroma ein und bewertet es dann, indem es Fragen, Antworten, abgerufene Quellen und benutzerdefinierte Metriken an MLflow protokolliert.
Chunking-Strategie-Bewertung
Die Art und Weise, wie Sie Ihre Dokumente in Chunks aufteilen, kann die Leistung von RAG erheblich beeinflussen. MLflow kann Ihnen helfen, verschiedene Chunking-Strategien zu bewerten:
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># Bewertung der Abrufleistung (vereinfacht)
correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)</p>
<p># Bewertung verschiedener Strategien
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># Vergleichen der Ergebnisse
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"Beste Chunking-Strategie: {best_run['params.splitter_class']} mit Größe {best_run['params.chunk_size']} und Überlapp {best_run['params.chunk_overlap']}")
Dieses Skript bewertet verschiedene Kombinationen von Chunk-Größen, Überlappungen und Aufteilungsmethoden und protokolliert die Ergebnisse an MLflow für einen einfachen Vergleich.
Visualisierung von LLM-Bewertungsergebnissen
MLflow bietet verschiedene Möglichkeiten, Ihre LLM-Bewertungsergebnisse zu visualisieren. Hier sind einige Techniken:
Verwenden der MLflow-Benutzeroberfläche
Nachdem Sie Ihre Bewertungen durchgeführt haben, können Sie die MLflow-Benutzeroberfläche verwenden, um die Ergebnisse zu visualisieren:
- Starten Sie die MLflow-Benutzeroberfläche:
mlflow ui - Öffnen Sie einen Webbrowser und navigieren Sie zu
http://localhost:5000 - Wählen Sie Ihr Experiment und Ihre Läufe aus, um Metriken, Parameter und Artefakte anzuzeigen
Benutzerdefinierte Visualisierungen
Sie können benutzerdefinierte Visualisierungen Ihrer Bewertungsergebnisse erstellen, indem Sie Bibliotheken wie Matplotlib oder Plotly verwenden, und diese dann als Artefakte protokollieren:
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"Vergleich von {metric_name}")
plt.xlabel("Schritt")
plt.ylabel(metric_name)
plt.legend()</p>
<p># Speichern und Protokollieren des Plots
plt.savefig(f"{metric_name}_comparison.png")
mlflow.log_artifact(f"{metric_name}_comparison.png")</p>
<p># Verwendung
with mlflow.start_run():
plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])
Diese Funktion erstellt ein Liniendiagramm, das eine bestimmte Metrik über mehrere Läufe hinweg vergleicht, und protokolliert es als Artefakt.
Alternativen zu Open-Source-MLflow
Es gibt zahlreiche Alternativen zu Open-Source-MLflow für die Verwaltung von Machine-Learning-Workflows, jede mit einzigartigen Funktionen und Integrationen.
Managed MLflow von Databricks
Managed MLflow, gehostet von Databricks, bietet die Kernfunktionen von Open-Source-MLflow, aber mit zusätzlichen Vorteilen wie nahtloser Integration mit dem Databricks-Ökosystem, erweiterten Sicherheitsfunktionen und verwaltetem Infrastruktur. Dies macht es zu einer hervorragenden Wahl für Organisationen, die robuste Sicherheit und Skalierbarkeit benötigen.
Azure Machine Learning
Azure Machine Learning bietet eine umfassende Machine-Learning-Lösung auf der Azure-Cloud-Plattform. Es bietet Kompatibilität mit MLflow-Komponenten wie dem Modell-Register und dem Experiment-Tracker, obwohl es nicht auf MLflow basiert.
Dedizierte ML-Plattformen
Mehrere Unternehmen bieten Managed-ML-Produkte mit verschiedenen Funktionen an:
- neptune.ai: Konzentriert sich auf Experiment-Verfolgung und Modell-Verwaltung.
- Weights & Biases: Bietet umfassende Experiment-Verfolgung, Datensatz-Versionierung und Kollaborations-Tools.
- Comet ML: Bietet Experiment-Verfolgung, Modell-Produktions-Überwachung und Daten-Protokollierung.
- Valohai: Spezialisiert auf Machine-Learning-Pipelines und -Orchestrierung.
Metaflow
Metaflow, entwickelt von Netflix (NFLX ), ist ein Open-Source-Framework, das für die Orchestrierung von Daten-Workflows und ML-Pipelines konzipiert ist. Obwohl es sich bei der Verwaltung großer Bereitstellungen hervorragend schlägt, fehlen ihm umfassende Experiment-Verfolgungs- und Modell-Verwaltungsfunktionen im Vergleich zu MLflow.
Amazon SageMaker und Google’s Vertex AI
Sowohl Amazon SageMaker (AMZN ) als auch Google’s Vertex AI (GOOGL ) bieten umfassende MLOps-Lösungen, die in ihre jeweiligen Cloud-Plattformen integriert sind. Diese Dienste bieten robuste Tools für die Erstellung, das Training und die Bereitstellung von Machine-Learning-Modellen im großen Maßstab.
Detaillierte Vergleich
Managed MLflow vs. Open-Source-MLflow
Managed MLflow von Databricks bietet mehrere Vorteile gegenüber der Open-Source-Version, darunter:
- Einrichtung und Bereitstellung: Nahtlose Integration mit Databricks reduziert die Einrichtungs- und Bereitstellungszeit.
- Skalierbarkeit: Kann große Machine-Learning-Workloads mühelos bewältigen.
- Sicherheit und Verwaltung: Out-of-the-Box-Sicherheitsfunktionen wie rollenbasierte Zugriffssteuerung (RBAC) und Datenverschlüsselung.
- Integration: Tiefe Integration mit Databricks-Diensten, die Interoperabilität und Funktionalität verbessert.
- Datenspeicherung und -Sicherung: Automatisierte Sicherungsstrategien stellen die Sicherheit und Zuverlässigkeit der Daten sicher.
- Kosten: Benutzer zahlen für die Plattform, Speicher und Rechenressourcen.
- Support und Wartung: Databricks bietet dedizierten Support und Wartung.
Fazit
Die Verfolgung von Large Language Models mit MLflow bietet einen robusten Rahmen für die Verwaltung der Komplexität von LLM-Entwicklung, -Bewertung und -Bereitstellung. Durch die Verwendung der in diesem Leitfaden beschriebenen Best-Practices und erweiterten Funktionen können Sie besser organisierte, reproduzierbare und aussagekräftige LLM-Experimente erstellen.
Denken Sie daran, dass sich das Feld der LLMs schnell entwickelt und neue Techniken für die Bewertung und Verfolgung ständig entstehen. Halten Sie sich mit den neuesten MLflow-Veröffentlichungen und LLM-Forschung auf dem Laufenden, um Ihre Verfolgungs- und Bewertungsprozesse kontinuierlich zu verfeinern.
Wenn Sie diese Techniken in Ihren Projekten anwenden, entwickeln Sie ein tieferes Verständnis für das Verhalten und die Leistung Ihrer LLMs, was zu effektiveren und zuverlässigeren Sprachmodellen führt.














