hpcaitech / Open-Sora

Open-Sora: Democratizing Efficient Video Production for All
https://hpcaitech.github.io/Open-Sora/
Apache License 2.0
21.76k stars 2.11k forks source link

Discussions for less CUDA memory 降低CUDA显存消耗的探讨 #462

Closed aulaywang closed 3 months ago

aulaywang commented 3 months ago

I am currently using two 45G L40s. I tried to reduce my GPU memory consumption with num_workers=0, but it doesn't work. I am curious if this project must be trained with an 80G A100? Are there any training tricks for low VRAM machines?"

我现在使用的是两块45G的L40s。我试图用num_workers=0来降低我的显存消耗,但这行不通。我很好奇这个项目必须要用80G A100训练吗?有没有针对低显存机器的训练技巧?

aulaywang commented 3 months ago

btw, my training command is

torchrun --standalone --nproc_per_node 2 ./scripts/train.py ./configs/opensora-v1-2/train/stage3.py --ckpt-path /data/hub/hpcai-tech/OpenSora-STDiT-v3 --data-path ./data/inter4k_caption_processed.csv

grad_checkpoint = False is also considered.

Dian-Yi commented 3 months ago

我简单查了下,如果只推理,不训练都要22g的显存(未实际测试)。有没有这么一种技术,把大模型计算模块原子化,推理过程中,执行需要哪个小模块,就加载参数gpu推理,推理结束后释放显存,这样说不定就能用8g的显存跑大几百g的大模型? 哪为大佬有相关的项目么?

aulaywang commented 3 months ago

我简单查了下,如果只推理,不训练都要22g的显存(未实际测试)。有没有这么一种技术,把大模型计算模块原子化,推理过程中,执行需要哪个小模块,就加载参数gpu推理,推理结束后释放显存,这样说不定就能用8g的显存跑大几百g的大模型? 哪为大佬有相关的项目么?

没错,推理我试过了,在45G显存条件下,v1.2只带的动360p的生成,480p/720p均带不动,如果能分到多卡上处理就好了

licj15 commented 3 months ago

我简单查了下,如果只推理,不训练都要22g的显存(未实际测试)。有没有这么一种技术,把大模型计算模块原子化,推理过程中,执行需要哪个小模块,就加载参数gpu推理,推理结束后释放显存,这样说不定就能用8g的显存跑大几百g的大模型? 哪为大佬有相关的项目么?

你可能需要这个: https://github.com/FMInference/FlexGen

Dian-Yi commented 3 months ago

我简单查了下,如果只推理,不训练都要22g的显存(未实际测试)。有没有这么一种技术,把大模型计算模块原子化,推理过程中,执行需要哪个小模块,就加载参数gpu推理,推理结束后释放显存,这样说不定就能用8g的显存跑大几百g的大模型? 哪为大佬有相关的项目么?

你可能需要这个: https://github.com/FMInference/FlexGen

简单看了下,好活值得期待。不过还是有很多限制,1.支持的大语言模型不是很多,2.该作者没有透露最低硬件要求,比如8g显存,32g内存这种平民级机器能否支持也有待商榷。

zhengzangw commented 3 months ago

训练的情况下减小 memory 有以下方法:

  1. grad_checkpoint = True 可以降低内存使用(num_workers 大小没有关系)
  2. 降低你训练使用的分辨率和长度(比如只训练 320p, 2s 的视频)以及 batch size,这可以通过修改 bucket config 完成
  3. 使用 sequence parallism(目前我们只支持了推理,还没支持最新版本的训练)
zhengzangw commented 3 months ago

有一个可能的方案,就是用 lora 训练,应该就可以训练高分辨率了,内存占用应该也不大。不过我们暂时没有支持。

aulaywang commented 3 months ago

有一个可能的方案,就是用 lora 训练,应该就可以训练高分辨率了,内存占用应该也不大。不过我们暂时没有支持。

我可以顺着这个思路研究一下,目前看了训练流程,说实话离个人research还有点难哈哈

zhengzangw commented 3 months ago

如果是为了发 paper 的话,可以试着用 360p/512 的,内存消耗小,论文中比较常见也容易比较。