README.cn.md 3.3 KB
Newer Older
D
daminglu 已提交
1
<p align="center">
Y
Yan Chunwei 已提交
2
  <img src="./docs/images/vs-logo.png" width="60%" />
D
daminglu 已提交
3 4
</p>

Y
Yan Chunwei 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## 介绍
VisualDL是一个面向深度学习任务设计的可视化工具,包含了scalar、参数分布、模型结构、图像可视化等功能,项目正处于高速迭代中,新的组件会不断加入。

目前大多数DNN平台均使用Python作为配置语言,VisualDL原生支持python的使用,
通过在模型的Python配置中添加几行,便可以为训练过程提供丰富的可视化支持。

除了Python SDK之外,VisualDL底层采用C++编写,其暴露的C++ SDK也可以集成到其他平台中,
实现原生的性能和定制效果。

## 组件
VisualDL 目前支持4种组件:

- graph
- scalar
- image
- histogram

### graph
兼容 ONNX(Open Neural Network Exchange)[https://github.com/onnx/onnx], 通过与 python SDK的结合,VisualDL可以兼容包括 PaddlePaddle, pytorch, mxnet在内的大部分主流DNN平台。

<p align="center">
D
daminglu 已提交
26
  <img src="https://github.com/daming-lu/large_files/blob/master/graph_demo.gif" width="60%" />
Y
Yan Chunwei 已提交
27 28 29 30 31 32
</p>

### scalar
可以用于展示训练测试的误差趋势

<p align="center">
D
daminglu 已提交
33
<img src="https://github.com/daming-lu/large_files/blob/master/loss_scalar.gif" width="60%"/>
Y
Yan Chunwei 已提交
34 35 36 37 38 39
</p>

### image
可以用于可视化任何tensor,或模型生成的图片

<p align="center">
D
daminglu 已提交
40
<img src="https://github.com/daming-lu/large_files/blob/master/loss_image.gif" width="60%"/>
Y
Yan Chunwei 已提交
41 42 43 44 45 46 47
</p>

### histogram

用于可视化任何tensor中元素分布的变化趋势

<p align="center">
D
daminglu 已提交
48
<img src="https://github.com/daming-lu/large_files/blob/master/histogram.gif" width="60%"/>
Y
Yan Chunwei 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
</p>

## SDK
VisualDL 同时提供了python SDK 和 C++ SDK 来实现不同方式的使用。
### Python SDK
以最简单的Scalar组件为例,尝试创建一个scalar组件并插入多个时间步的数据:

```python
import random
from visualdl import LogWriter

logdir = "./tmp"
logger = LogWriter(dir, sync_cycle=10)

# mark the components with 'train' label.
with logger.mode("train"):
    # create a scalar component called 'scalars/scalar0'
    scalar0 = logger.scalar("scalars/scalar0")
    

# add some records during DL model running, lets start from another block.
with logger.mode("train"):
    # add scalars
    for step in range(100):
        scalar0.add_record(step, random.random())
```

### C++ SDK
上面 Python SDK 中代码完全一致的C++ SDK用法如下
```c++
#include <cstdlib>
#include <string>
#include "visualdl/sdk.h"

namespace vs = visualdl;
namepsace cp = visualdl::components;

int main() {
  const std::string dir = "./tmp";
  vs::LogWriter logger(dir, 10);
  
  logger.SetMode("train");
  auto tablet = logger.NewTablet("scalars/scalar0");
  
  cp::Scalar<float> scalar0(tablet);
  
  for (int step = 0; step < 1000; step++) {
    float v = (float)std::rand() / RAND_MAX;
    scalar0.AddRecord(step, v);
  }

  return 0;
}
```
## 启动Board
当训练过程中已经产生了日志数据,就可以启动board进行实时预览可视化信息

```
visualDL --logdir <some log dir>
```

board 还支持一下参数来实现远程的访问:

- `--host` 设定IP
- `--port` 设定端口
- `--model_pb` 指定 ONNX 格式的模型文件
D
daminglu 已提交
115 116 117 118 119 120


### 贡献

VisualDL 是由 [PaddlePaddle](http://www.paddlepaddle.org/)
[ECharts](http://echarts.baidu.com/) 合作推出的开源项目。我们欢迎所有人使用,提意见以及贡献代码。