Spojte se s námi

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

Nástroje AI 101

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

mm

Zveřejněno

 on

Hodnocení průvodce MLflow LLM

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.

Přečtěte si o základních součástech MLflow

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:

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 vhodné restartovat prostředí Pythonu, abyste zajistili správné načtení všech knihoven. V notebooku Jupyter můžete použít:

import mlflow
import chromadb

print(f"MLflow version: {mlflow.__version__}")
print(f"ChromaDB version: {chromadb.__version__}")

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

  1. 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().
  2. 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.
  3. 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().
  4. 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:

import mlflow
from mlflow.deployments import get_deploy_client

# Initialize the deployment client
client = get_deploy_client("databricks")

# Define the endpoint configuration
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",
            },
        },
    }],
}

# Create the endpoint
client.create_endpoint(name=endpoint_name, config=endpoint_config)

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:

  1. An mlflow.pyfunc.PyFuncModel instance nebo URI ukazující na protokolovaný model MLflow.
  2. Funkce Pythonu, která přijímá řetězcové vstupy a vydává jeden řetězec.
  3. Identifikátor URI koncového bodu nasazení MLflow.
  4. 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ů:

  1. Spusťte uživatelské rozhraní MLflow: mlflow ui
  2. Otevřete webový prohlížeč a přejděte na http://localhost:5000
  3. 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.

Alternativy k Open Source MLflow

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.