1. 重新运行前,先保留报错信息和上下文
不要再往队列里添加任务了。记下报错的原文、涉及的文件或问题、一起处理的元素数量,以及运行到了哪一步。模型是在加载?计算在推进?还是输出正在写入?把设置记在笔记里,把已经完成的结果留在原来的文件夹中。
界面卡死或程序无故关闭,并不足以确定原因。如果有日志,就找到它。连接中断、输入无效和显存被占满,在界面上可能表现出相似的症状。如果软件没有给出任何说明,就写“原因未确定”,然后准备一个最小测试,而不是凭空猜测病因。
2. 区分 GPU 显存、系统内存和磁盘空间
GPU 显存用于显卡上的计算元素。服务器的 RAM 和存储则满足其他需求。BriefGPU 的 GPU 详情页上标明的容量,并不代表实际可用的 RAM 或磁盘。请核对报错信息中提到的资源,以及你自己环境中的相关信息。
在 Python 中,MemoryError 表示内存分配失败;仅凭这个名字并不能说明是 VRAM 不足。错误码 ENOSPC 则表示目标设备空间不足。这些线索有助于定位排查方向,但仍需要应用程序的日志才能确定出问题的操作。
| 观察 | 第一步检查 | 换更大的 GPU 也无法单独解决的问题 |
|---|---|---|
| 计算过程中出现 CUDA out of memory | 显卡已用显存、其他任务和批大小 | 软件不兼容或文件损坏 |
| 读取文件时出现 MemoryError | 进程内存、已载入 RAM 的数据量 | 把整个文件夹都加载进系统内存 |
| 导出时出现 No space left on device | 输出目录或临时目录的空间及可能存在的配额 | 磁盘写满或存储上限 |
| 程序关闭且没有可用报错信息 | 日志、运行到的步骤,以及用单条输入做测试 | 原因仍不明确 |
3. 回到单条输入和单个运行中的任务
首先检查您自己启动的任务。一个预览、一个旧会话或另一个工具可能仍在运行。在保存好状态后,请正常关闭那些已无用的任务。不要终止您不认识的进程,也不要为了节省几分钟排查时间而重启整个环境。
重新单独运行失败的那条输入,不要降低它的质量。如果单独运行能通过,成批运行时却失败,那么并发数量就成了一条线索。比如把一组四个减到两个,必要时再减到一个。文件夹里的文件数量保持不变,改变的只是同时处理的数量。
有些工具提供顺序处理,以限制内存峰值。例如 Diffusers 就记录了将一批图像的解码拆分开来的做法。这种能力取决于所用的流水线:在启用某个为其他模型找到的设置之前,先查看它自己的选项。
4. 在不牺牲所需结果的前提下减轻负载
如果单独一条输入就失败了,就检查它的尺寸或长度。对于图像,从 2 048 × 2 048 降到 1 024 × 1 024,像素数量会减少到四分之一。但这并不保证总内存也降到四分之一:模型和其他部分仍有各自的需求。只有输出仍保留必要细节时,这种缩减才可以接受。
对于助手场景,请区分提供的文档、问题和生成的回答。生成缓存在长上下文下可能占用更多内存;具体机制取决于模型。请尝试更短的请求,或一次只发一个请求。不要删掉包含答案的那一段,然后断定问题已经解决。
始终保留原始输入。给试用的变体命名,并写下它改变了什么。如果工具提供分块处理或将部分元素转移到内存,请查阅其文档,并检查拼接处、质量和实际耗时。一个节省显存的选项可能只是把瓶颈转移到了别处。
5. 不要混淆预留内存与可用内存
在 PyTorch 中,分配器预留的内存与张量实际占用的内存是两种不同的度量。清空未使用的缓存并不会释放仍在活动的张量。因此,一条清理命令无法把过大的负载变成兼容的负载。
如果干净地重启应用有帮助,请随后重放同一个小的用例,并记录结果。重启后成功本身并不能证明内存泄漏已被修复。如果每次相同处理都会让占用上升,请保留这一观察,并查阅软件文档或联系技术支持,而不是反复重启。
示例:在一个十二张图片的文件夹中定位问题
以下是一个演示性场景,未进行硬件测量。一位自由职业者准备了十二张图片,其中两张尺寸很大且包含细小文字。按每组四张处理时失败。她保留了报错信息,然后单独尝试其中一张大图,使用原始质量。下表展示了如何解读可能的观察结果。
在这个场景中,她只有在同时检验两张大的图片和几张普通图片之后,才采用每组两张的设置。她在导出的文件中检查文字和轮廓。她不会把这个结果推广到所有图片尺寸、所有模型或其他软件。
| 场景试验 | 假设性观察 | 局部决策 |
|---|---|---|
| 同时处理四张图片 | 内存失败 | 保留错误并减小分组 |
| 一张大图,相同设置 | 输出完整且可接受 | 目标质量在这个单独用例中可以跑通 |
| 同时处理两张大的图片 | 输出完整且可接受 | 在短片段上测试这个分组 |
| 图片被大幅缩小 | 计算完成,但文字无法辨认 | 尽管技术上成功,也排除这种缩小方案 |
何时换用另一种配置才是合理的思路
当确认为 GPU 内存不足、唯一不可缺少的用例单独运行也会失败,且符合你质量要求的缩减仍不够用时,可以比较另一张显卡。请保留相关的软件、版本、参数和输入:这份记录能让下一次试验具有可比性。它无法推断出到底还需要多少 GB。
模型加载时出错也可能让减小分组的价值有限:在第一个输入之前,就已经存在很大一部分负载。精度或量化选项会改变运行条件,有时也会改变结果;它们需要单独试验。增加批次并不会自动统一多张显卡的内存。
以一份可用的诊断收尾
你的收尾记录包含五个要素:报错信息与步骤、疑似资源、保留的输入、能通过或失败的设置、已完成的质量检查。再补充仍未知的部分。如果任何小用例都无法运行,请停止重复完整的批次,并用这些信息寻求帮助。
不要为了腾出磁盘空间而删除你唯一的原始文件,不要同时下调多个参数,也不要把部分输出当作成功。留出时间备份有效的结果。诊断应当减少不确定性;它不必变成一场没完没了的调参马拉松。