
# 在JupyterLab中使用TensorBoard可视化作业
ModelArts支持在开发环境中开启TensorBoard可视化工具。TensorBoard是TensorFlow的可视化工具包，提供机器学习实验所需的可视化功能和工具。TensorBoard能够有效地展示训练过程中的计算图、各种指标随时间的变化趋势以及训练中使用到的数据信息，相关概念请参考[TensorBoard官网](https://www.tensorflow.org/tensorboard?hl=zh-cn)。
TensorBoard可视化工具当前仅支持在PyTorch和TensorFlow引擎中使用，不支持在MindSpore引擎或其他AI引擎中使用。
#### 前提条件
为了保证训练结果中输出Summary文件，在编写训练脚本时，您需要在脚本中添加收集Summary相关代码。
TensorFlow引擎的训练脚本中添加Summary代码，具体方式请参见[TensorFlow官方网站](https://www.tensorflow.org/tensorboard/get_started)。
PyTorch引擎的训练脚本中添加Summary代码，具体方式请参见[PyTorch官方网站](https://docs.pytorch.org/docs/2.13/tensorboard.html)。
#### 注意事项
- 运行中的可视化作业不单独计费，当停止Notebook实例时，计费停止。
- Summary文件数据如果存放在OBS中，由OBS单独收费。任务完成后请及时停止Notebook实例，清理OBS数据，避免产生不必要的费用。
 
#### 在开发环境中创建TensorBoard可视化作业流程
[步骤一：创建开发环境并在线打开]
[步骤二：生成Summary数据]
[步骤三：上传Summary数据]
[步骤四：启动TensorBoard]
[步骤五：查看看板中的可视化数据]
 #### 步骤一：创建开发环境并在线打开
1. 登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)，在左侧导航栏按需选择以下操作。
   - 新版控制台：选择"模型开发与训练 \> Notebook"，进入"Notebook"页面。
   
   - 旧版控制台：选择"开发空间 \> Notebook"，进入"Notebook"页面。
    
2. 在"Notebook"页面右上角，单击"创建"，创建TensorFlow或者PyTorch镜像的开发环境实例。具体操作，请参见[创建Notebook实例](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_3495.html)。
3. 创建成功后，单击开发环境实例"操作"列的"接入环境"，在"接入方式"对话框，单击JupyterLab接入右侧的"接入"，在线打开运行中的开发环境。
![](https://support.huaweicloud.com/devtool-modelarts/public_sys-resources/note_3.0-zh-cn.png)
如果待可视化数据目录下内容较多（例如总量为百M级别）时，2U8G的CPU规格实例可能会出现CPU或Memory不足的情况，导致Notebook实例卡顿无法正常工作，此时建议使用更大规格（例如4U16G）的实例进行可视化操作。具体规格以实际局点支持的资源规格为准。
 #### 步骤二：生成Summary数据
在开发环境中使用TensorBoard可视化功能，需要生成Summary数据。以下是一个简单的线性回归训练示例，展示如何生成和记录Summary数据。如果需要了解如何生成Summary数据，请参考[PyTorch官方文档](https://pytorch.org/docs/stable/tensorboard.html)。
```
import torch
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = torch.arange(-5, 5, 0.1).view(-1, 1)
y = -5 * x + 0.1 * torch.randn(x.size())
model = torch.nn.Linear(1, 1)
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr = 0.1)
def train_model(iter):
    for epoch in range(iter):
        y1 = model(x)
        loss = criterion(y1, y)
        writer.add_scalar("Loss/train", loss, epoch)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
train_model(10)
writer.flush()
```
 #### 步骤三：上传Summary数据
您可以将生成好的Summary数据，通过如下两种方式上传到Notebook中：
- Summary数据如果在本地，可以在Notebook左侧文件导航栏下新建目录，并通过拖拽等方式将本地数据上传到Notebook该新建目录中，具体请参见[上传本地文件至JupyterLab](https://support.huaweicloud.com/devtool-modelarts/modelarts_30_0043.html)。
- Summary数据如果存储在OBS中，请确保该OBS路径与Notebook实例在同一区域，并通过动态挂载功能将该OBS路径挂载至Notebook中。具体操作，请参见[Notebook存储挂载方式说明](https://support.huaweicloud.com/devtool-modelarts/devtool-modelarts_0007.html)。
  在Notebook左侧文件目录中需要显示已挂载的并行文件系统目录，在后续[步骤四.2]中使用。完成并行文件系统挂载后，您需要在terminal中创建软链接。
  例如，使用以下命令，将挂载点/data/visualization链接至/home/ma-user/work/visualization目录下。visualization请替换为实际的挂载路径。
  ```
  ln -s /data/visualization /home/ma-user/work/visualization
  ```
  这条命令会在/home/ma-user/work目录下创建一个名为visualization的软链接，指向/data/visualization。在Notebook左侧单击![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002487431173.png)图标，可以看到新创建的软连接。
  图1创建软链接   
  ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002655821472.png "点击放大") 
图2新建目录   
![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002686064413.png)
![](https://support.huaweicloud.com/devtool-modelarts/public_sys-resources/note_3.0-zh-cn.png)
建议将需要可视化的数据上传到单独目录下，如果使用OBS挂载功能，建议只挂载可视化数据所在层级的OBS路径到Notebook，而不是将整个桶都挂载上来进行可视化，避免混杂其他数据导致TensorBoard加载变慢，甚至无法正常可视化。
 #### 步骤四：启动TensorBoard
1. 在开发环境的JupyterLab中打开ModelArts Launcher页面，然后单击TensorBoard图标。
   图3打开ModelArts Launcher界面   
   ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002686064943.png)
   图4在Launcher中打开TensorBoard   
   ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002581776338.png "点击放大") 
2. 首次单击TensorBoard会进入到一个默认的初始化面板，可以从该面板创建TensorBoard实例。
   在Log Dir中填写可视化数据所在的目录，该路径为/home/ma-user/work下的相对路径，填写好后单击右侧"Create TensorBoard"按钮，如[图2 打开Launcher界面]所示。非首次进入则会直接进入到第一个活跃的TensorBoard实例。
   图5TensorBoard插件界面   
   ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002685911159.png "点击放大")
   参数介绍如下：
   - Log Dir：默认是单击TensorBoard时当前侧边栏的目录，也可以手动填写对应目录，这里建议目录尽可能细化，目录内容比较少的话会提高初始化速度。
   
   - Multi LogDir：支持输入多个目录参数，用逗号分隔，对应原生TensorBoard的--logdir_spec参数。TensorBoard官方对该功能支持不完善，不推荐使用。
   
   - Reload Interval：TensorBoard多久对相应目录进行一次重新扫描，这个选项是默认是关闭的，日常使用选择手动Reload即可（设置Reload Interval之后，TensorBoard后端持续扫描目录会对JupyterLab的稳定性和文件系统都产生一定的影响）。
   
   
   关于该插件的更多功能介绍请参考[JupyterLab TensorBoard Pro官网](https://github.com/HFAiLab/jupyterlab_tensorboard_pro/blob/v4.x/README.zh-cn.md)。
   
3. 创建好后的Tensorboard可视化展示面板如[图6]所示。
   - 单击[图6]中数字1所示按钮，可以在单独的浏览器页签展示可视化面板。
   
   - [图6]数字2中提供了实例管理相关功能，包括重启Tensorboard实例（Reload），关闭Tensorboard实例（Destroy），复制一个前端可视化面板（Duplicate），创建一个新的Tensorboard实例（New）。
   
   - [图6]数字3处，可以使用JupyterLab的Kernel管理面板管理实例，提供跳转至对应实例和删除等功能。
   
   
   图6创建后的可视化界面   
   ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002686074539.png "点击放大")
   ![](https://support.huaweicloud.com/devtool-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   不建议打开Reload Interval，避免后台频繁刷新导致Notebook实例产生卡顿甚至无法正常使用，需要查看新数据时单击右上角刷新按钮即可。
   不建议使用New按钮创建多个TensorBoard实例，该操作可能会导致CPU/Memory占用过大，导致Notebook实例卡顿甚至无法正常使用等问题。当需要可视化新的目录时，可以先将当前TensorBoard实例关闭，再指定新目录创建一个新的TensorBoard实例。
   
 
 #### 步骤五：查看看板中的可视化数据
可视化看板是TensorBoard的可视化组件的重要组成部分，看板标签包含：标量可视化、图像可视化和计算图可视化等。
更多功能介绍和用法请参见[TensorBoard官网资料](https://www.tensorflow.org/tensorboard/get_started)。
![](https://support.huaweicloud.com/devtool-modelarts/public_sys-resources/note_3.0-zh-cn.png)
1. 由于Chrome等浏览器的安全限制导致无法从iframe下载数据，当前不支持可视化数据的Download data按钮。 ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002655835328.png "点击放大")
   
2. 如果可视化面板一直未展示数据，请检查可视化数据目录是否选择正确以及目录下的数据是否完整（请勿随意手工调整或删除部分训练打点产生的summary数据，否则可能无法正常可视化）。
3. 如果数据正确但一直未成功展示数据（右上角刷新按钮一直在转圈），请打开一个terminal窗口，使用top命令查看CPU占用率等信息，可能是由于数据量过大导致CPU/Memory超负荷，建议减少数据量或者更换更大的Notebook实例规格。
4. 如果偶尔显示数据未成功加载，可稍等片刻后单击右上角的刷新按钮，通常情况下可再次正常显示相关数据。 ![](https://support.huaweicloud.com/devtool-modelarts/figure/zh-cn_image_0000002480795510.png "点击放大")
   
