Jak velké jazykové modely (LLM) rostou ve složitosti a měřítku, sledování jejich výkonu, experimentů a nasazení je stále náročnější. Zde přichází na řadu MLflow – poskytuje komplexní platformu pro správu celého životního cyklu modelů strojového učení, včetně LLM.
V tomto podrobném průvodci prozkoumáme, jak využít MLflow pro sledování, vyhodnocování a nasazování LLM. Pokryjeme vše od nastavení vašeho prostředí po pokročilé techniky vyhodnocování, se spoustou příkladů kódu a osvědčených postupů.
Funkčnost MLflow ve velkých jazykových modelech (LLM)
MLflow se stal stěžejním nástrojem v komunitě strojového učení a datové vědy, zejména pro řízení životního cyklu modelů strojového učení. Pokud jde o velké jazykové modely (LLM), MLflow nabízí robustní sadu nástrojů, které výrazně zjednodušují proces vývoje, sledování, vyhodnocování a nasazování těchto modelů. Zde je přehled toho, jak MLflow funguje v rámci LLM prostoru a výhody, které poskytuje inženýrům a datovým vědcům.
Sledování a správa interakcí LLM
Systém sledování LLM společnosti MLflow je vylepšením jeho stávajících možností sledování, které je přizpůsobeno jedinečným potřebám LLM. Umožňuje komplexní sledování interakcí modelu, včetně následujících klíčových aspektů:
parametry: Protokolování párů klíč–hodnota, které podrobně popisují vstupní parametry pro LLM, jako jsou parametry specifické pro model, např. top_k si temperature. To poskytuje kontext a konfiguraci pro každý běh, což zajišťuje zachycení všech aspektů konfigurace modelu.
Metrics: Kvantitativní měření, která poskytují náhled na výkon a přesnost LLM. Ty mohou být dynamicky aktualizovány v průběhu běhu, což nabízí přehled v reálném čase nebo po procesu.
Předpovědi: Zachycení vstupů odeslaných do LLM a odpovídajících výstupů, které jsou uloženy jako artefakty ve strukturovaném formátu pro snadné vyhledávání a analýzu.
Artefakty: Kromě předpovědí může MLflow ukládat různé výstupní soubory, jako jsou vizualizace, serializované modely a soubory strukturovaných dat, což umožňuje podrobnou dokumentaci a analýzu výkonu modelu.
Tento strukturovaný přístup zajišťuje, že všechny interakce s LLM jsou pečlivě zaznamenávány a poskytuje komplexní sledování původu a kvality pro modely generující text.
Hodnocení LLM
Hodnocení LLM představuje jedinečné výzvy kvůli jejich generativní povaze a nedostatku jediné základní pravdy. MLflow to zjednodušuje pomocí specializovaných vyhodnocovacích nástrojů určených pro LLM. Mezi klíčové vlastnosti patří:
Všestranné hodnocení modelů: Podporuje vyhodnocování různých typů LLM, ať už se jedná o pyfunc model MLflow, URI směřující na registrovaný model MLflow nebo jakoukoli volatelnou Python představující váš model.
Komplexní metriky: Nabízí řadu metrik přizpůsobených pro hodnocení LLM, včetně metrik závislých na modelu SaaS (např. relevance odpovědí) a metrik založených na funkcích (např. ROUGE, Flesch Kincaid).
Předdefinované kolekce metrik: V závislosti na případu použití, jako je odpovídání na otázky nebo shrnutí textu, poskytuje MLflow předdefinované metriky pro zjednodušení procesu hodnocení.
Tvorba vlastních metrik: Umožňuje uživatelům definovat a implementovat vlastní metriky tak, aby vyhovovaly konkrétním potřebám hodnocení, čímž se zvyšuje flexibilita a hloubka hodnocení modelu.
Vyhodnocení pomocí statických datových sad: Umožňuje vyhodnocení statických datových sad bez určení modelu, což je užitečné pro rychlé posouzení bez opakovaného vyvozování modelu.
Nasazení a integrace
MLflow také podporuje bezproblémové nasazení a integraci LLM:
Server nasazení MLflow: Funguje jako jednotné rozhraní pro interakci s více poskytovateli LLM. Zjednodušuje integraci, bezpečně spravuje přihlašovací údaje a nabízí konzistentní rozhraní API. Tento server podporuje řadu základních modelů od oblíbených prodejců SaaS i samostatně hostované modely.
Jednotný koncový bod: Usnadňuje snadné přepínání mezi poskytovateli beze změn kódu, minimalizuje prostoje a zvyšuje flexibilitu.
Integrované zobrazení výsledků: Poskytuje komplexní výsledky hodnocení, ke kterým lze přistupovat přímo v kódu nebo prostřednictvím uživatelského rozhraní MLflow pro podrobnou analýzu.
MLflow je komplexní sada nástrojů a integrací, díky nimž je neocenitelným přínosem pro inženýry a datové vědce pracující s pokročilými modely NLP.
Nastavení vašeho prostředí
Než se vrhneme na sledování LLM pomocí MLflow, nastavíme naše vývojové prostředí. Budeme muset nainstalovat MLflow a několik dalších klíčových knihoven:
Tím potvrdíme verze knihoven klíčů, které budeme používat.
Pochopení možností sledování LLM společnosti MLflow
Systém sledování LLM společnosti MLflow staví na jeho stávajících možnostech sledování a přidává funkce speciálně navržené pro jedinečné aspekty LLM. Pojďme si rozebrat klíčové komponenty:
Běhy a experimenty
V MLflow představuje „běh“ jediné spuštění kódu vašeho modelu, zatímco „experiment“ je soubor souvisejících běhů. U LLM může běh představovat jeden dotaz nebo dávku výzev zpracovaných modelem.
Klíčové sledovací komponenty
parametry: Toto jsou vstupní konfigurace pro váš LLM, jako je teplota, top_k nebo max_tokens. Můžete je přihlásit pomocí mlflow.log_param() or mlflow.log_params().
Metrics: Kvantitativní měření výkonu vašeho LLM, jako je přesnost, latence nebo vlastní skóre. Použití mlflow.log_metric() or mlflow.log_metrics() sledovat tyto.
Předpovědi: U LLM je zásadní zaznamenat jak vstupní výzvy, tak výstupy modelu. MLflow je ukládá jako artefakty ve formátu CSV pomocí mlflow.log_table().
Artefakty: Jakékoli další soubory nebo data související s vaším provozem LLM, jako jsou kontrolní body modelu, vizualizace nebo vzorky datových sad. Použití mlflow.log_artifact() tyto uložit.
Podívejme se na základní příklad protokolování běhu LLM:
Tento příklad ukazuje parametry protokolování, metriky a vstup/výstup jako artefakt tabulky.
import mlflow
import openai
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()
with mlflow.start_run():
prompt = "Explain the concept of machine learning in simple terms."
# Log parameters
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)
# Query the LLM and log the result
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))
# Log the prompt and response
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})
print(f"Response: {result}")
Nasazení LLM pomocí MLflow
MLflow poskytuje výkonné funkce pro nasazení LLM, což usnadňuje obsluhu vašich modelů v produkčním prostředí. Pojďme prozkoumat, jak nasadit LLM pomocí funkcí nasazení MLflow.
Vytvoření koncového bodu
Nejprve vytvoříme koncový bod pro naše LLM pomocí klienta nasazení MLflow:
Tento kód nastavuje koncový bod pro model GPT-3.5-turbo pomocí Azure OpenAI. Všimněte si použití tajných klíčů Databricks pro bezpečnou správu klíčů API.
Testování koncového bodu
Jakmile je koncový bod vytvořen, můžeme jej otestovat:
<div class="relative flex flex-col rounded-lg">
response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "Explain the concept of neural networks briefly.","max_tokens": 100,},)
print(response)
To odešle výzvu našemu nasazenému modelu a vrátí vygenerovanou odpověď.
Vyhodnocování LLM pomocí MLflow
Hodnocení je zásadní pro pochopení výkonu a chování vašich LLM. MLflow poskytuje komplexní nástroje pro vyhodnocování LLM, včetně vestavěných i vlastních metrik.
Příprava vašeho LLM na hodnocení
Chcete-li vyhodnotit své LLM pomocí mlflow.evaluate(), váš model musí být v jedné z těchto forem:
An mlflow.pyfunc.PyFuncModel instance nebo URI ukazující na protokolovaný model MLflow.
Funkce Pythonu, která přijímá řetězcové vstupy a vydává jeden řetězec.
Identifikátor URI koncového bodu nasazení MLflow.
sada model=None a zahrnout výstupy modelu do dat hodnocení.
Podívejme se na příklad pomocí logovaného modelu MLflow:
import mlflow
import openai
with mlflow.start_run():
system_prompt = "Answer the following question concisely."
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}"},
],
)
# Prepare evaluation data
eval_data = pd.DataFrame({
"question": ["What is machine learning?", "Explain neural networks."],
"ground_truth": [
"Machine learning is a subset of AI that enables systems to learn and improve from experience without explicit programming.",
"Neural networks are computing systems inspired by biological neural networks, consisting of interconnected nodes that process and transmit information."
]
})
# Evaluate the model
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)
print(f"Evaluation metrics: {results.metrics}")
Tento příklad zaprotokoluje model OpenAI, připraví hodnotící data a poté model vyhodnotí pomocí vestavěných metrik MLflow pro úkoly související s odpovědí na otázky.
Vlastní metriky hodnocení
MLflow umožňuje definovat vlastní metriky pro hodnocení LLM. Zde je příklad vytvoření vlastní metriky pro hodnocení profesionality odpovědí:
from mlflow.metrics.genai import EvaluationExample, make_genai_metric
professionalism = make_genai_metric(
name="professionalism",
definition="Measure of formal and appropriate communication style.",
grading_prompt=(
"Score the professionalism of the answer on a scale of 0-4:\n"
"0: Extremely casual or inappropriate\n"
"1: Casual but respectful\n"
"2: Moderately formal\n"
"3: Professional and appropriate\n"
"4: Highly formal and expertly crafted"
),
examples=[
EvaluationExample(
input="What is MLflow?",
output="MLflow is like your friendly neighborhood toolkit for managing ML projects. It's super cool!",
score=1,
justification="The response is casual and uses informal language."
),
EvaluationExample(
input="What is MLflow?",
output="MLflow is an open-source platform for the machine learning lifecycle, including experimentation, reproducibility, and deployment.",
score=4,
justification="The response is formal, concise, and professionally worded."
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)
# Use the custom metric in evaluation
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)
print(f"Professionalism score: {results.metrics['professionalism_mean']}")
Tato vlastní metrika používá GPT-3.5-turbo k hodnocení profesionality odpovědí, což ukazuje, jak můžete využít samotné LLM pro hodnocení.
Pokročilé techniky hodnocení LLM
Jak se LLM stávají sofistikovanějšími, zlepšují se i techniky pro jejich vyhodnocování. Pojďme prozkoumat některé pokročilé metody hodnocení pomocí MLflow.
Vyhodnocení rozšířené generace vyhledávání (RAG).
Systémy RAG kombinují sílu modelů založených na vyhledávání a generativních modelů. Vyhodnocení systémů RAG vyžaduje posouzení jak složek vyhledávání, tak generování. Zde je návod, jak můžete nastavit systém RAG a vyhodnotit jej pomocí 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
# Load and preprocess 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)
# Create vector store
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)
# Create 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
)
# Evaluation function
def evaluate_rag(question):
result = qa_chain({"query": question})
return result["result"], [doc.page_content for doc in result["source_documents"]]
# Prepare evaluation data
eval_questions = [
"What is MLflow?",
"How does MLflow handle experiment tracking?",
"What are the main components of MLflow?"
]
# Evaluate using MLflow
with mlflow.start_run():
for question in eval_questions:
answer, sources = evaluate_rag(question)
mlflow.log_param(f"question", question)
mlflow.log_metric("num_sources", len(sources))
mlflow.log_text(answer, f"answer_{question}.txt")
for i, source in enumerate(sources):
mlflow.log_text(source, f"source_{question}_{i}.txt")
# Log custom metrics
mlflow.log_metric("avg_sources_per_question", sum(len(evaluate_rag(q)[1]) for q in eval_questions) / len(eval_questions))
Tento příklad nastaví systém RAG pomocí LangChain a Chroma a poté jej vyhodnotí protokolováním otázek, odpovědí, získaných zdrojů a vlastních metrik do MLflow.
Hodnocení strategie Chunking
Způsob, jakým své dokumenty rozdělujete, může výrazně ovlivnit výkon RAG. MLflow vám může pomoci vyhodnotit různé strategie rozdělení:
import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter
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)
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__)
mlflow.log_metric("num_chunks", len(chunks))
mlflow.log_metric("avg_chunk_length", sum(len(chunk.page_content) for chunk in chunks) / len(chunks))
# Evaluate retrieval performance (simplified)
correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)
# Evaluate different strategies
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)
# Compare results
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"Best chunking strategy: {best_run['params.splitter_class']} with size {best_run['params.chunk_size']} and overlap {best_run['params.chunk_overlap']}")
Tento skript vyhodnocuje různé kombinace velikostí bloků, překrývání a metod rozdělení a zaznamenává výsledky do MLflow pro snadné porovnání.
Vizualizace výsledků hodnocení LLM
MLflow poskytuje různé způsoby vizualizace výsledků hodnocení LLM. Zde jsou některé techniky:
Pomocí uživatelského rozhraní MLflow
Po spuštění hodnocení můžete použít uživatelské rozhraní MLflow k vizualizaci výsledků:
Spusťte uživatelské rozhraní MLflow: mlflow ui
Otevřete webový prohlížeč a přejděte na http://localhost:5000
Chcete-li zobrazit metriky, parametry a artefakty, vyberte svůj experiment a běhy
Vlastní vizualizace
Pomocí knihoven, jako je Matplotlib nebo Plotly, můžete vytvořit vlastní vizualizace výsledků hodnocení a poté je zaznamenat jako artefakty:
import matplotlib.pyplot as plt
import mlflow
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))
plt.title(f"Comparison of {metric_name}")
plt.xlabel("Step")
plt.ylabel(metric_name)
plt.legend()
# Save and log the plot
plt.savefig(f"{metric_name}_comparison.png")
mlflow.log_artifact(f"{metric_name}_comparison.png")
# Usage
with mlflow.start_run():
plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])
Tato funkce vytvoří čárový graf, který porovnává konkrétní metriku v rámci více běhů, a zaprotokoluje ji jako artefakt.
Existuje mnoho alternativ k open source MLflow pro správu pracovních postupů strojového učení, z nichž každý nabízí jedinečné funkce a integrace.
Spravováno MLflow společností Databricks
Spravovaný MLflow, hostitelem Databricky, poskytuje základní funkce open-source MLflow, ale s dalšími výhodami, jako je bezproblémová integrace s ekosystémem Databricks, pokročilé bezpečnostní funkce a spravovaná infrastruktura. Díky tomu je vynikající volbou pro organizace, které potřebují robustní zabezpečení a škálovatelnost.
Azure Machine Learning
Azure Machine Learning nabízí komplexní řešení strojového učení na cloudové platformě Microsoft Azure. Poskytuje kompatibilitu s komponentami MLflow, jako je registr modelu a sledovač experimentů, i když není založen na MLflow.
Dedikované platformy ML
Několik společností poskytuje spravované produkty ML s různými funkcemi:
neptune.ai: Zaměřuje se na sledování experimentů a správu modelů.
Váhy a odchylky: Nabízí rozsáhlé sledování experimentů, verzování datových sad a nástroje pro spolupráci.
Kometa ML: Poskytuje sledování experimentů, monitorování výroby modelu a protokolování dat.
Valohai: Specializuje se na potrubí strojového učení a orchestraci.
meta flow
meta flow, vyvinutý společností Netflix, je open-source framework navržený k organizování datových pracovních toků a kanálů ML. I když vyniká ve správě rozsáhlých nasazení, ve srovnání s MLflow postrádá komplexní funkce pro sledování experimentů a správu modelů.
Amazon SageMaker a Vertex AI od Googlu
Oba Amazon SageMaker si Vertex AI od Googlu poskytovat end-to-end řešení MLOps integrovaná do jejich příslušných cloudových platforem. Tyto služby nabízejí robustní nástroje pro vytváření, školení a nasazení modelů strojového učení ve velkém měřítku.
Podrobné srovnání
Spravovaný MLflow vs. Open Source MLflow
Managed MLflow by Databricks nabízí několik výhod oproti verzi s otevřeným zdrojovým kódem, včetně:
Nastavení a nasazení: Bezproblémová integrace s Databricks snižuje čas a námahu na nastavení.
Škálovatelnost: Schopnost snadno zvládnout rozsáhlé úlohy strojového učení.
Bezpečnost a správa: Předdefinované funkce zabezpečení, jako je řízení přístupu na základě rolí (RBAC) a šifrování dat.
Integrace: Hluboká integrace se službami Databricks, zlepšení interoperability a funkčnosti.
Ukládání a zálohování dat: Automatické strategie zálohování zajišťují bezpečnost a spolehlivost dat.
Stát: Uživatelé platí za platformu, úložiště a výpočetní zdroje.
Podpora a údržba: Vyhrazená podpora a údržba poskytovaná společností Databricks.
Proč investovat do čističky vzduchu?
Sledování velkých jazykových modelů pomocí MLflow poskytuje robustní rámec pro správu složitosti vývoje, hodnocení a nasazení LLM. Dodržováním osvědčených postupů a využíváním pokročilých funkcí uvedených v této příručce můžete vytvářet organizovanější, reprodukovatelnější a srozumitelnější experimenty LLM.
Pamatujte, že oblast LLM se rychle vyvíjí a neustále se objevují nové techniky hodnocení a sledování. Zůstaňte informováni o nejnovějších verzích MLflow a výzkumu LLM, abyste mohli neustále zdokonalovat své procesy sledování a hodnocení.
Když tyto techniky použijete ve svých projektech, získáte hlubší porozumění chování a výkonu vašich LLM, což povede k efektivnějším a spolehlivějším jazykovým modelům.
Posledních pět let jsem strávil ponořením se do fascinujícího světa strojového učení a hlubokého učení. Moje vášeň a odborné znalosti mě vedly k tomu, abych se podílel na více než 50 různých projektech softwarového inženýrství se zvláštním zaměřením na AI/ML. Moje neustálá zvědavost mě také přivedla ke zpracování přirozeného jazyka, což je obor, který bych rád dále prozkoumal.