请问是什么原因?如何解决呢

哪位老师帮看下,运行https://www.modelscope.cn/models/damo/nlp_gpt3_text-generation_2.7B/summary 里的续写训练,报显存OOM,请问是什么原因?如何解决呢,网上找了一些解决方法没作用。RuntimeError: CUDA out of memory. Tried to allocate 100.00 MiB (GPU 0; 39.45 GiB total capacity; 37.29 GiB already allocated; 68.25 MiB free; 37.33 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF?

展开
收起
真的很搞笑 2023-03-22 15:41:24 536 分享 版权
2 条回答
写回答
取消 提交回答
  • 降低 batch 大小:减少每次输入模型的数据量可以减少显存的使用量。如果您正在使用迭代器,尝试降低 batch_size 参数的值。

    使用更小的模型:如果可以的话,尝试使用参数更少的模型版本来减少显存需求。

    优化模型实现:检查代码中是否有不必要的显存占用,比如冗余的张量复制操作。使用 torch.no_grad() 为推理操作禁用梯度计算也可以节省显存。

    清理缓存:在训练前后使用 torch.cuda.empty_cache() 可以清理未使用的缓存,但这通常不会对已经分配的张量产生影响。这可能会对碎片化的显存有所帮助。

    分布式训练:如果您有多个 GPU,可以考虑使用 PyTorch 的分布式数据并行(DistributedDataParallel)来分散显存负载。

    累积梯度:为了模拟更大的 batch,可以在多个小 batch 上累积梯度,每 N 个小 batch 更新一次模型参数。

    16位精度训练:使用混合精度训练(如 NVIDIA 的 Apex 或 PyTorch 的自动混合精度)可以减少显存使用,同时维持大部分训练精度。

    调优显存管理:PyTorch 允许您使用环境变量 PYTORCH_CUDA_ALLOC_CONF 调整显存管理。例如,您可以设置 max_split_size_mb,以优化分割分配的大小,减少碎片化。

    关闭其他应用程序:确保没有其他应用程序在使用 GPU 资源。

    2024-02-23 16:48:33
    赞同 展开评论
  • 2.7B相对还是属于大模型,尽量用多卡训练,一般会考虑采用4卡,此回答整理自钉群“魔搭ModelScope开发者联盟群 ①”

    2023-03-22 17:38:32
    赞同 展开评论

包含图像分类、图像生成、人体人脸识别、动作识别、目标分割、视频生成、卡通画、视觉评价、三维视觉等多个领域

收录在圈子:
+ 订阅

热门讨论

热门文章

还有其他疑问?
咨询AI助理