earn.fine_tune(4, 1e-2)RuntimeError: MPS backend out of memory (MPS allocated: 8.07 GB, other
allocations: 10.09 GB, max allowed: 18.13 GB). Tried to allocate 20.25
MB on private pool. Use PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 to
disable upper limit for memory allocations (may cause system failure).怎么修改入参数可以顺利运行,不会因为内存不足报错
这个错误信息表明在使用 MPS(Metal Performance Shaders,苹果设备上的图形处理单元加速)后端进行模型微调时,内存不足。错误信息中提到的 "MPS allocated" 和 "other allocations" 是已经分配的内存量,而 "max allowed" 是允许的最大内存量。当尝试分配的内存超过了剩余可用内存时,就会抛出这个错误。
要解决这个问题,你可以尝试以下几种方法:
- 减少批量大小(batch size):这是最直接的方法,减少批量大小可以降低每次迭代所需的内存量。在你的
learn.fine_tune
调用中,第一个参数就是批量大小,你可以尝试减少这个值。 - 优化模型结构:如果可能的话,尝试简化模型结构,减少模型的复杂度,这样可以减少模型运行时的内存占用。
- 使用梯度累积(gradient accumulation):如果减少批量大小影响了模型性能,你可以使用梯度累积技术,即在多个小批量上累积梯度,然后在一定数量的小批量后进行一次更新。
- 调整学习率(learning rate):你已经设置的学习率是
1e-2
,这个值可能对于微调来说太高了,特别是如果模型已经在预训练阶段使用了较小的学习率。尝试降低学习率,比如1e-3
或1e-4
。 - 禁用 MPS 上的内存限制:虽然这可能会增加系统崩溃的风险,但如果你确信你的系统有足够的内存,可以通过设置环境变量
PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0
来禁用内存限制。 - 使用 CPU 进行训练:如果 GPU 内存不足,作为最后的手段,你可以尝试在 CPU 上进行训练,虽然这会显著降低训练速度。
- 清理内存:确保在训练前关闭不必要的应用程序和进程,以释放尽可能多的内存。
- 升级硬件:如果你经常遇到内存限制问题,可能需要考虑升级你的硬件,比如使用具有更多内存的设备。
在修改参数之前,请确保你理解每个参数对模型训练的影响,以及它们如何与你的硬件资源相互作用。调整参数可能需要一些试验和错误,以找到最佳的配置。
Comments | NOTHING