Connect with us

تتبع نماذج اللغة الكبيرة مع MLflow: دليل كامل

أدوات الذكاء الاصطناعي 101

تتبع نماذج اللغة الكبيرة مع MLflow: دليل كامل

mm
MLflow LLM Guide Evaluation

随着大型语言模型(LLM)的复杂性和规模的增长,跟踪其性能、实验和部署变得越来越具有挑战性。这就是MLflow的用途——提供一个全面的平台来管理机器学习模型的整个生命周期,包括LLM。

在本深入指南中,我们将探讨如何利用MLflow来跟踪、评估和部署LLM。我们将涵盖从设置环境到高级评估技术的一切内容,并在此过程中提供大量代码示例和最佳实践。

MLflow在大型语言模型(LLM)中的功能

MLflow已成为机器学习和数据科学社区中的一个关键工具,尤其是在管理机器学习模型的生命周期方面。当谈到大型语言模型(LLM)时,MLflow提供了一套强大的工具,可以显著简化开发、跟踪、评估和部署这些模型的过程。以下是MLflow在LLM领域中功能的概述以及它为工程师和数据科学家带来的好处。

了解MLflow的核心组件

跟踪和管理LLM交互

MLflow的LLM跟踪系统是其现有跟踪功能的增强,专门针对LLM的独特需求。它允许对模型交互进行全面跟踪,包括以下关键方面:

  • 参数: 记录输入参数的键值对,例如模型特定的参数,如top_ktemperature。这为每次运行提供了上下文和配置,确保捕获模型配置的所有方面。
  • 指标: 提供LLM性能和准确性的见解的量化措施。这些可以动态更新,因为运行正在进行,提供实时或后处理见解。
  • 预测: 捕获输入到LLM和相应输出,这些输出以结构化格式存储为工件,以便于检索和分析。
  • 工件: 除了预测之外,MLflow还可以存储各种输出文件,例如可视化、序列化模型和结构化数据文件,允许对模型性能进行详细的文档记录和分析。

这种结构化方法确保所有LLM交互都被精心记录,提供了文本生成模型的全面血统和质量跟踪。

LLM评估

评估LLM具有独特的挑战,主要是由于其生成性质和缺乏单一的真实值。MLflow通过为LLM设计的专用评估工具简化了这一过程。关键功能包括:

  • 多功能模型评估: 支持评估各种类型的LLM,无论是MLflow pyfunc模型、指向注册的MLflow模型的URI,还是代表您的模型的任何Python可调用对象。
  • 全面指标: 提供一系列专门为LLM评估设计的指标,包括基于SaaS的模型依赖指标(例如答案相关性)和基于函数的指标(例如ROUGE、Flesch Kincaid)。
  • 预定义指标集合: 根据用例(例如问答或文本摘要),MLflow提供预定义指标以简化评估过程。
  • 自定义指标创建: 允许用户定义和实现自定义指标以满足特定的评估需求,增强模型评估的灵活性和深度。
  • 静态数据集评估: 允许在不指定模型的情况下评估静态数据集,这对于不需要重新运行模型推理的快速评估很有用。

部署和集成

MLflow还支持LLM的无缝部署和集成:

  • MLflow部署服务器: 作为与多个LLM提供商交互的统一接口。它简化了集成,安全地管理凭据,并提供一致的API体验。该服务器支持来自流行的SaaS供应商的基础模型以及自托管模型。
  • 统一端点: 使得在无需更改代码的情况下轻松切换提供商,最大限度地减少停机时间并增强灵活性。
  • 集成结果视图: 提供全面评估结果,可以直接在代码中访问或通过MLflow UI进行详细分析。

MLflow的综合工具和集成使其成为与高级NLP模型合作的工程师和数据科学家的宝贵资产。

设置环境

在我们深入探讨使用MLflow跟踪LLM之前,让我们设置我们的开发环境。我们需要安装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版本:{mlflow.__version__}")
print(f"ChromaDB版本:{chromadb.__version__}")

这将确认我们将要使用的关键库的版本。

了解MLflow的LLM跟踪功能

MLflow的LLM跟踪系统建立在其现有的跟踪功能之上,添加了专门为LLM的独特方面设计的功能。让我们分解关键组件:

运行和实验

在MLflow中,一个“运行”代表一次执行模型代码,而一个“实验”是相关运行的集合。对于LLM,一个运行可能代表一个单独的查询或一批由模型处理的提示。

关键跟踪组件

  1. 参数: 这些是LLM的输入配置,例如温度、top_k或max_tokens。您可以使用mlflow.log_param()mlflow.log_params()记录这些。
  2. 指标: LLM性能的量化措施,例如准确性、延迟或自定义评分。使用mlflow.log_metric()mlflow.log_metrics()来跟踪这些。
  3. 预测: 对于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 = "用简单的术语解释机器学习的概念。"

# 记录参数
mlflow.log_param("model", "text-davinci-002")
mlflow.log_param("max_tokens", 100)

# 查询LLM并记录结果
result = query_llm(prompt)
mlflow.log_metric("response_length", len(result))

# 记录提示和响应
mlflow.log_table("prompt_responses", {"prompt": [prompt], "response": [result]})

print(f"响应:{result}")

使用MLflow部署LLM

MLflow提供了强大的功能来部署LLM,使得在生产环境中提供服务变得更加容易。让我们探索如何使用MLflow的部署功能来部署LLM。

创建端点

首先,我们将使用MLflow的部署客户端创建LLM的端点:

import mlflow
from mlflow.deployments import get_deploy_client

# 初始化部署客户端
client = get_deploy_client("databricks")

# 定义端点配置
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",
},
},
}],
}

# 创建端点
client.create_endpoint(name=endpoint_name, config=endpoint_config)

此代码使用Azure OpenAI设置GPT-3.5-turbo模型的端点。请注意使用Databricks机密进行安全的API密钥管理。

测试端点

创建端点后,我们可以测试它:


response = client.predict(
endpoint=endpoint_name,
inputs={"prompt": "简要解释神经网络的概念。", "max_tokens": 100,},)

print(response)

这将向我们的已部署模型发送提示并返回生成的响应。

使用MLflow评估LLM

评估是了解LLM性能和行为的关键。MLflow提供了全面的工具用于评估LLM,包括内置和自定义指标。

准备LLM进行评估

要使用mlflow.evaluate()评估您的LLM,您的模型需要处于以下形式之一:

  1. 一个mlflow.pyfunc.PyFuncModel实例或指向已记录的MLflow模型的URI。
  2. 一个接受字符串输入并输出单个字符串的Python函数。
  3. 一个MLflow Deployments端点URI。
  4. 设置model=None并在评估数据中包含模型输出。

让我们看一个使用已记录的MLflow模型的示例:

import mlflow
import openai

with mlflow.start_run():
system_prompt = "简洁地回答以下问题。"
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}"},
],
)

# 准备评估数据
eval_data = pd.DataFrame({
"question": ["什么是机器学习?", "解释神经网络。"],
"ground_truth": [
"机器学习是人工智能的一个子集,能够让系统从经验中学习和改进,而无需显式编程。",
"神经网络是受生物神经网络启发的计算系统,由处理和传输信息的相互连接的节点组成。",
]
})

# 评估模型
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
)

print(f"评估指标:{results.metrics}")

此示例记录OpenAI模型,准备评估数据,然后使用MLflow的内置指标评估模型,用于问答任务。

自定义评估指标

MLflow允许您定义自定义指标来评估LLM。以下是创建自定义指标的示例,以评估响应的专业性:

from mlflow.metrics.genai import EvaluationExample, make_genai_metric

professionalism = make_genai_metric(
name="professionalism",
definition="正式和适当的沟通风格的衡量标准。",
grading_prompt=(
"根据答案的正式和专业程度进行评分(0-4):\n"
"0:极其随意或不适当\n"
"1:随意但尊重\n"
"2:中度正式\n"
"3:专业和适当\n"
"4:高度正式和专家级别"
),
examples=[
EvaluationExample(
input="什么是MLflow?",
output="MLflow就像您友好的邻居工具包,用于管理ML项目。它非常酷!",
score=1,
justification="答案随意,使用非正式语言。",
),
EvaluationExample(
input="什么是MLflow?",
output="MLflow是一个开源平台,用于机器学习生命周期,包括实验、可复制性和部署。",
score=4,
justification="答案正式、简洁、专业。",
)
],
model="openai:/gpt-3.5-turbo-16k",
parameters={"temperature": 0.0},
aggregations=["mean", "variance"],
greater_is_better=True,
)

# 使用自定义指标进行评估
results = mlflow.evaluate(
logged_model_info.model_uri,
eval_data,
targets="ground_truth",
model_type="question-answering",
extra_metrics=[professionalism]
)

print(f"专业性评分:{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

# 加载和预处理文档
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)

# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)

# 创建RAG链
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type=”stuff”,
retriever=vectorstore.as_retriever(),
return_source_documents=True
)

# 评估函数
def evaluate_rag(question):
result = qa_chain({“query”: question})
return result[“result”], [doc.page_content for doc in result[“source_documents”]]

# 准备评估数据
eval_questions = [
“什么是MLflow?”,
“MLflow如何处理实验跟踪?”,
“MLflow的主要组件是什么?”,
]

# 使用MLflow评估
with mlflow.start_run():

لقد قمت بإنفاق الخمس سنوات الماضية في غمرة العالم المثير للاهتمام من تعلم الآلة والتعلم العميق. وقد أدت شغفي وخبرتي إلى المساهمة في أكثر من 50 مشروعًا للهندسة البرمجية متنوعًا، مع التركيز بشكل خاص على الذكاء الاصطناعي / تعلم الآلة. كما أدت فضولي المستمر إلى جذبي نحو معالجة اللغة الطبيعية، وهو مجال أنا حريص على استكشافه بشكل أكبر.