使用TensorBoard可视化训练过程#
TensorBoard是一个用于追踪、可视化、分析模型训练过程和训练结果的工具,它提供了多种可视化功能,可以与PyTorch、TensorFlow、Keras、Huggingface transformers、ModelScope等机器学习框架一起使用,帮助用户了解模型的训练过程和性能。
PAI提供了TensorBoard服务,支持用户在PAI创建TensorBoard应用,用于查看训练作业输出的TensorBoard日志。
本文档将以不同的机器学习框架为示例,展示如何在PAI使用TensorBoard追踪和可视化模型训练过程。
安装和配置SDK#
我们需要首先安装PAI Python SDK以运行本示例。
!python -m pip install --upgrade alipai
SDK需要配置访问阿里云服务需要的AccessKey,以及当前使用的工作空间和OSS Bucket。在PAI SDK安装之后,通过在 命令行终端 中执行以下命令,按照引导配置密钥、工作空间等信息。
# 以下命令,请在 命令行终端 中执行.
python -m pai.toolkit.config
我们可以通过以下代码验证配置是否已生效。
import pai
from pai.session import get_default_session
print(pai.__version__)
sess = get_default_session()
# 获取配置的工作空间信息
assert sess.workspace_name is not None
print(sess.workspace_name)
提交训练任务#
我们首先需要准备训练脚本,使用将PyTorch的TensorBoard utility记录TensorBoard日志。
PyTorch提供的TensorBoard utilities的使用可以见文档: torch.utils.tensorboard 文档
!mkdir -p src
镜像里需要先安装TensorBoard,可以在训练目录中准备 requirements.txt
指定需要按照的第三方库。
%%writefile src/requirements.txt
tensorboard
%%writefile src/run.py
import os
import torch
from torch.utils.tensorboard import SummaryWriter
# 通过环境变量获取TensorBoard输出路径,默认为 /ml/output/tensorboard/
tb_log_dir = os.environ.get("PAI_OUTPUT_TENSORBOARD")
print(f"TensorBoard log dir: {tb_log_dir}")
writer = SummaryWriter(log_dir=tb_log_dir)
def train_model(iter):
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)
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()
if __name__ == "__main__":
train_model(100)
writer.flush()
from pai.estimator import Estimator
from pai.image import retrieve
est = Estimator(
command="python run.py",
source_dir="./src",
image_uri=retrieve("PyTorch", "latest").image_uri,
instance_type="ecs.c6.large",
)
est.fit(wait=False)
使用TensorBoard应用监控训练#
在PAI启动一个TensorBoard应用,查看使用Estimator的训练作业写出的TensorBoard日志。
tb = est.tensorboard()
print(tb.app_uri)
使用完成之后,删除TensorBoard应用
tb.delete()