Оскільки великі мовні моделі (LLM) стають все більш складними та масштабними, відстеження їхньої продуктивності, експериментів і розгортань стає дедалі складнішим. Саме тут на допомогу приходить MLflow, який забезпечує комплексну платформу для керування всім життєвим циклом моделей машинного навчання, включаючи LLM.
У цьому поглибленому посібнику ми розглянемо, як використовувати MLflow для відстеження, оцінки та розгортання LLM. Ми розглянемо все: від налаштування вашого середовища до розширених методів оцінювання, разом із великою кількістю прикладів коду та передових практик.
Функціональність MLflow у великих мовних моделях (LLM)
MLflow стала ключовим інструментом у спільноті машинного навчання та науки про дані, особливо для керування життєвим циклом моделей машинного навчання. Що стосується великих мовних моделей (LLM), MLflow пропонує надійний набір інструментів, які значно спрощують процес розробки, відстеження, оцінювання та розгортання цих моделей. Ось огляд того, як MLflow функціонує в просторі LLM, і переваги, які він надає інженерам і дослідникам даних.
Відстеження та управління взаємодіями LLM
Система відстеження LLM від MLflow є вдосконаленням існуючих можливостей відстеження, адаптованим до унікальних потреб LLM. Це дозволяє комплексно відстежувати взаємодію моделі, включаючи наступні ключові аспекти:
параметри: Реєстрація пар ключ-значення, які детально описують вхідні параметри для LLM, наприклад, специфічні для моделі параметри, як-от top_k та temperature. Це надає контекст і конфігурацію для кожного запуску, гарантуючи, що всі аспекти конфігурації моделі захоплено.
Метрика: кількісні показники, які дають змогу зрозуміти продуктивність і точність LLM. Вони можуть динамічно оновлюватися в міру виконання циклу, пропонуючи статистичні дані в режимі реального часу або після обробки.
Прогнози: захоплення вхідних даних, надісланих до LLM, і відповідних виходів, які зберігаються як артефакти в структурованому форматі для легкого пошуку та аналізу.
Артефакти: Крім передбачень, MLflow може зберігати різні вихідні файли, такі як візуалізації, серіалізовані моделі та файли структурованих даних, що дозволяє детально документувати та аналізувати продуктивність моделі.
Цей структурований підхід гарантує, що всі взаємодії з LLM ретельно записуються, забезпечуючи повне відстеження походження та якості для моделей, що генерують текст.
Оцінка LLM
Оцінка LLM представляє унікальні проблеми через їх генеративний характер і відсутність єдиної базової істини. MLflow спрощує це за допомогою спеціалізованих інструментів оцінювання, розроблених для магістрів права. Ключові особливості:
Універсальна оцінка моделі: підтримує оцінювання різних типів LLM, будь то модель pyfunc MLflow, URI, що вказує на зареєстровану модель MLflow, або будь-який виклик Python, який представляє вашу модель.
Комплексні показники: Пропонує низку показників, розроблених для оцінювання LLM, включаючи показники, що залежать від моделі SaaS (наприклад, релевантність відповіді), і показники на основі функцій (наприклад, ROUGE, Flesch Kincaid).
Попередньо визначені колекції показників: Залежно від варіанту використання, як-от відповіді на запитання чи резюмування тексту, MLflow надає попередньо визначені показники для спрощення процесу оцінювання.
Створення спеціального показника: дозволяє користувачам визначати та впроваджувати спеціальні показники відповідно до конкретних потреб оцінювання, підвищуючи гнучкість і глибину оцінювання моделі.
Оцінка за допомогою статичних наборів даних: дозволяє оцінювати статичні набори даних без визначення моделі, що корисно для швидкого оцінювання без повторного запуску моделі.
Розгортання та інтеграція
MLflow також підтримує плавне розгортання та інтеграцію LLM:
Сервер розгортання MLflow: Діє як уніфікований інтерфейс для взаємодії з кількома постачальниками LLM. Він спрощує інтеграцію, безпечно керує обліковими даними та пропонує стабільну роботу API. Цей сервер підтримує низку базових моделей від популярних постачальників SaaS, а також моделі, що розміщуються самостійно.
Уніфікована кінцева точка: полегшує перемикання між постачальниками без змін коду, мінімізуючи час простою та підвищуючи гнучкість.
Інтегрований перегляд результатів: надає комплексні результати оцінки, доступ до яких можна отримати безпосередньо в коді або через інтерфейс користувача MLflow для детального аналізу.
MLflow — це комплексний набір інструментів, а інтеграція робить його безцінним надбанням для інженерів і спеціалістів із обробки даних, які працюють із передовими моделями NLP.
Налаштування вашого середовища
Перш ніж ми зануримось у відстеження LLM за допомогою MLflow, давайте налаштуємо наше середовище розробки. Нам потрібно буде встановити MLflow і кілька інших ключових бібліотек:
Після встановлення радимо перезапустити середовище Python, щоб переконатися, що всі бібліотеки завантажено належним чином. У блокноті Jupyter ви можете використовувати:
Це підтвердить версії бібліотек ключів, які ми будемо використовувати.
Розуміння можливостей відстеження LLM MLflow
Система відстеження LLM від MLflow базується на існуючих можливостях відстеження, додаючи функції, спеціально розроблені для унікальних аспектів LLM. Давайте розберемо основні компоненти:
Запуски та експерименти
У MLflow «запуск» представляє одне виконання коду вашої моделі, а «експеримент» — це набір пов’язаних запусків. Для LLM запуск може представляти один запит або групу підказок, оброблених моделлю.
Ключові компоненти відстеження
параметри: це вхідні конфігурації для вашого LLM, такі як температура, top_k або max_tokens. Ви можете зареєструвати їх за допомогою mlflow.log_param() or mlflow.log_params().
Метрика: кількісні показники продуктивності вашого LLM, як-от точність, затримка або власні бали. використання mlflow.log_metric() or mlflow.log_metrics() щоб відстежити ці.
Прогнози: для магістрів права дуже важливо реєструвати як вхідні підказки, так і вихідні дані моделі. MLflow зберігає їх як артефакти у форматі CSV за допомогою mlflow.log_table().
Артефакти: будь-які додаткові файли або дані, пов’язані з вашим прогоном 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:
Цей код налаштовує кінцеву точку для моделі 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(), ваша модель має мати одну з таких форм:
An mlflow.pyfunc.PyFuncModel екземпляр або URI, що вказує на зареєстровану модель MLflow.
Функція Python, яка приймає вхідні дані та виводить один рядок.
URI кінцевої точки розгортання MLflow.
Установка 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 для візуалізації результатів:
Запустіть інтерфейс користувача MLflow: mlflow ui
Відкрийте веб-браузер і перейдіть до http://localhost:5000
Виберіть свій експеримент і запуски, щоб переглянути показники, параметри та артефакти
Спеціальні візуалізації
Ви можете створювати власні візуалізації результатів оцінювання за допомогою бібліотек, як-от 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, розміщений на Збір даних, надає основні функції MLflow із відкритим вихідним кодом, але з додатковими перевагами, такими як повна інтеграція з екосистемою Databricks, розширені функції безпеки та керована інфраструктура. Це робить його чудовим вибором для організацій, яким потрібна надійна безпека та масштабованість.
Лазурне машинне навчання
Лазурне машинне навчання пропонує наскрізне рішення машинного навчання на хмарній платформі Microsoft Azure. Він забезпечує сумісність із компонентами MLflow, такими як реєстр моделі та засіб відстеження експериментів, хоча й не базується на MLflow.
Виділені платформи ML
Кілька компаній пропонують керовані продукти ML із різноманітними функціями:
neptune.ai: фокусується на відстеженні експерименту та управлінні моделлю.
Вага та упередження: Пропонує розширене відстеження експериментів, версії набору даних і інструменти для співпраці.
Комета ML: Забезпечує відстеження експерименту, моніторинг виробництва моделі та реєстрацію даних.
Валохай: спеціалізується на конвеєрах машинного навчання та аранжуванні.
Метапотік
Метапотік, розроблений Netflix, є фреймворком з відкритим кодом, призначеним для організації робочих процесів даних і конвеєрів машинного навчання. Незважаючи на те, що він відмінно справляється з керуванням великомасштабними розгортаннями, йому не вистачає комплексного відстеження експериментів і функцій керування моделлю порівняно з MLflow.
Amazon SageMaker і Vertex AI від Google
обидві Amazon SageMaker та Vertex AI від Google надавати наскрізні рішення MLOps, інтегровані у відповідні хмарні платформи. Ці служби пропонують надійні інструменти для створення, навчання та розгортання моделей машинного навчання в масштабі.
Детальне порівняння
Керований MLflow проти відкритого MLflow
Керований MLflow від Databricks пропонує кілька переваг перед версією з відкритим кодом, зокрема:
Налаштування та розгортання: Повна інтеграція з Databricks скорочує час і зусилля на налаштування.
масштабованість: Здатність легко справлятися з великими навантаженнями машинного навчання.
Безпека та управління: готові функції безпеки, такі як керування доступом на основі ролей (RBAC) і шифрування даних.
інтеграцією: глибока інтеграція зі службами Databricks, покращуючи взаємодію та функціональність.
Зберігання та резервне копіювання даних: стратегії автоматичного резервного копіювання забезпечують безпеку та надійність даних.
Коштувати: користувачі платять за платформу, сховище та обчислювальні ресурси.
Підтримка і обслуговування: Спеціальна підтримка та технічне обслуговування надаються Databricks.
Висновок
Відстеження великих мовних моделей за допомогою MLflow забезпечує надійну структуру для управління складнощами розробки, оцінювання та розгортання LLM. Дотримуючись найкращих практик і використовуючи розширені функції, описані в цьому посібнику, ви можете створювати більш організовані, відтворювані та проникливі експерименти LLM.
Пам’ятайте, що сфера магістерських програм швидко розвивається, і постійно з’являються нові методи оцінювання та відстеження. Будьте в курсі останніх випусків MLflow і LLM-досліджень, щоб постійно вдосконалювати процеси відстеження й оцінювання.
Застосовуючи ці методи у своїх проектах, ви глибше зрозумієте поведінку та продуктивність своїх магістрів права, що призведе до більш ефективних і надійних мовних моделей.
Останні п’ять років я провів, занурюючись у захоплюючий світ машинного та глибокого навчання. Моя пристрасть і досвід допомогли мені внести свій внесок у понад 50 різноманітних проектів розробки програмного забезпечення, зосередивши особливу увагу на ШІ/ML. Моя постійна цікавість також привела мене до обробки природної мови, галузі, яку я хочу досліджувати далі.