为什么关掉FORCE_TORCHRUN=1就不cuda out of memery了

打印 上一主题 下一主题

主题 1011|帖子 1011|积分 3033

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
当关掉FORCE_TORCHRUN=1后就不再出现CUDA out of memory错误,可能有以下几方面缘故原由:
进程管理与资源分配
torchrun在分布式训练中会启动多个进程来利用多 GPU 进行盘算,每个进程都可能会分配一定的 CUDA 内存。假如FORCE_TORCHRUN=1时,可能由于进程管理或资源分配计谋题目,导致每个进程分配的内存总和凌驾了 GPU 的实际可用内存,从而出现CUDA out of memory错误。关闭FORCE_TORCHRUN=1后,可能不再以分布式训练的多进程模式运行,而是以单进程等其他方式运行,制止了多个进程对内存的竞争和过分分配,使得内存使用更加合理,不会超出 GPU 内存限制。
在分布式训练中,torchrun可能会预分配一定量的内存用于进程间通信等操纵,这些额外的内存分配在某些情况下可能会导致团体内存占用过高。当关闭FORCE_TORCHRUN=1,不使用torchrun的分布式启动方式时,就不会有这些额外的用于通信等目的的内存预分配,从而镌汰了内存压力。
模型加载与数据并行
在使用torchrun进行分布式训练时,通常会采用数据并行等计谋,即将模型复制到多个 GPU 上,并将数据分别到不同的 GPU 上进行并行盘算。在这个过程中,模型参数会在多个 GPU 上进行复制,这会导致内存占用成倍增长。假如模型本身比力大,加上数据并行带来的参数复制,很容易超出 GPU 内存。关闭FORCE_TORCHRUN=1后,可能不再采用数据并行方式,而是在单个 GPU 上进行模型训练,只需要加载一份模型参数,大大镌汰了内存占用。
在分布式训练中,为了包管数据在多个进程和 GPU 之间的正确传输和同步,可能需要额外的内存来存储中心结果和暂时数据。当关闭FORCE_TORCHRUN=1,不进行分布式训练时,就不需要这些额外的用于数据同步和传输的暂时存储空间,从而降低了内存使用量。
CUDA 环境设置与优化
FORCE_TORCHRUN=1时,torchrun可能会按照特定的 CUDA 环境设置来运行,这些设置在某些情况下可能不是最优的,大概与当前的硬件和软件环境存在一些不兼容的情况,导致 CUDA 内存管理出现题目,引发内存溢出。关闭FORCE_TORCHRUN=1后,可能会采用默认的或其他更适合当前环境的 CUDA 设置,使得 CUDA 内存管理更加高效,制止了内存溢出的题目。
分布式训练中可能会使用一些特定的 CUDA 优化技术或工具,这些技术或工具在某些情况下可能会对内存使用产生影响。当关闭FORCE_TORCHRUN=1,不进行分布式训练时,就不会启用这些可能存在题目的优化技术或工具,从而使内存使用更加稳定。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表