如何通过SSH远程保存并查看模型训练的实时绘图?
远程SSH查看模型训练实时状态与绘图的实用方案
嘿,我来给你几个亲测有效的方案,完美解决你通过SSH远程监控模型训练实时数据和动态绘图的需求:
方案1:SSH X11转发直接显示远程绘图
这个方法最直接,相当于把远程服务器的绘图窗口「投屏」到你本地电脑上,不用折腾文件同步或额外服务。
- 本地连接远程时开启X11转发:
ssh -X your_username@remote_server_ip # 要是信任远程服务器,用-Y速度更快: ssh -Y your_username@remote_server_ip - 确保远程环境支持X11:
远程服务器需要安装xauth(大部分Linux发行版默认自带,没有的话用apt install xauth或yum install xauth补上),然后给matplotlib指定支持X11的后端,在代码开头加:import matplotlib matplotlib.use('TkAgg') # 也可以选Qt5Agg,看你远程环境支持哪个 - 修改你的动画代码:
调整后让远程运行的动画能持续更新并通过X11转发到本地显示:
运行后本地会弹出实时更新的窗口,缺点是网络延迟高时会有点卡顿,适合近距离远程连接。import numpy as np import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() def animate(i): fig.clf() plt.suptitle('Training Real-time Metrics') # 这里替换成你实际解析模型输出的逻辑 values = np.random.randint(0, 100, (100,)) plt.plot(np.arange(100), values) plt.xlabel('Training Step') plt.ylabel('Metric Value') # 启动动画,1秒更新一次 ani = animation.FuncAnimation(fig, animate, interval=1000) plt.show() # 保持窗口不关闭
方案2:实时同步静态图片到本地查看
如果X11转发太卡,这个方案更稳妥:远程训练时持续覆盖保存一张静态图,再同步到本地用工具自动刷新。
- 远程代码修改:
把动画逻辑改成定时保存覆盖同一张图片:import numpy as np import matplotlib.pyplot as plt import time while True: plt.clf() plt.suptitle('Training Real-time Metrics') values = np.random.randint(0, 100, (100,)) plt.plot(np.arange(100), values) plt.xlabel('Training Step') plt.ylabel('Metric Value') # 覆盖保存,用bbox_inches避免标题被截断 plt.savefig('training_plot.png', bbox_inches='tight') plt.close() # 释放内存资源 time.sleep(1) # 每秒更新一次 - 本地同步图片:
开个新终端,用rsync定时拉取远程图片:# 替换成你的远程路径和本地保存路径,每秒同步一次 while true; do rsync -avz your_username@remote_server_ip:/path/to/training_plot.png /your/local/save/folder/; sleep 1; done - 本地自动刷新查看:
- Linux用
feh:feh --auto-reload /your/local/save/folder/training_plot.png - Windows用IrfanView,开启「自动重新加载」功能
- Mac可以用第三方工具如
qlmanage配合脚本自动刷新,或者手动刷新Preview
- Linux用
方案3:搭建简易Web服务远程访问
适合多人查看或网络环境复杂的场景,远程启个轻量Web服务,本地浏览器就能看实时图。
- 远程安装Flask:
pip install flask - 编写Flask服务代码(存为
plot_server.py):from flask import Flask, send_file import numpy as np import matplotlib.pyplot as plt import io app = Flask(__name__) def generate_latest_plot(): plt.clf() plt.suptitle('Training Real-time Metrics') values = np.random.randint(0, 100, (100,)) plt.plot(np.arange(100), values) plt.xlabel('Training Step') plt.ylabel('Metric Value') # 把图片存到内存缓冲区,不用写磁盘 img_buf = io.BytesIO() plt.savefig(img_buf, format='png', bbox_inches='tight') img_buf.seek(0) plt.close() return img_buf @app.route('/plot') def get_plot(): return send_file(generate_latest_plot(), mimetype='image/png') if __name__ == '__main__': # 绑定0.0.0.0让外部能访问,端口选个空闲的比如5000 app.run(host='0.0.0.0', port=5000) - 远程启动服务:
python plot_server.py - 本地端口转发访问:
然后在本地浏览器打开ssh -L 5000:localhost:5000 your_username@remote_server_iphttp://localhost:5000/plot,装个自动刷新插件就能实时看更新了。
方案4:用TensorBoard(深度学习专属)
如果你用TensorFlow或PyTorch训练,TensorBoard是最专业的选择——不仅能看绘图,还能监控指标、参数分布等。
- 训练代码加日志记录(以PyTorch为例):
from torch.utils.tensorboard import SummaryWriter import numpy as np import time writer = SummaryWriter(log_dir='./tb_training_logs') step = 0 while True: # 模拟模型输出的指标 metric_val = np.random.randint(0, 100) # 写入 scalar 指标 writer.add_scalar('Training Accuracy', metric_val, step) # 写入曲线图像 values = np.random.randint(0, 100, (100,)) fig = plt.figure() fig.plot(np.arange(100), values) writer.add_figure('Accuracy Curve', fig, step) plt.close(fig) step += 1 time.sleep(1) - 远程启动TensorBoard:
tensorboard --logdir=./tb_training_logs --port=6006 - 本地端口转发访问:
本地浏览器打开ssh -L 6006:localhost:6006 your_username@remote_server_iphttp://localhost:6006,就能看到所有实时更新的训练数据和可视化内容了。
内容的提问来源于stack exchange,提问作者TJain
相关产品推荐
相关产品推荐

