Свяжитесь с нами:

Отслеживание больших языковых моделей (LLM) с помощью MLflow: полное руководство

Инструменты ИИ 101

Отслеживание больших языковых моделей (LLM) с помощью MLflow: полное руководство

mm
Оценка руководства MLflow LLM

По мере того, как модели больших языков (LLM) становятся все сложнее и масштабнее, отслеживание их производительности, экспериментов и развертываний становится все более сложной задачей. Именно здесь на помощь приходит MLflow, предоставляющий комплексную платформу для управления всем жизненным циклом моделей машинного обучения, включая LLM.

В этом подробном руководстве мы рассмотрим, как использовать MLflow для отслеживания, оценки и развертывания программ LLM. Мы рассмотрим все аспекты, от настройки среды до продвинутых методов оценки, с множеством примеров кода и рекомендациями.

Функциональность MLflow в моделях большого языка (LLM)

Млфлоу стал ключевым инструментом в сообществе специалистов по машинному обучению и науке о данных, особенно для управления жизненным циклом моделей машинного обучения. Что касается больших языковых моделей (LLM), MLflow предлагает мощный набор инструментов, которые значительно упрощают процесс разработки, отслеживания, оценки и внедрения этих моделей. Ниже представлен обзор функционирования MLflow в области LLM и преимуществ, которые он предоставляет инженерам и специалистам по данным.

Узнайте об основных компонентах MLflow

Отслеживание и управление взаимодействиями LLM

Система отслеживания LLM от MLflow представляет собой расширение существующих возможностей отслеживания, адаптированное к уникальным потребностям LLM. Он позволяет всесторонне отслеживать взаимодействие моделей, включая следующие ключевые аспекты:

  • Параметры: Регистрация пар ключ-значение, которые подробно описывают входные параметры для LLM, такие как параметры, специфичные для модели, такие как top_k и temperature. Это обеспечивает контекст и конфигурацию для каждого запуска, гарантируя, что все аспекты конфигурации модели будут учтены.
  • Метрика: Количественные показатели, которые дают представление о производительности и точности LLM. Их можно динамически обновлять по ходу выполнения, предлагая информацию в режиме реального времени или после обработки.
  • Predictions: Захват входных данных, отправленных в LLM, и соответствующих выходных данных, которые сохраняются как артефакты в структурированном формате для облегчения поиска и анализа.
  • Артефакты: Помимо прогнозов, MLflow может хранить различные выходные файлы, такие как визуализации, сериализованные модели и структурированные файлы данных, что позволяет осуществлять подробное документирование и анализ производительности модели.

Такой структурированный подход гарантирует, что все взаимодействия с LLM тщательно записываются, обеспечивая всестороннее отслеживание происхождения и качества моделей, генерирующих текст.

Оценка LLM

Оценка LLM представляет собой уникальные проблемы из-за их порождающего характера и отсутствия единой истины. MLflow упрощает это с помощью специализированных инструментов оценки, разработанных для студентов LLM. Ключевые особенности включают в себя:

  • Универсальная оценка модели: поддерживает оценку различных типов LLM, будь то модель MLflow pyfunc, URI, указывающий на зарегистрированную модель MLflow, или любой вызываемый объект Python, представляющий вашу модель.
  • Комплексные показатели: Предлагает ряд показателей, адаптированных для оценки LLM, включая как метрики, зависящие от модели SaaS (например, релевантность ответов), так и метрики, основанные на функциях (например, ROUGE, Flesch Kincaid).
  • Предопределенные коллекции метрик: в зависимости от варианта использования, например ответов на вопросы или обобщения текста, MLflow предоставляет предопределенные метрики для упрощения процесса оценки.
  • Создание специальной метрики: позволяет пользователям определять и внедрять собственные метрики в соответствии с конкретными потребностями оценки, повышая гибкость и глубину оценки модели.
  • Оценка со статическими наборами данных: позволяет оценивать статические наборы данных без указания модели, что полезно для быстрой оценки без повторного выполнения вывода модели.

Развертывание и интеграция

MLflow также поддерживает плавное развертывание и интеграцию LLM:

  • Сервер развертываний MLflow: действует как единый интерфейс для взаимодействия с несколькими поставщиками LLM. Он упрощает интеграцию, безопасно управляет учетными данными и предлагает единообразный интерфейс API. Этот сервер поддерживает ряд базовых моделей от популярных поставщиков SaaS, а также модели с автономным размещением.
  • Единая конечная точка: Облегчает легкое переключение между поставщиками без изменения кода, сводя к минимуму время простоя и повышая гибкость.
  • Интегрированный просмотр результатов: предоставляет комплексные результаты оценки, к которым можно получить доступ непосредственно в коде или через пользовательский интерфейс MLflow для детального анализа.

MLflow — это комплексный набор инструментов, а интеграция делает его бесценным активом для инженеров и специалистов по обработке данных, работающих с передовыми моделями НЛП.

Настройка вашей среды

Прежде чем мы приступим к отслеживанию LLM с помощью MLflow, давайте настроим среду разработки. Нам потребуется установить MLflow и несколько других ключевых библиотек:

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

После установки рекомендуется перезапустить среду Python, чтобы обеспечить корректную загрузку всех библиотек. В блокноте Jupyter можно использовать:

import mlflow
import chromadb

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

Это подтвердит версии ключевых библиотек, которые мы будем использовать.

Понимание возможностей отслеживания LLM в MLflow

Система отслеживания LLM от MLflow расширяет существующие возможности отслеживания, добавляя функции, специально разработанные для уникальных аспектов LLM. Давайте рассмотрим ключевые компоненты:

Прогоны и эксперименты

В MLflow «прогон» представляет собой одно выполнение кода вашей модели, а «эксперимент» — это набор связанных прогонов. Для LLM прогон может представлять собой один запрос или пакет запросов, обрабатываемых моделью.

Ключевые компоненты отслеживания

  1. Параметры: это входные конфигурации для вашего LLM, такие как температура, top_k или max_tokens. Вы можете зарегистрировать их, используя mlflow.log_param() or mlflow.log_params().
  2. Метрика: Количественные показатели вашей успеваемости в LLM, такие как точность, задержка или индивидуальные оценки. Используйте mlflow.log_metric() or mlflow.log_metrics() чтобы отслеживать их.
  3. Predictions: Для LLM крайне важно регистрировать как входные запросы, так и выходные данные модели. MLflow хранит их в виде артефактов в формате CSV, используя mlflow.log_table().
  4. Артефакты: любые дополнительные файлы или данные, связанные с запуском LLM, например контрольные точки модели, визуализации или образцы наборов данных. Использовать mlflow.log_artifact() хранить их.

Давайте рассмотрим простой пример регистрации запуска LLM:

В этом примере демонстрируются параметры журналирования, метрики и ввод/вывод в виде артефакта таблицы.

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}")

Развертывание LLM с помощью MLflow

MLflow предоставляет мощные возможности для развертывания LLM, упрощая обслуживание моделей в производственных средах. Давайте рассмотрим, как развернуть LLM, используя функции развертывания MLflow.

Создание конечной точки

Сначала мы создадим конечную точку для нашего LLM, используя клиент развертывания 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)

Этот код устанавливает конечную точку для модели GPT-3.5-turbo с использованием Azure OpenAI. Обратите внимание на использование секретов Databricks для безопасного управления ключами API.

Тестирование конечной точки

Как только конечная точка создана, мы можем ее протестировать:

<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)

Это отправит запрос в нашу развернутую модель и вернет сгенерированный ответ.

Оценка LLM с помощью MLflow

Оценка имеет решающее значение для понимания эффективности и поведения ваших LLM. MLflow предоставляет комплексные инструменты для оценки LLM, включая как встроенные, так и пользовательские метрики.

Подготовка вашего LLM к оценке

Чтобы оценить свой LLM с помощью mlflow.evaluate(), ваша модель должна быть в одной из этих форм:

  1. An mlflow.pyfunc.PyFuncModel экземпляр или URI, указывающий на зарегистрированную модель MLflow.
  2. Функция Python, которая принимает строковые входные данные и выводит одну строку.
  3. URI конечной точки развертываний MLflow.
  4. Поставьте model=None и включать результаты модели в данные оценки.

Давайте рассмотрим пример использования зарегистрированной модели 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}")

В этом примере регистрируется модель OpenAI, подготавливаются данные оценки, а затем модель оценивается с использованием встроенных метрик MLflow для задач с ответами на вопросы.

Пользовательские метрики оценки

MLflow позволяет определять пользовательские метрики для оценки LLM. Вот пример создания пользовательской метрики для оценки профессионализма ответов:

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']}")

В этой специальной метрике используется GPT-3.5-turbo для оценки профессионализма ответов, демонстрируя, как вы можете использовать сами LLM для оценки.

Передовые методы оценки LLM

По мере того, как программы магистратуры права (LLM) становятся всё более сложными, совершенствуются и методы их оценки. Давайте рассмотрим некоторые продвинутые методы оценки с помощью MLflow.

Оценка расширенной генерации (RAG)

Системы RAG сочетают в себе мощь моделей поиска и генеративных моделей. Оценка систем RAG требует анализа как компонентов поиска, так и компонентов генерации. Вот как настроить систему RAG и оценить её с помощью 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))

В этом примере настраивается система RAG с использованием LangChain и Chroma, а затем оценивается ее путем регистрации вопросов, ответов, полученных источников и пользовательских метрик в MLflow.

Оценка стратегии дробления

То, как вы разбиваете документы, может существенно повлиять на производительность RAG. MLflow может помочь вам оценить различные стратегии фрагментации:

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']}")

Этот скрипт оценивает различные комбинации размеров блоков, перекрытий и методов разделения, записывая результаты в MLflow для удобства сравнения.

Визуализация результатов оценки LLM

MLflow предоставляет различные способы визуализации результатов оценки LLM. Вот некоторые методы:

Использование пользовательского интерфейса MLflow

После выполнения оценок вы можете использовать пользовательский интерфейс MLflow для визуализации результатов:

  1. Запустите пользовательский интерфейс MLflow: mlflow ui
  2. Откройте веб-браузер и перейдите к http://localhost:5000
  3. Выберите эксперимент и выполните его, чтобы просмотреть метрики, параметры и артефакты.

Пользовательские визуализации

Вы можете создавать собственные визуализации результатов оценки, используя такие библиотеки, как Matplotlib или Plotly, а затем регистрировать их как артефакты:

 
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"])

Эта функция создает линейный график, сравнивающий конкретную метрику в нескольких прогонах, и регистрирует ее как артефакт.

Альтернативы MLflow с открытым исходным кодом

Существует множество альтернатив открытому исходному коду. Млфлоу для управления рабочими процессами машинного обучения, каждый из которых предлагает уникальные функции и интеграции.

Управляемый MLflow от Databricks

Управляемый MLflow, размещенный на хостинге Databricks, предоставляет базовые функции MLflow с открытым исходным кодом, а также дополнительные преимущества, такие как бесшовная интеграция с экосистемой Databricks, расширенные функции безопасности и управляемая инфраструктура. Это делает его отличным выбором для организаций, которым требуется надежная безопасность и масштабируемость.

Лазурное машинное обучение

Лазурное машинное обучение Предлагает комплексное решение для машинного обучения на облачной платформе Microsoft Azure. Оно совместимо с компонентами MLflow, такими как реестр моделей и трекер экспериментов, хотя и не основано на MLflow.

Выделенные платформы машинного обучения

Несколько компаний предоставляют управляемые продукты машинного обучения с различными функциями:

  • Нептун.ai: фокусируется на отслеживании экспериментов и управлении моделями.
  • Веса и отклонения: предлагает обширные возможности отслеживания экспериментов, управления версиями наборов данных и инструменты для совместной работы.
  • Комета ML: Обеспечивает отслеживание экспериментов, мониторинг производства моделей и регистрацию данных.
  • Валохай: Специализируется на конвейерах и оркестрации машинного обучения.

Метафлоу

Метафлоу, разработанная Netflix, представляет собой платформу с открытым исходным кодом, предназначенную для организации рабочих процессов обработки данных и конвейеров машинного обучения. Несмотря на то, что он превосходно справляется с крупномасштабными развертываниями, ему не хватает комплексных функций отслеживания экспериментов и управления моделями по сравнению с MLflow.

Amazon SageMaker и Google Vertex AI

Оба формата Создатель мудреца Амазонки и Google Vertex AI предоставлять комплексные решения MLOps, интегрированные в соответствующие облачные платформы. Эти услуги предлагают надежные инструменты для создания, обучения и развертывания моделей машинного обучения в большом масштабе.

Детальное сравнение

Управляемый MLflow против MLflow с открытым исходным кодом

Управляемый MLflow от Databricks предлагает ряд преимуществ по сравнению с версией с открытым исходным кодом, в том числе:

  • Настройка и развертывание: Полная интеграция с Databricks сокращает время и усилия на настройку.
  • Масштабируемость: Способен легко справляться с крупномасштабными рабочими нагрузками машинного обучения.
  • Безопасность и управление: готовые функции безопасности, такие как управление доступом на основе ролей (RBAC) и шифрование данных.
  • интеграцию: Глубокая интеграция с сервисами Databricks, улучшающая совместимость и функциональность.
  • Хранение и резервное копирование данных: Стратегии автоматического резервного копирования обеспечивают безопасность и надежность данных.
  • Стоимость: пользователи платят за платформу, хранилище и вычислительные ресурсы.
  • Поддержка и обслуживание: выделенная поддержка и обслуживание, предоставляемые Databricks.

Заключение

Отслеживание больших языковых моделей с помощью MLflow обеспечивает надежную основу для управления сложностями разработки, оценки и развертывания LLM. Следуя лучшим практикам и используя расширенные функции, описанные в этом руководстве, вы сможете проводить более организованные, воспроизводимые и содержательные эксперименты LLM.

Помните, что сфера LLM быстро развивается, и постоянно появляются новые методы оценки и отслеживания. Будьте в курсе последних выпусков MLflow и исследований LLM, чтобы постоянно совершенствовать процессы отслеживания и оценки.

Применяя эти методы в своих проектах, вы глубже поймете поведение и производительность ваших LLM, что приведет к созданию более эффективных и надежных языковых моделей.

Последние пять лет я погружался в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и опыт позволили мне принять участие в более чем 50 различных проектах по разработке программного обеспечения, уделяя особое внимание AI/ML. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.