VisualDL
VisualDL 是百度飞桨(PaddlePaddle)生态中一款功能强大的深度学习可视化工具,旨在帮助开发者“看见”模型训练的内部细节。在深度学习过程中,黑盒般的训练流程往往让人难以定位问题,VisualDL 通过丰富的图表直观展示参数变化趋势、模型结构、数据样本、张量分布直方图、PR/ROC 曲线以及高维数据投影等关键信息,让复杂的训练过程和模型架构变得清晰易懂,从而帮助用户高效优化模型。
这款工具特别适合人工智能开发者、算法研究人员及深度学习爱好者使用。其核心亮点在于极简的接入方式:用户只需在训练代码中插入几行 Python 指令,即可实时记录并可视化实验数据。VisualDL 不仅原生支持飞桨框架,还具备高度的兼容性,能够解析 Paddle、ONNX、Caffe 等多种主流模型结构。此外,它提供了一键启动模型结构可视化的便捷功能,并支持通过 VDL.service 轻松保存与分享实验结果。无论是调试网络结构、监控超参数影响,还是分析数据分布,VisualDL 都能以低门槛、高效率的方式,成为你探索深度学习奥秘的得力助手。
使用场景
某计算机视觉算法团队正在基于飞桨框架训练一个复杂的图像分类模型,急需监控训练动态并调优超参数。
没有 VisualDL 时
- 开发者只能依赖控制台打印的稀疏日志,无法直观看到损失函数和准确率在每一个 step 的细微波动,难以判断模型是否陷入局部最优。
- 排查梯度消失或爆炸问题时,缺乏张量分布直方图,只能靠猜测调整学习率,导致反复试错,耗时数天。
- 想要分析模型为何对特定类别识别错误时,无法直接查看训练集中被误判的原始图片样本,数据与结果割裂。
- 对比不同超参数组合的实验效果时,需手动整理多份日志文件生成报表,效率低下且容易出错。
使用 VisualDL 后
- 通过实时标量图表,团队成员能清晰看到训练曲线平滑下降,立即发现过拟合趋势并及时引入正则化策略。
- 利用张量直方图功能,直观观测到各层权重分布变化,迅速定位到异常层并将学习率下调,将调试时间从几天缩短至几小时。
- 直接在“数据样本”组件中浏览带预测标签的图片,快速发现数据标注噪声,针对性清洗数据后模型精度提升 2%。
- 借助超参数分析面板,自动关联不同实验的配置与最终指标,一键选出最优参数组合,无需人工比对。
VisualDL 将黑盒般的训练过程转化为可视化的决策依据,让深度学习模型的迭代优化变得透明、高效且可控。
运行环境要求
- 未说明
未说明
未说明

快速开始
简介
VisualDL是飞桨的可视化分析工具,提供多种图表来展示参数变化趋势,并支持模型结构、数据样本、张量直方图、PR曲线、ROC曲线以及高维数据分布的可视化。它帮助用户更清晰直观地理解训练过程和模型结构,从而高效优化模型。
VisualDL提供了丰富的可视化功能,包括 实时跟踪指标、可视化模型结构、展示数据样本、可视化超参数与模型指标的关系、呈现张量分布的变化、绘制PR曲线、将高维数据投影到低维空间等。此外,VisualDL还提供了VDL.service服务,方便开发者轻松保存、追踪和分享实验的可视化结果。关于各功能的具体使用指南,请参阅 VisualDL 用户指南。如需最新体验,欢迎试用我们的 在线演示。目前,VisualDL正在快速迭代,将持续新增更多功能。
VisualDL支持的浏览器包括:
- Google Chrome ≥ 79
- Firefox ≥ 67
- Microsoft Edge ≥ 79
- Safari ≥ 11.1
VisualDL原生支持Python语言。开发者只需在训练前向模型代码中添加几行Python代码,即可获取丰富的可视化结果。
目录
核心亮点
易于使用
API设计简洁易用,仅需一次点击即可启动模型结构的可视化。
功能多样
涵盖训练参数、数据样本、网络结构、张量直方图、PR曲线及高维数据分布等多种可视化功能。
高兼容性
VisualDL支持主流模型架构的可视化,如Paddle、ONNX、Caffe等,广泛适用于不同用户群体的视觉分析需求。
全面支持
通过与飞桨及相关模块深度集成,VisualDL确保开发者能够无缝使用各类组件,在飞桨生态中获得最佳体验。
安装
使用 pip 安装
python -m pip install visualdl -i https://mirror.baidu.com/pypi/simple
使用源码安装
git clone https://github.com/PaddlePaddle/VisualDL.git
cd VisualDL
python setup.py bdist_wheel
pip install --upgrade dist/visualdl-*.whl
请注意,自2020年1月1日起,Python 2 已停止官方维护。为保证代码可用性,VisualDL目前仅支持 Python 3。
使用指南
VisualDL会将训练过程中的数据、参数等信息存储在一个日志文件中。用户可以通过启动面板来查看可视化结果。
1. 日志
VisualDL后端提供了Python SDK,可通过LogWriter自定义日志记录器。接口说明如下:
class LogWriter(logdir=None,
max_queue=10,
flush_secs=120,
filename_suffix='',
**kwargs)
接口参数
| 参数 | 类型 | 含义 |
|---|---|---|
| logdir | 字符串 | 日志文件的存储路径。VisualDL会在该路径下创建日志文件,用于记录训练过程中产生的信息。若未指定,则默认路径为 runs/${CURRENT_TIME}。 |
| max_queue | 整数 | 在写入日志文件之前,允许缓存的最大数据条目数量。默认值为10。当达到此限制时,数据会立即写入日志文件。 |
| flush_secs | 整数 | 数据在写入日志文件之前的最长缓存时间。默认值为120秒。当达到此时间时,数据会立即写入日志文件。(当日志消息队列达到最大缓存时间或最大容量时,也会立即写入日志文件) |
| filename_suffix | 字符串 | 为默认的日志文件名添加后缀。 |
| display_name | 字符串 | 此参数会显示在面板的“选择数据流”位置。若未设置,则默认名称为logdir。(当logdir过长或需要隐藏时适用)。 |
| file_name | 字符串 | 设置日志文件的名称。如果文件名已存在,新设置的文件名将在同一日志文件中继续记录,不会创建新文件。注意,文件名应包含“vdlrecords”。 |
示例
创建日志文件并记录标量值:
from visualdl import LogWriter
# 在 `./log/scalar_test/train` 下创建日志文件
with LogWriter(logdir="./log/scalar_test/train") as writer:
# 使用 `add_scalar` 记录标量值
writer.add_scalar(tag="acc", step=1, value=0.5678)
writer.add_scalar(tag="acc", step=2, value=0.6878)
writer.add_scalar(tag="acc", step=3, value=0.9878)
# 你也可以不使用上下文管理器 `with`,而采用如下方式:
"""
writer = LogWriter(logdir="./log/scalar_test/train")
writer.add_scalar(tag="acc", step=1, value=0.5678)
writer.add_scalar(tag="acc", step=2, value=0.6878)
writer.add_scalar(tag="acc", step=3, value=0.9878)
writer.close()
"""
2. 启动面板
在上述示例中,日志记录了三组标量值。开发者可以通过启动 visualDL 面板来查看日志文件的可视化结果。有两种方式可以启动日志文件:
命令行启动
使用命令行启动 visualDL 面板:
visualdl --logdir <dir_1, dir_2, ... , dir_n> --model <model_file> --host <host> --port <port> --cache-timeout <cache_timeout> --language <language> --public-path <public_path> --api-only --component_tabs <tab_name1, tab_name2, ...>
参数说明:
| 参数 | 含义 |
|---|---|
| --logdir | 设置一个或多个日志目录。路径或子目录中的所有日志都会独立显示在 visualDL Board 上。 |
| --model | 设置模型文件的路径(不是目录)。visualDL 会在 Graph 页面中可视化该模型文件。支持 PaddlePaddle、ONNX、Keras、Core ML、Caffe 等多种模型格式。请参考 Graph - 功能说明。 |
| --host | 指定 IP 地址。默认值为 127.0.0.1。若设置为 0.0.0.0 或公网 IP 地址,则其他机器也可以访问 visualDL Board。 |
| --port | 设置端口。默认值为 8040。 |
| --cache-timeout | 后端缓存时间。在此期间,前端多次请求同一 URL 时,返回的数据将来自缓存。默认缓存时间为 20 秒。 |
| --language | visualDL 面板的语言。可指定为 'en' 或 'zh',默认为浏览器使用的语言。 |
| --public-path | visualDL 面板的 URL 路径。默认路径为 '/app',即访问地址为 'http:// |
| --api-only | 决定是否仅提供 API。若设置此参数,visualDL 将仅提供 API 服务,而不显示网页,API 地址为 'http:// |
| --component_tabs | 决定页面上展示哪些组件,目前支持 15 种组件,即 'scalar'、'image'、'text'、'embeddings'、'audio'、'histogram'、'hyper_parameters'、'static_graph'、'dynamic_graph'、'pr_curve'、'roc_curve'、'profiler'、'x2paddle'、'fastdeploy_server'、'fastdeploy_client'。若设置此参数,则仅展示指定的组件。若未设置,但指定了 --logdir 参数,则仅展示 vdlrecords 日志中包含数据的组件。若既未设置 --component_tabs,也未设置 --logdir,则默认仅展示 'static_graph'、'x2paddle'、'fastdeploy_server'、'fastdeploy_client' 组件 |
要可视化上一步生成的日志文件,开发者可以通过以下命令启动面板:
visualdl --logdir ./log
在 Python 脚本中启动
开发者可以在 Python 脚本中启动 visualDL 面板,方法如下:
visualdl.server.app.run(logdir,
model="path/to/model",
host="127.0.0.1",
port=8080,
cache_timeout=20,
language=None,
public_path=None,
api_only=False,
open_browser=False)
请注意:由于除 logdir 外其他参数均为可选,因此在使用时应明确指定参数名称。
接口参数如下:
| 参数 | 类型 | 含义 |
|---|---|---|
| logdir | 字符串或列表[字符串_1, 字符串_2, ... , 字符串_n] | 设置一个或多个日志目录。路径或子目录中的所有日志都将独立地显示在 VisualDL Board 上。 |
| model | 字符串 | 设置模型文件的路径(不是目录)。VisualDL 会在 Graph 页面中可视化该模型文件。 |
| host | 字符串 | 指定 IP 地址。默认值为 127.0.0.1。将其指定为 0.0.0.0 或公网 IP 地址,以便其他机器可以访问 VisualDL Board。 |
| port | 整数 | 设置端口。默认值为 8040。 |
| cache_timeout | 整数 | 后端缓存时间。在缓存时间内,前端多次请求同一 URL 时,返回的数据将来自缓存。默认缓存时间为 20 秒。 |
| language | 字符串 | VisualDL 面板的语言。语言可设置为 'en' 或 'zh',默认为浏览器使用的语言。 |
| public_path | 字符串 | VisualDL 面板的 URL 路径。默认路径为 '/app',即访问地址为 'http:// |
| api_only | 布尔值 | 决定是否仅提供 API。如果设置了此参数,VisualDL 将仅提供 API 服务,而不显示网页,API 地址为 'http:// |
| open_browser | 布尔值 | 是否打开浏览器。如果将此参数设置为 True,浏览器将自动打开,同时启动 VisualDL 面板。如果指定了 api_only 参数为 True,则可以忽略 open_browser 参数。 |
| component_tabs | 字符串或列表[字符串_1, 字符串_2, ... , 字符串_n] | 决定页面上展示哪些组件,目前支持 15 个组件,即 'scalar', 'image', 'text', 'embeddings', 'audio', 'histogram', 'hyper_parameters', 'static_graph', 'dynamic_graph', 'pr_curve', 'roc_curve', 'profiler', 'x2paddle', 'fastdeploy_server', 'fastdeploy_client'。如果设置了此参数,则仅展示指定的组件。如果没有设置,但指定了 --logdir 参数,则仅展示 vdlrecords 日志中有数据的组件。如果既没有设置 --component_tabs,也没有设置 --logdir,则默认仅展示 'static_graph', 'x2paddle', 'fastdeploy_server', 'fastdeploy_client' 组件。 |
要可视化上一步生成的日志文件,开发者可以通过以下命令启动面板:
from visualdl.server import app
app.run(logdir="./log")
通过上述方法之一启动面板后,开发者可以在浏览器中看到如下所示的可视化结果:
3. 使用 LogReader 读取日志文件中的数据
VisualDL 还提供了 LogReader 接口,用于从日志文件中读取任何数据。
class LogReader(file_path='')
接口参数
| 参数 | 类型 | 含义 |
|---|---|---|
| file_path | 字符串 | 日志文件的路径。必填。 |
示例
如果在 ./log 目录下有一个名为 vdlrecords.1605533348.log 的日志文件,我们可以通过以下方式获取标量中 'loss' 标签下的数据:
from visualdl import LogReader
reader = LogReader(file_path='./vdlrecords.1605533348.log')
data = reader.get_data('scalar', 'loss')
print(data)
结果将是一个如下所示的列表:
...
id: 5
tag: "Metrics/Training(Step): loss"
timestamp: 1605533356039
value: 3.1297709941864014
...
有关 LogReader 的更多信息,请参阅 LogReader。
功能预览
标量
标量利用各种图表来展示训练过程中参数的变化情况,例如准确率、损失和学习率等。在这种情况下,开发者不仅可以观察单个参数的变化,还可以同时观察多组参数的变化,从而更好地理解训练过程并加快模型调优的速度。
动态显示
启动 VisualDL Board 后,LogReader 会持续记录数据并在前端显示。因此,参数的变化可以实时可视化,如下所示:
多实验对比
开发者可以通过同时指定并上传每个实验的路径,将相同的参数在同一张图中进行可视化,从而实现多实验的对比。
图像
图像在训练过程中提供图像数据的实时可视化,使开发者能够观察不同训练阶段图像的变化,并深入理解训练过程的效果。
音频
音频旨在让开发者在训练过程中实时收听音频数据,帮助开发者监控语音识别和文本转语音的过程。
文本
文本可视化 NLP 模型在任意阶段的文本输出,帮助开发者比较不同阶段的输出变化,从而深入理解训练过程并简单评估模型性能。
图形
图形 功能使开发者只需点击一下即可可视化模型结构。此外,图形 还允许开发者探索模型属性、节点信息以及节点的输入和输出,从而帮助他们快速分析模型结构并轻松理解数据流的方向。另外,图形功能分别支持动态图和静态图的可视化。
- 动态图
- 静态图
直方图
直方图 以直方图的形式展示张量(权重、偏置、梯度等)在训练过程中的变化趋势。开发者可以通过深入理解每一层的影响,从而更准确地调整模型结构。
- 偏移模式
- 叠加模式
PR 曲线
PR 曲线 展示不同阈值下的精确率和召回率值,帮助开发者高效地找到最佳阈值。
ROC 曲线
ROC 曲线 显示分类模型在所有分类阈值下的性能;曲线下面积越大,模型性能越好,这有助于开发者评估模型性能并选择合适的阈值。
高维数据
高维数据 提供三种降维方法——T-SNE、PCA 和 UMAP——使开发者能够深入分析高维数据之间的关系,并基于这些分析优化算法。
超参数
超参数 以丰富的视图可视化超参数与模型指标(如准确率和损失)之间的关系,帮助您高效地识别最佳超参数。
性能分析
性能分析(Profiler)可视化程序运行期间收集的剖析数据,帮助您识别程序瓶颈并优化性能。请参阅 VisualDL Profiler 指南。
性能分析
性能分析(Profiler)可视化程序运行期间收集的剖析数据,帮助您识别程序瓶颈并优化性能。请参阅 VisualDL Profiler 指南。
X2Paddle
X2Paddle 组件提供 ONNX 模型格式可视化及转换为 Paddle 格式的功能。
FastDeployServer
FastDeployServer 组件提供加载和编辑模型仓库、管理与监控 FastDeployServer 服务的功能,并提供客户端用于测试服务。请参阅 使用 VisualDL 进行 FastDeploy 服务部署可视化。
FastDeployClient
FastDeployClient 组件主要用于快速访问 FastDeployServer 服务,帮助用户可视化预测请求和结果。请参阅 使用 VisualDL 作为 FastDeploy 客户端进行请求可视化。
VDL.service
VDL.service 使开发者能够轻松保存、跟踪和免费与任何人分享可视化结果。
常见问题解答
如果您在使用 VisualDL 时遇到一些问题,请参阅 我们的常见问题解答。
贡献
VisualDL 的图形功能由 Netron 提供支持,是一个由 PaddlePaddle 和 ECharts 支持的开源项目。我们热烈欢迎开发者使用、评论和贡献。
更多详情
有关 VisualDL 使用的更多详细信息,请参阅 VisualDL 用户指南、VisualDL Profiler 指南、使用 VisualDL 进行 FastDeploy 服务部署可视化以及使用 VisualDL 作为 FastDeploy 客户端进行请求可视化。
技术交流
欢迎加入官方 QQ 群 1045783368,与 PaddlePaddle 团队及其他开发者交流。
版本历史
v3.0.0-beta2024/10/30v2.5.02023/01/17v2.4.22022/12/26v2.4.12022/09/16v2.4.02022/08/23v2.3.02022/08/23v2.2.12021/09/06v2.2.02021/05/24v2.1.12021/02/01v2.1.02020/12/29v2.0.52020/11/26v2.0.42020/09/21v2.0.32020/09/14v2.0.12020/08/19v2.0.02020/08/12v2.0.0-beta.82020/07/21v2.0.0-beta.72020/06/28常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备