我们很高兴宣布发布 MLflow 2.18.0!此版本包含多项重要功能、增强功能和错误修复。
Python 版本更新
Python 3.8 已达到生命周期终点。随着官方停止对该旧版本的支持,MLflow 现在要求 Python 3.9 作为最低支持版本。
注意:如果您目前使用 MLflow 的
ChatModel
接口编写自定义 GenAI 应用程序,请确保您已阅读下面的未来重大变更部分。
主要新功能
-
🦺 Fluent API 线程/进程安全 - MLflow 用于跟踪和模型注册表的 fluent API 已进行全面改进,以支持线程和多进程安全。您现在不再被强制使用 Client API 从多进程和多线程应用程序中管理实验、运行和日志记录。(#13456、#13419、@WeichenXu123)
-
🧩 DSPy flavor - MLflow 现在支持记录、加载和追踪 DSPy 模型,扩展了 MLflow 对高级 GenAI 创作的支持。查阅MLflow DSPy Flavor 文档即可开始使用!(#13131、#13279、#13369、#13345、@chenmoneygithub、#13543、#13800、#13807、@B-Step62、#13289、@michael-berk)
-
🖥️ 增强的追踪 UI - MLflow Tracing 的 UI 经过了重大改进,提升了审计和调查 GenAI 追踪内容的可用性和便捷性,包括使用 markdown 增强 span 内容渲染以及标准化的 span 组件结构。(#13685、#13357、#13242、@daniellok-db)
-
🚄 新的追踪集成 - MLflow Tracing 现在支持 DSPy、LiteLLM 和 Google Gemini,实现了单行代码、全自动的追踪体验。这些集成在更广泛的行业工具中解锁了增强的可观察性。敬请关注即将到来的集成和更新!(#13801、@TomeHirata、#13585、@B-Step62)
-
📊 扩展的 LLM-as-a-Judge 支持 - MLflow 现在通过支持更多提供商(包括
Anthropic
、Bedrock
、Mistral
和TogetherAI
)增强了其评估能力,这些提供商加入了 OpenAI 等现有提供商。用户现在还可以通过使用新的proxy_url
和extra_headers
选项来配置遵循提供商 API 规范的代理端点或自托管 LLMs。请访问LLM-as-a-Judge 文档了解更多详情!(#13715、#13717、@B-Step62) -
⏰ 环境变量检测 - 作为部署模型时的有用提醒,MLflow 现在会检测并提醒用户在模型日志记录期间设置的环境变量,确保它们已配置好以便部署。此外,
mlflow.models.predict
工具也已更新,在服务模拟中包含这些变量,从而改进了部署前验证。(#13584、@serena-ruan)
ChatModel 接口的重大变更
-
ChatModel 接口更新 - 作为 MLflow 内部以及依赖或深度集成 MLflow GenAI 功能的服务之间更广泛统一工作的一部分,我们正在采取分阶段的方法来为自定义 GenAI 应用程序开发和使用建立一致的标准接口。在第一阶段(计划在 MLflow 的未来几个版本中发布),我们将标记几个接口为已弃用,因为它们将会发生变化。这些变更将是:
- 接口重命名:
ChatRequest
→ChatCompletionRequest
,以便为未来计划的请求接口提供消歧。ChatResponse
→ChatCompletionResponse
,原因与输入接口相同。ChatRequest
和ChatResponse
中的metadata
字段 → 分别更改为custom_inputs
和custom_outputs
。
- 流式处理更新:
predict_stream
将被更新,以实现自定义 GenAI 应用程序的真正流式处理。目前,它返回一个包含 predict 同步输出的生成器。在未来的版本中,它将返回一个ChatCompletionChunks
的生成器,从而实现异步流式处理。虽然 API 调用结构将保持不变,但返回的数据负载将显著改变,与 LangChain 的实现保持一致。
- 旧版数据类弃用:
mlflow.models.rag_signatures
中的数据类将被弃用,并合并到统一的ChatCompletionRequest
、ChatCompletionResponse
和ChatCompletionChunks
中。
- 接口重命名:
其他功能
以下是更新后的部分,包含每个 PR ID 和作者的链接
markdown 复制代码 其他功能
- [评估] 在 MLflow Evaluate 中添加 Huggingface BLEU 指标 (#12799, @nebrass)
- [模型 / Databricks] 添加对在 Databricks Serverless runtime、Databricks Connect 和预构建 Python 环境上运行
spark_udf
的支持 (#13276, #13496, @WeichenXu123) - [评分] 为
pyfunc.spark_udf
添加model_config
参数,用于自定义批量推理负载提交 (#13517, @WeichenXu123) - [追踪] 将 retriever span 输出标准化为 MLflow
Document
列表 (#13242, @daniellok-db) - [UI] 在 MLflow UI 中添加对可视化和比较嵌套参数的支持 (#13012, @jescalada)
- [UI] 在 MLflow UI 的“比较运行”页面中添加对比较记录的 artifact 的支持 (#13145, @jescalada)
- [Databricks] 添加对
LangChain
模型日志记录中resources
定义的支持 (#13315, @sunishsheth2009) - [Databricks] 添加对 Agent 定义中在
dependencies
内定义多个 retriever 的支持 (#13246, @sunishsheth2009)
错误修复
- [数据库] 删除实验时级联删除数据集,以修复 MLflow 的
gc
命令在删除包含日志数据集的实验时存在的错误 (#13741, @daniellok-db) - [模型] 修复
LangChain
的pyfunc
predict 输入转换错误 (#13652, @serena-ruan) - [模型] 修复定义模型签名的子类和
Optional
数据类的签名推断问题 (#13440, @bbqiu) - [跟踪] 修复异步日志记录批量分割验证规则问题 (#13722, @WeichenXu123)
- [跟踪] 修复
LangChain
的自动日志记录线程安全行为问题 (#13672, @B-Step62) - [跟踪] 由于 Spark 的限制,禁用在线程池中运行 Spark 自动日志记录的支持 (#13599, @WeichenXu123)
- [跟踪] 将聊天 schema 中的
role
和index
标记为必需字段 (#13279, @chenmoneygithub) - [追踪] 在 OpenAI 自动日志记录中处理原始响应 (#13802, @harupy)
- [追踪] 修复在
LangChain
模型上使用多线程运行推理时追踪源运行行为的错误 (#13610, @WeichenXu123)
文档更新
- [文档] 为即将到来的 ChatModel 变更添加 docstring 警告 (#13730, @stevenchen-db)
- [文档] 添加实现追踪集成的贡献者指南 (#13333, @B-Step62)
- [文档] 添加关于将模型记录为代码时使用
model_config
的指导 (#13631, @sunishsheth2009) - [文档] 添加关于将自定义库 artifact 与
code_paths
模型日志记录功能一起使用的文档 (#13702, @TomeHirata) - [文档] 改进
SparkML
log_model
文档,提供关于如何从分类模型返回概率的指导 (#13684, @WeichenXu123)
有关完整的变更列表,请参阅发布变更日志,并在mlflow.org上查看最新文档。