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

使用QSUB和Bash脚本运行Keras训练时无法查看进度的问题

解决PBS环境下Keras/TensorFlow训练进度与指标监控问题

在PBS集群环境里跑训练脚本没法直接可视化确实挺头疼的,我给你几个实用的方案,帮你搞定训练监控的问题:

1. 用TensorBoard实时监控(最推荐)

TensorBoard是TensorFlow官方的可视化工具,能完美展示训练损失、准确率、验证指标这些数据,而且支持远程访问,非常适合集群环境。

具体操作:

  • 先在你的U-NET.py里添加TensorBoard回调:
from tensorflow.keras.callbacks import TensorBoard
import datetime

# 创建带时间戳的日志目录,避免重复覆盖
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = TensorBoard(
    log_dir=log_dir,
    histogram_freq=1,  # 定期记录权重直方图
    write_graph=True,
    write_images=True
)

# 把回调加入训练流程
history = model.fit(
    train_B, train_A,
    epochs=200,
    batch_size=20,
    validation_split=0.052631578,
    shuffle=True,
    callbacks=[tensorboard_callback]  # 新增这一行
)
  • 修改Bash脚本,把训练输出重定向到日志文件(方便后续排查问题):
#!/bin/bash
#PBS -N Tarea_UNET
#PBS -l nodes=1:ppn=4:gpus=1
cd $PBS_O_WORKDIR
source $ANACONDA3/activate inictel_uni
# 把标准输出和错误输出都写入日志文件
python U-NET.py > training_logs.txt 2>&1
  • 训练启动后,在本地机器通过SSH端口转发连接到集群节点:
# 替换成你的集群用户名和节点名称(比如node02)
ssh -L 6006:localhost:6006 your_username@cluster_node_name

之后在本地浏览器打开http://localhost:6006,就能看到实时的训练监控界面了。

2. 输出日志到文件,实时查看简单指标

如果暂时不想用TensorBoard,也可以让Keras把训练过程的详细指标打印到文件,然后实时追踪:

操作步骤:

  • 调整model.fit的verbose参数,开启详细输出:
history = model.fit(
    train_B, train_A,
    epochs=200,
    batch_size=20,
    validation_split=0.052631578,
    shuffle=True,
    verbose=1  # verbose=1会打印每个epoch的进度条和指标,verbose=2是简化版输出
)
  • 同样用Bash脚本重定向输出到文件(和上面的脚本一样),然后在集群上用tail命令实时查看:
tail -f training_logs.txt

这样就能看到每个epoch的训练损失、验证损失等指标的实时更新了。

3. 自定义回调函数,监控专属指标

如果是分割任务,你可能需要监控IoU、Dice系数这类自定义指标,这时候可以写一个自定义回调函数:

from tensorflow.keras.callbacks import Callback

class CustomMetricsLogger(Callback):
    def on_epoch_end(self, epoch, logs=None):
        logs = logs or {}
        # 按你需要的格式打印指标
        print(f"=== Epoch {epoch+1} 结束 ===")
        print(f"训练损失: {logs.get('loss'):.4f}")
        print(f"验证损失: {logs.get('val_loss'):.4f}")
        # 如果有自定义训练指标,比如dice_coeff,也可以打印
        # print(f"验证Dice系数: {logs.get('val_dice_coeff'):.4f}")

# 把自定义回调加入训练
history = model.fit(
    train_B, train_A,
    epochs=200,
    batch_size=20,
    validation_split=0.052631578,
    shuffle=True,
    callbacks=[CustomMetricsLogger()]
)

这个方法能让你灵活控制要监控的内容,输出的信息会直接写入之前的日志文件。

PBS环境小提醒

  • 确认集群节点允许SSH端口转发,如果有防火墙限制,可能需要联系管理员开通TensorBoard默认的6006端口。
  • 日志文件尽量保存在$PBS_O_WORKDIR目录下,也就是你提交脚本的目录,方便后续查找。
  • 如果训练周期很长,可以直接用PBS自带的日志配置:#PBS -o output.log、#PBS -e error.log,把输出和错误分别保存,避免断开连接后日志丢失。

内容的提问来源于stack exchange,提问作者Giorgio Luigi Morales Luna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:34