Modely a platformy AI

Sledování velkých jazykových modelů (LLM) pomocí MLflow: Úplný průvodce

mm
Přidejte Unite.AI mezi své preferované zdroje na Google

Jak velké jazykové modely (LLM) rostou v komplexitě a rozsahu, sledování jejich výkonu, experimentů a nasazení se stává stále více náročným. Zde přichází MLflow – poskytující 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í, hodnocení a nasazení LLM. Pokryjeme vše od nastavení prostředí až po pokročilé techniky hodnocení, s mnoha příklady kódu a osvědčenými postupy na cestě.

Funkce MLflow u velkých jazykových modelech (LLM)

MLflow se stal zásadním nástrojem ve strojovém učení a datové vědě, zejména pro správu životního cyklu modelů strojového učení. Pokud jde o velké jazykové modely (LLM), MLflow nabízí robustní sadu nástrojů, které významně zjednodušují proces vývoje, sledování, hodnocení a nasazení těchto modelů. Zde je přehled toho, jak MLflow funguje ve prostoru LLM a jaké výhody poskytuje inženýrům a datovým vědcům.

Naučte se o základních komponentách MLflow

Sledování a správa interakcí LLM

Sledovací systém LLM od MLflow je vylepšením stávajících sledovacích schopností, přizpůsobených specifický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 modelově specifické parametry jako top_k a temperature. To poskytuje kontext a konfiguraci pro každý běh, zajišťuje, že všechny aspekty konfigurace modelu jsou zachyceny.
  • Metriky: Kvantitativní měření, která poskytují přehled o výkonu a přesnosti LLM. Tyto metriky lze aktualizovat dynamicky, jak běh postupuje, a nabízejí přehledy v reálném čase nebo po procesu.
  • Predikce: 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ý přístup a analýzu.
  • Artefakty: Kromě predikcí může MLflow uložit různé výstupní soubory, jako jsou visualizace, serializované modely a strukturované datové soubory, umožňující podrobnou dokumentaci a analýzu výkonu modelu.

Tento strukturovaný přístup zajišťuje, že všechny interakce s LLM jsou pečlivě zaznamenány, poskytují komplexní linii a kvalitní sledování pro text-generační modely​.

Hodnocení LLM

Hodnocení LLM představuje jedinečné výzvy kvůli jejich generativnímu charakteru a nedostatku jediné pravdivé hodnoty. MLflow zjednodušuje toto pomocí specializovaných nástrojů pro hodnocení, navržených pro LLM. Klíčové funkce zahrnují:

  • Univerzální hodnocení modelu: Podporuje hodnocení různých typů LLM, ať už se jedná o model MLflow pyfunc, URI odkazující na registrovaný model MLflow, nebo jakýkoli pythonský volatelný objekt reprezentující váš model.
  • Komplexní metriky: Nabízí řadu metrik přizpůsobených pro hodnocení LLM, včetně metrik závislých na modelu (například relevance odpovědi) a metrik založených na funkcích (například ROUGE, Flesch Kincaid).
  • Předdefinované kolekce metrik: V závislosti na použití, jako je zodpovězení otázek nebo shrnutí textu, MLflow poskytuje předdefinované metriky, aby zjednodušil proces hodnocení.
  • Vytvoření vlastních metrik: Umožňuje uživatelům definovat a implementovat vlastní metriky, aby vyhověly specifickým potřebám hodnocení, zvyšují flexibilitu a hloubku hodnocení modelu.
  • Hodnocení se statickými datovými sadami: Povoluje hodnocení statických datových sad bez specifikace modelu, což je užitečné pro rychlé hodnocení bez opětovného spuštění modelové inference.

Nasazení a integrace

MLflow také podporuje bezproblémové nasazení a integraci LLM:

  • Server nasazení MLflow: Jedná se o sjednocený rozhraní pro interakci s několika poskytovateli LLM. Zjednodušuje integrace, spravuje přihlašovací údaje bezpečně a nabízí konzistentní API prostředí. Tento server podporuje řadu základních modelů od populárních SaaS dodavatelů, stejně jako self-hosted modely.
  • Jednotné rozhraní: Umožňuje snadné přepínání mezi poskytovateli bez změn kódu, minimalizuje výpadek a zvyšuje flexibilitu.
  • Integrovaný výsledek: Poskytuje komplexní výsledky hodnocení, které lze přímo získat v kódu nebo prostřednictvím rozhraní MLflow pro podrobnou analýzu.

MLflow je komplexní sada nástrojů a integrací, což z něj dělá nepostradatelný aktiv pro inženýry a datové vědce pracující s pokročilými modely NLP.

Nastavení prostředí

Než se ponoříme do sledování LLM s MLflow, nastavme naše vývojové prostředí. Budeme potřebovat nainstalovat MLflow a několik dalších klíčových knihoven:

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

Po instalaci je dobré restartovat Pythonové prostředí, aby se zajistilo, že všechny knihovny jsou řádně načteny. V Jupyter notebooku můžete použít:

import mlflow
import chromadb

<p>print(f"Verze MLflow: {mlflow.__version__}")
print(f"Verze ChromaDB: {chromadb.__version__}")

To potvrdí verze klíčových knihoven, které budeme používat.

Porozumění sledovacím schopnostem MLflow

Sledovací systém LLM od MLflow staví na stávajících sledovacích schopnostech, přidává funkce speciálně navržené pro jedinečné aspekty LLM. Rozdělme klíčové komponenty:

Běhy a experimenty

V MLflow “běh” reprezentuje jeden běh modelového kódu, zatímco “experiment” je sbírka souvisejících běhů. Pro LLM může běh reprezentovat jednu otázku nebo dávku promptů zpracovaných modelem.

Klíčové sledovací komponenty

  1. Parametry: Tyto jsou vstupní konfigurace pro váš LLM, jako je teplota, top_k nebo max_tokens. Můžete je protokolovat pomocí mlflow.log_param() nebo mlflow.log_params().
  2. Metriky: Kvantitativní měření vašeho LLM, jako je přesnost, latence nebo vlastní skóre. Použijte mlflow.log_metric() nebo mlflow.log_metrics() pro sledování.
  3. Predikce: Pro LLM je důležité protokolovat jak vstupní prompty, tak výstupy modelu. MLflow tyto ukládá jako artefakty ve formátu CSV pomocí mlflow.log_table().
  4. Artefakty: Jakékoli další soubory nebo data související s během LLM, jako jsou kontrolní body modelu, visualizace nebo ukázky dat. Použijte mlflow.log_artifact() pro uložení.

Podívejme se na základní příklad protokolování běhu LLM:

Tento příklad demonstruje protokolování parametrů, metrik a vstupní/výstupní jako tabulkový 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 = "Vysvětlit koncept strojového učení v jednoduchých termínech."
</p>

<p># Protokolovat parametry
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)</p>

<p># Dotázat se LLM a protokolovat výsledek
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))</p>

<p># Protokolovat prompt a odpověď
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})</p>

<p>print(f"Odpověď: {result}")

Nasazení LLM s MLflow

MLflow poskytuje silné schopnosti pro nasazení LLM, usnadňující službu vašich modelů v produkčních prostředích. Prozkoumejme, jak nasadit LLM pomocí nasazení MLflow:

Vytvoření koncového bodu

Nejprve vytvoříme koncový bod pro náš LLM pomocí nasazení MLflow:

import mlflow
from mlflow.deployments import get_deploy_client

<p># Inicializace klienta nasazení
client = get_deploy_client("databricks")</p>

<p># Definice konfigurace koncového bodu
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># Vytvoření koncového bodu
client.create_endpoint(name=endpoint_name, config=endpoint_config)

Tento kód nastaví koncový bod pro model GPT-3.5-turbo pomocí Azure OpenAI. Pozorujte použití Databricks tajemství pro bezpečné spravování API klíčů.

Testování koncového bodu

Jakmile je koncový bod vytvořen, můžeme jej otestovat:

&lt;div class=&quot;relative flex flex-col rounded-lg&quot;&gt;

<p>response = client.predict(
endpoint=endpoint_name,
inputs={&quot;prompt&quot;: &quot;Vysvětlit koncept neuronových sítí stručně.&quot;, &quot;max_tokens&quot;: 100,},)</p>

print(response)

To pošle prompt na náš nasazený model a vrátí vygenerovanou odpověď.

Hodnocení LLM s MLflow

Hodnocení je zásadní pro pochopení výkonu a chování vašich LLM. MLflow poskytuje komplexní nástroje pro hodnocení LLM, včetně vestavěných a vlastních metrik.

Příprava LLM pro hodnocení

Abyste mohli vyhodnotit váš LLM pomocí mlflow.evaluate(), váš model musí být v jedné z těchto forem:

  1. Instance mlflow.pyfunc.PyFuncModel nebo URI odkazující na registrovaný model MLflow.
  2. Pythonová funkce, která přijímá řetězcové vstupy a vrací jediný řetězec.
  3. Koncový bod nasazení MLflow.
  4. Nastavte model=None a zahrňte výstupy modelu do dat hodnocení.

Podívejme se na příklad pomocí registrovaného modelu MLflow:

import mlflow
import openai

<p>with mlflow.start_run():
system_prompt = "Zodpovězte následující otázku stručně."
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># Příprava dat pro hodnocení
eval_data = pd.DataFrame({
"question": ["Co je strojové učení?", "Vysvětlit neuronové sítě."],
"ground_truth": [
"Strojové učení je podmnožina AI, která umožňuje systémům učit se a zlepšovat se z experience bez explicitního programování.",
"Neuronové sítě jsou výpočetní systémy inspirované biologickými neuronovými sítěmi, skládající se z propojených uzlů, které zpracovávají a přenášejí informace.",
]
})</p>

<p># Hodnocení modelu
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)</p>

<p>print(f"Hodnoty metrik: {results.metrics}")

Tento příklad registruje model OpenAI, připravuje data pro hodnocení a poté vyhodnocuje model pomocí vestavěných metrik MLflow pro úkoly zodpovězení otázek.

Vlastní metriky hodnocení

MLflow umožňuje definovat vlastní metriky pro hodnocení LLM. Zde je příklad vytvoření vlastní metriky pro hodnocení profesionalismu odpovědí:

from mlflow.metrics.genai import EvaluationExample, make_genai_metric

<p>professionalism = make_genai_metric(
name="professionalism",
definition="Míra formálního a vhodného komunikačního stylu.",
grading_prompt=(
"Ohodnoťte profesionalismus odpovědi na škále 0-4:\n"
"0: Extrémně neformální nebo nevhodné\n"
"1: Neformální, ale respektující\n"
"2: Středně formální\n"
"3: Profesionální a vhodný\n"
"4: Vysoce formální a expertně zpracovaný"
),
examples=[
EvaluationExample(
input="Co je MLflow?",
output="MLflow je jako váš přátelský sousedský nástroj pro správu projektů ML. Je to super cool!",
score=1,
justification="Odpověď je neformální a používá neformální jazyk.",
),
EvaluationExample(
input="Co je MLflow?",
output="MLflow je otevřená platforma pro životní cyklus strojového učení, včetně experimentování, reprodukovatelnosti a nasazení.",
score=4,
justification="Odpověď je formální, stručná a profesionálně formulovaná.",
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)</p>

<p># Použití vlastní metriky v hodnocení
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)</p>

<p>print(f"Skóre profesionalismu: {results.metrics['professionalism_mean']}")

Tato vlastní metrika používá GPT-3.5-turbo pro hodnocení profesionalismu odpovědí, demonstruje, jak můžete využít LLM samotné pro hodnocení.

Pokročilé techniky hodnocení LLM

Jak se LLM stávají sofistikovanějšími, tak i techniky pro jejich hodnocení. Prozkoumejme některé pokročilé metody hodnocení pomocí MLflow.

Hodnocení RAG (Retrieval-Augmented Generation)

Systémy RAG kombinují sílu retrieval-based a generativních modelů. Hodnocení systémů RAG vyžaduje hodnocení obou retrieval a generativních komponent. Zde je, 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

<p># Načtení a předzpracování dokumentů
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># Vytvoření vectorového úložiště
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)</p>

<p># Vytvoření řetězce 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># Funkce hodnocení
def evaluate_rag(question):
result = qa_chain({"query": question})
return result["result"], [doc.page_content for doc in result["source_documents"]]</p>

<p># Příprava dat pro hodnocení
eval_questions = [
"Co je MLflow?",
"Jak MLflow zpracovává sledování experimentů?",
"Jaké jsou hlavní komponenty MLflow?",
]</p>

<p># Hodnocení pomocí 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># Protokolovat vlastní metriky
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, poté vyhodnotí jej tak, že protokoluje otázky, odpovědi, zdroje a vlastní metriky do MLflow.

Hodnocení strategie chunkingu

Způsob, jakým chunkujete dokumenty, může mít významný dopad na výkon RAG. MLflow může pomoci vyhodnotit různé strategie chunkingu:

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># Hodnocení výkonu retrieval (zjednodušeno)
correct_retrievals = sum(1 for _ in range(100) if simulate_retrieval(chunks))
mlflow.log_metric("retrieval_accuracy", correct_retrievals / 100)</p>

<p># Hodnocení různých strategií
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># Srovnání výsledků
best_run = mlflow.search_runs(order_by=["metrics.retrieval_accuracy DESC"]).iloc[0]
print(f"Nejlepší strategie chunkingu: {best_run['params.splitter_class']} s velikostí {best_run['params.chunk_size']} a překryvem {best_run['params.chunk_overlap']}")

Tento skript vyhodnocuje různé kombinace velikostí chunků, překryvů a metod dělení, protokoluje výsledky do MLflow pro snadné srovnání.

Vizualizace výsledků hodnocení LLM

MLflow poskytuje různé způsoby, jak vizualizovat výsledky hodnocení vašich LLM. Zde jsou některé techniky:

Použití rozhraní MLflow

Po spuštění hodnocení můžete použít rozhraní MLflow pro vizualizaci výsledků:

  1. Spusťte rozhraní MLflow: mlflow ui
  2. Otevřete webový prohlížeč a přejděte na http://localhost:5000
  3. Vyberte váš experiment a běhy pro zobrazení metrik, parametrů a artefaktů

Vlastní vizualizace

Můžete vytvořit vlastní vizualizace výsledků hodnocení pomocí knihoven jako Matplotlib nebo Plotly, poté je protokolovat jako artefakty:

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"Porovnání {metric_name}")
plt.xlabel("Krok")
plt.ylabel(metric_name)
plt.legend()</p>

<p># Uložení a protokolování grafu
plt.savefig(f"{metric_name}_comparison.png")
mlflow.log_artifact(f"{metric_name}_comparison.png")</p>

<p># Použití
with mlflow.start_run():
plot_metric_comparison("answer_relevance", ["run_id_1", "run_id_2", "run_id_3"])

Tato funkce vytváří lineární graf porovnávající konkrétní metriku napříč několika běhy a protokoluje jej jako artefakt.

Alternativy k otevřenému MLflow

Existuje řada alternativ k otevřenému MLflow pro správu pracovních postupů strojového učení, každá s jedinečnými funkcemi a integracemi.

Spravované MLflow od Databricks

Spravované MLflow, hostované společností Databricks, poskytuje základní funkcionality otevřeného MLflow, ale s dalšími výhodami, jako je bezproblémová integrace s ekosystémem Databricks, pokročilé bezpečnostní funkce a spravované infrastruktury. To z něj dělá vynikající volbu pro organizace, které potřebují robustní bezpečnost a škálovatelnost.

Azure Machine Learning

Azure Machine Learning nabízí komplexní řešení strojového učení na platformě Azure. Poskytuje kompatibilitu s komponentami MLflow, jako je registr modelů a sledování experimentů, i když není založeno na MLflow.

Vyhrazené 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ů.
  • Weights & Biases: Nabízí rozsáhlé sledování experimentů, verzi dat a nástroje pro spolupráci.
  • Comet ML: Poskytuje sledování experimentů, monitorování modelů a protokolování dat.
  • Valohai: Specializuje se na strojové učení a orchestraci.

Metaflow

Metaflow, vyvinutý společností Netflix (NFLX ), je otevřenou platformou pro orchestraci datových pracovních postupů a ML pipeline. I když vyniká ve správě velkých nasazení, postrádá komplexní sledování experimentů a správu modelů ve srovnání s MLflow.

Amazon SageMaker a Google’s Vertex AI

Obě Amazon SageMaker (AMZN ) a Google’s Vertex AI (GOOGL ) poskytují komplexní řešení MLOps integrovaná do svých cloudových platforem. Tyto služby nabízejí robustní nástroje pro budování, trénování a nasazení modelů strojového učení v měřítku.

Podrobné srovnání

Spravované MLflow vs. otevřené MLflow

Spravované MLflow od Databricks nabízí několik výhod oproti otevřené verzi, včetně:

  • Nastavení a nasazení: Bezproblémová integrace s Databricks snižuje dobu nastavení a úsilí.
  • Škálovatelnost: Schopné zvládnout velké pracovní zatížení strojového učení s lehkostí.
  • Bezpečnost a správa: Přednastavené bezpečnostní funkce, jako je role-based přístupový kontrol (RBAC) a šifrování dat.
  • Integrace: Hluboká integrace se službami Databricks, zvyšující interoperabilitu a funkčnost.
  • Úložiště a zálohování dat: Automatizované strategie zálohování zajišťují bezpečnost a spolehlivost dat.
  • Náklady: Uživatelé platí za platformu, úložiště a výpočetní zdroje.
  • Podpora a údržba: Poskytuje se dedikovaná podpora a údržba ze strany Databricks.

Závěr

Sledování velkých jazykových modelů s MLflow poskytuje robustní rámec pro správu složitostí vývoje, hodnocení a nasazení LLM. Dodržováním osvědčených postupů a využíváním pokročilých funkcí popsaných v tomto průvodci můžete vytvořit více organizované, reprodukovatelné a přehledné experimenty LLM.

Pamatujte, že oblast LLM se rychle vyvíjí a nové techniky pro hodnocení a sledování se neustále objevují. Zůstávejte informováni o nejnovějších verzích MLflow a výzkumu LLM, abyste mohli neustále vylepšovat své postupy sledování a hodnocení.

Jak budete aplikovat tyto techniky ve svých projektech, budete rozvíjet hlubší pochopení chování a výkonu vašich LLM, což povede k více účinným a spolehlivým jazykovým modelům.

Já pět let se ponořím do fascinujícího světa strojového učení a hlubokého učení. Mé vášně 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. Mé pokračující zvědavosti mě také přivedly k přirozenému jazykovému zpracování, oblasti, kterou jsem ochoten prozkoumat dále.