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

如何在Python中以并行子进程启动Tensorboard dev用于Slurm训练监控

问题根因

你之前的所有尝试失败核心是三个共性问题:

  • 传参错误:subprocess.Popen 列表传参模式下,每个命令参数必须单独作为列表元素,不需要手动加单引号做转义,额外的引号会被识别为路径/参数的一部分,直接导致TensorBoard找不到对应的日志目录
  • 输出未重定向:非交互式Slurm环境没有终端挂载,子进程如果持续输出日志到stdout/stderr,缓冲区满后会被系统挂起,甚至触发Slurm的资源限制规则被直接取消
  • subprocess.run 本身是同步阻塞调用,会等待子进程结束才返回,必然会阻塞后续训练逻辑执行
可行实现方案
import subprocess
import os
from pathlib import Path

mod = "SomeModelType"
logdir = "/some/directory/used/in/Tensorboard/callback"
PARAMETERS = "Some line of text describing the training settings"
# 提前创建日志目录,避免TensorBoard启动失败
Path(logdir).mkdir(parents=True, exist_ok=True)

# 把子进程输出重定向到/dev/null,避免缓冲区溢出
with open(os.devnull, 'w') as devnull:
    tb_process = subprocess.Popen(
        [
            "/pfs/data5/home/kit/ifgg/mp3890/.local/bin/tensorboard",
            "dev",
            "upload",
            "--logdir", logdir,
            "--name", f"Myname_{mod}",
            "--description", PARAMETERS,
            # 可选配置:调整上传间隔,默认是10秒,可按需修改降低资源占用
            "--upload_interval", "30"
        ],
        stdout=devnull,
        stderr=devnull,
        # 子进程和主进程会话分离,避免Slurm会话结束时直接清理上传进程
        start_new_session=True
    )

# ----------------------
# 此处放你原本的CNN训练代码
# ----------------------

# 训练结束后主动停止TensorBoard进程,避免产生僵尸进程占用集群资源
tb_process.terminate()
try:
    tb_process.wait(timeout=10)
except subprocess.TimeoutExpired:
    tb_process.kill()
可选Slurm作业配置优化

如果调整后仍然出现作业被取消的情况,可以在你的Slurm提交脚本中增加少量资源配额:

  • 给作业多分配1核CPU、200M内存,TensorBoard上传进程本身资源占用极低,避免被集群的资源超限规则误杀
  • 不要添加过于严格的IO限制,避免日志上传被阻塞

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:45:00