|
| 1 | +# VisualDL (Visualize the Deep Learning) |
| 2 | + |
| 3 | +## 介绍 |
| 4 | +VisualDL是一个面向深度学习任务设计的可视化工具,包含了scalar、参数分布、模型结构、图像可视化等功能,项目正处于高速迭代中,新的组件会不断加入。 |
| 5 | + |
| 6 | +目前大多数DNN平台均使用Python作为配置语言,VisualDL原生支持python的使用, |
| 7 | +通过在模型的Python配置中添加几行,便可以为训练过程提供丰富的可视化支持。 |
| 8 | + |
| 9 | +除了Python SDK之外,VisualDL底层采用C++编写,其暴露的C++ SDK也可以集成到其他平台中, |
| 10 | +实现原生的性能和定制效果。 |
| 11 | + |
| 12 | +## 组件 |
| 13 | +VisualDL 目前支持4种组件: |
| 14 | + |
| 15 | +- graph |
| 16 | +- scalar |
| 17 | +- image |
| 18 | +- histogram |
| 19 | + |
| 20 | +### graph |
| 21 | +兼容 ONNX(Open Neural Network Exchange)[https://github.com/onnx/onnx], 通过与 python SDK的结合,VisualDL可以兼容包括 PaddlePaddle, pytorch, mxnet在内的大部分主流DNN平台。 |
| 22 | + |
| 23 | +<p align="center"> |
| 24 | + <img src="../demo/mxnet/mxnet_graph.gif" width="600" /> |
| 25 | +</p> |
| 26 | + |
| 27 | +### scalar |
| 28 | +可以用于展示训练测试的误差趋势 |
| 29 | + |
| 30 | +<p align="center"> |
| 31 | +<img src="./images/scalar_demo.png" width="600"/> |
| 32 | +</p> |
| 33 | + |
| 34 | +### image |
| 35 | +可以用于可视化任何tensor,或模型生成的图片 |
| 36 | + |
| 37 | +<p align="center"> |
| 38 | +<img src="./images/image_demo.png" width="600"/> |
| 39 | +</p> |
| 40 | + |
| 41 | +### histogram |
| 42 | + |
| 43 | +用于可视化任何tensor中元素分布的变化趋势 |
| 44 | + |
| 45 | +<p align="center"> |
| 46 | +<img src="./images/histogram_demo.png" width="600"/> |
| 47 | +</p> |
| 48 | + |
| 49 | +## SDK |
| 50 | +VisualDL 同时提供了python SDK 和 C++ SDK 来实现不同方式的使用。 |
| 51 | +### Python SDK |
| 52 | +以最简单的Scalar组件为例,尝试创建一个scalar组件并插入多个时间步的数据: |
| 53 | + |
| 54 | +```python |
| 55 | +import random |
| 56 | +from visualdl import LogWriter |
| 57 | + |
| 58 | +logdir = "./tmp" |
| 59 | +logger = LogWriter(dir, sync_cycle=10) |
| 60 | + |
| 61 | +# mark the components with 'train' label. |
| 62 | +with logger.mode("train"): |
| 63 | + # create a scalar component called 'scalars/scalar0' |
| 64 | + scalar0 = logger.scalar("scalars/scalar0") |
| 65 | + |
| 66 | + |
| 67 | +# add some records during DL model running, lets start from another block. |
| 68 | +with logger.mode("train"): |
| 69 | + # add scalars |
| 70 | + for step in range(100): |
| 71 | + scalar0.add_record(step, random.random()) |
| 72 | +``` |
| 73 | + |
| 74 | +### C++ SDK |
| 75 | +上面 Python SDK 中代码完全一致的C++ SDK用法如下 |
| 76 | +```c++ |
| 77 | +#include <cstdlib> |
| 78 | +#include <string> |
| 79 | +#include "visualdl/sdk.h" |
| 80 | + |
| 81 | +namespace vs = visualdl; |
| 82 | +namepsace cp = visualdl::components; |
| 83 | + |
| 84 | +int main() { |
| 85 | + const std::string dir = "./tmp"; |
| 86 | + vs::LogWriter logger(dir, 10); |
| 87 | + |
| 88 | + logger.SetMode("train"); |
| 89 | + auto tablet = logger.NewTablet("scalars/scalar0"); |
| 90 | + |
| 91 | + cp::Scalar<float> scalar0(tablet); |
| 92 | + |
| 93 | + for (int step = 0; step < 1000; step++) { |
| 94 | + float v = (float)std::rand() / RAND_MAX; |
| 95 | + scalar0.AddRecord(step, v); |
| 96 | + } |
| 97 | + |
| 98 | + return 0; |
| 99 | +} |
| 100 | +``` |
| 101 | +## 启动Board |
| 102 | +当训练过程中已经产生了日志数据,就可以启动board进行实时预览可视化信息 |
| 103 | +
|
| 104 | +``` |
| 105 | +visualDL --logdir <some log dir> |
| 106 | +``` |
| 107 | +
|
| 108 | +board 还支持一下参数来实现远程的访问: |
| 109 | +
|
| 110 | +- `--host` 设定IP |
| 111 | +- `--port` 设定端口 |
| 112 | +- `--model_pb` 指定 ONNX 格式的模型文件 |
0 commit comments