표기: 옵션 -> VRAM 사용량 (1 epoch에 걸린 시간)


idle -> 0.8GB

batch 1 -> 12.2GB (59)

batch 2 -> 19.5GB (41)


idle -> 1.3GB

xformers + batch 1 -> 7.3GB (53)

xformers + batch 2 -> 8.4GB (30)

xformers + batch 3 -> 9.8GB (25)

xformers + batch 4 -> 11.4GB (22)

xformers + batch 5 -> 12.7GB (20)

xformers + batch 6 -> 14.1GB (20)

xformers + batch 7 -> 15.2GB (19)

xformers + batch 8 -> 16.7GB (19)

xformers + batch 9 -> 18.1GB (18)

xformers + batch 10 -> 19.3GB (18)

xformers + batch 11 -> 20.8GB (17)

xformers + batch 12 -> 22.1GB (18)

xformers + batch 13 -> 23.5GB (19)

xformers + batch 14 -> 23.5GB + shared 1.0GB (25)


idle -> 0.8GB

xformers + memory_efficient_attention + batch 1 -> 6.6GB (85)

xformers + memory_efficient_attention + batch 2 -> 7.8GB (51)

xformers + memory_efficient_attention + batch 8 -> 16.4GB (35)


idle -> 0.8GB

gradient_checkpointing + xformers + batch 1 -> 7.0GB (74)

gradient_checkpointing + xformers + batch 2 -> 7.8GB (42)

gradient_checkpointing + xformers + batch 5 -> 9.2GB (27)

gradient_checkpointing + xformers + batch 14 -> 13.9GB (23)

gradient_checkpointing + xformers + batch 20 -> 17.0GB (23)

gradient_checkpointing + xformers + batch 30 -> 21.9GB (23)

gradient_checkpointing + xformers + batch 35 -> 23.6GB (35)



옵션과 모델, 데이터에 따라 시간은 천차만별이니, 상대적인 비교로만 확인하셈.

잘 보면 gc, mea 다 끄고 xformers만 쓰면서 batch_size 11로 하는게 스윗스팟임.


아무래도 4090은 HBM2e 메모리가 아닌 GDDR6X를 써서 메모리 대역폭 문제도 있고, 아니면 코어 성능 자체가 좀 모자란건지 batch_size를 무작정 늘린다고 성능이 좋아지진 않음.


다만 VRAM이 부족한 사람들은 gradient_checkpointing + xformers를 사용하면 저메모리 그래픽카드에서도 학습을 돌릴 수는 있을 듯. 다만 속도는 안 나올듯. 4090도 1대로는 속도 안 나오는데.


DeepSpeed는 테스트 중. Kohya_ss로는 DeepSpeed가 제대로 안 돼서 코드 분석 중.