
在远程 SSH 环境中运行 Captum 的 plot_token_attr() 时,需禁用图形界面显示并直接将归因热力图保存为本地文件(如 PNG),核心方法是移除 show=True 参数,获取返回的 matplotlib.figure.Figure 对象后调用 savefig()。
在远程 ssh 环境中运行 captum 的 `plot_token_attr()` 时,需禁用图形界面显示并直接将归因热力图保存为本地文件(如 png),核心方法是移除 `show=true` 参数,获取返回的 `matplotlib.figure.figure` 对象后调用 `savefig()`。
Captum 的 LLMAttributionResult.plot_token_attr() 方法默认使用 Matplotlib 渲染可视化结果。当通过 SSH 连接无图形界面(headless)的服务器时,show=True 会触发 plt.show(),导致报错(如 TkInter not available 或 no display name)。解决方式是跳过显示环节,直接保存图像文件。
有两种推荐写法,均需确保已导入 matplotlib.pyplot:
✅ 方法一:使用 plt.savefig()(简洁常用)
import matplotlib.pyplot as plt
# ... 前置代码:定义 inp, 调用 attribute() ...
attr_res = llm_attr.attribute(inp, target=target, skip_tokens=skip_tokens)
# 移除 show=True,仅生成图表对象
attr_res.plot_token_attr() # 不传 show 参数,等价于 show=False
# 保存为本地文件(支持 png, pdf, svg 等格式)
plt.savefig("token_attr_plot.png", bbox_inches="tight", dpi=300)
# plt.close() # 可选:释放内存,尤其批量保存时建议添加✅ 方法二:显式获取 figure 对象(更可控)
fig, ax = attr_res.plot_token_attr() # 返回 (Figure, Axes) 元组
fig.savefig("token_attr_plot.pdf", bbox_inches="tight", format="pdf")
plt.close(fig) # 显式关闭 figure,避免内存累积? 关键注意事项:
-
务必移除
show=True:该参数会强制调用plt.show(),在无 GUI 环境下必然失败; -
推荐添加
bbox_inches="tight":自动裁剪空白边距,提升图像可读性; -
设置高 DPI(如
dpi=300):保证学术报告或论文中图像清晰度; -
批量处理时务必
plt.close():防止Figure对象堆积导致内存溢出; - 若遇
UserWarning: FigureCanvasAgg is non-interactive,说明 Matplotlib 已自动切换至Agg后端——这正是 headless 环境所需,属正常行为,无需干预。
最终生成的图像(如 token_attr_plot.png)将保存在当前工作目录,可通过 scp 或 SFTP 下载至本地查看分析。

















