You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

脚本短时间终止时TensorBoard无法记录数据的解决方案咨询

问题根因

torch.utils.tensorboard.SummaryWriter 为了提升写入性能,默认会先把日志数据存在内存缓冲区,由后台异步线程分批刷写到磁盘。如果调用add_image等写入接口后脚本直接运行结束,进程会被立刻销毁,缓冲区里还没来得及落盘的日志数据会直接丢失。你加无限循环能让数据正常记录,本质是靠卡住进程不退出,给了后台线程足够时间把缓冲数据刷到磁盘,属于治标不治本的取巧方案。

根本修复方案

不需要加任何阻塞进程的冗余代码,只要规范SummaryWriter的资源释放逻辑即可从根源解决问题,有两种标准写法:

  • 手动关闭:所有日志写入操作全部完成后,主动调用writer.close()方法。该方法会立刻强制把缓冲区剩余数据全部刷写到磁盘,再安全关闭文件句柄,不会出现数据丢失。
  • 上下文管理器(推荐):用with语句创建SummaryWriter实例,当with包裹的代码块执行完毕后,会自动触发刷盘、关闭逻辑,不需要手动写close(),即使代码块中途抛错也能保证资源正常释放,鲁棒性最高。
修复后的正确代码示例
import torch
import torchvision
import torchvision.transforms as transforms
from torch.utils.tensorboard import SummaryWriter


transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

trainset = torchvision.datasets.FashionMNIST('./datasets/data/',
    download=True,
    train=True,
    transform=transform
)

trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True)

data_iter = iter(trainloader)
images, labels = next(data_iter)

img_grid = torchvision.utils.make_grid(images)

# 推荐写法:用with上下文管理器自动处理刷盘关闭
with SummaryWriter("runs/demo_1_fashion_mnist") as writer:
    writer.add_image("four_fashion_mnist_images", img_grid)

# 如果不用with写法,所有写入操作完成后必须手动执行下面这一句
# writer.close()

注意:不要在日志写入流程中途调用close(),必须等所有add_xxx系列接口调用完成后再触发关闭,否则后续写入操作会失败。

内容的提问来源于stack exchange,提问作者affenpirat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:54:29