전의 그 kohya씨 노트를 보다가 어 하는게 있어서 몇가지 테스트

우선 뭘 봤는지부터 보자

밑에 정규화 이미지수 말했던 그 페이지임


스크립트 옵션중(GUI에서도 세팅가능)

문장에서 말하는 메모리는 비램인 모양. V램이라고 좀 적지...

명시는 안되어 있는데 이건 걍 내가 실험해서 그런갑다 하는 것



省メモリ化のためmixed_precision="bf16"(または"fp16")、およびgradient_checkpointing を指定します。

xformersオプションを指定し、xformersのCrossAttentionを用います。xformersをインストールしていない場合、エラーとなる場合(mixed_precisionなしの場合、私の環境ではエラーとなりました)、代わりにmem_eff_attnオプションを指定すると省メモリ版CrossAttentionを使用します(速度は遅くなります)。

省メモリ化のためcache_latentsオプションを指定してVAEの出力をキャッシュします。

메모리 경량화를 위해 mixed_precision="bf16"(혹은"fp16"), 거기에 gradient_checkpointing를 지정합니다.

xformers 옵션을 지정해, xformers의 CrossAttention을 사용합니다. xformers을 인스톨하지 않은 경우 or 에러가 나는 경우(mixed_precision없는 경우, 제 환경에서는 에러가 났습니다), 대신 mem_eff_attn옵션을 지정하면 메모리 경량화판 CrossAttention을 사용합니다(속도는 느려집니다).

메모리 경량화를 위해 cache_latents 옵션을 지정하여 VAE의 출력을 캐시합니다.


gradient_checkpointingを外し高速化します(メモリ使用量は増えます)。またmixed_precisionを外し精度向上を図ります。

バッチサイズを増やし、高速化と精度向上を図ります。

gradient_checkpointing를 꺼 고속화합니다(메모리사용량은 늘어납니다). 또 mixed_precision를 꺼 정도향상을 노립니다.

배치사이즈를 늘려, 고속화와 정도향상을 노립니다.


省メモリ化のため、ステップ当たりの学習回数がtrain_dreambooth.pyの半分になっています(対象の画像と正則化画像を同一のバッチではなく別のバッチに分割して学習するため)。元のDiffusers版やXavierXiao氏のStableDiffusion版とほぼ同じ学習を行うには、ステップ数を倍にしてください。

(shuffle=Trueのため厳密にはデータの順番が変わってしまいますが、学習には大きな影響はないと思います。)

메모리 경량화를 위해, 스텝당 학습횟수가 train_dreambooth.py의 반으로 되어 있습니다(대상의 이미지와 정규화 이미지를 동일 배치에서가 아니라 별도의 배치로 분리시켜 학습시키기 때문). 원래의 Diffusers판이나 XavierXiao씨의 StableDiffusion판하고 거의 같은 학습을 하기 위해서는, 스텝수를 배로 해주세요.

(shuffle=True를 위해 엄밀히는 데이터의 순서가 바뀌어 버리지만, 학습에 큰 영향은 없을걸로 생각합니다)



그래서 뭘 실험해봤느냐
mixed precision, gradient chechpointing, Memory efficient attention, cache latents 네개를 만져봄

결과 품질은 몰?루. 일단 눈으로 비는건 학습속도뿐이니

시간많고 품질에 까다로운 분은 괜히 품질 나빠진다는 옵션은 손대지 마시길

저도 아직 다 이해하고 하는 짓이 아닌지라 ...


cache latents

비램에 담을 이미지를 "램"으로 캐시하는 듯 (즉 느려짐)

이건 제작자가 단어를 잘못쓴거 같음

통상 빠른 저장매체에서 느린쪽으로 복사하는건 백업이던 뭐던 다른 용어를 써야지 캐싱이라 하면 되나...

캐시는 느린쪽에서 빠른쪽으로 담을때나 써야지
켜면 학습이미지를 램에 퍼담는 과정을 거치는데, 이때 시퓨 사용량도 오만상 오름
이것때문에 느려지는 요소가 있는지는 아직 확인못함. 위의 두 옵션을 끄고 이걸 켜놓고 테스트해봐야?


일단 동일세팅에서 캐시 켜고끈거 비교해봄. 다른세팅을 다 끈게 아니라는거 유념.

껐을때 (cache latents OFF) - 비램 13.5GB, 1.07s/it
켰을때 - 비램 11.4GB, 1.1it/s
속도는 학습시작후 비슷한 시간대의(안정화 단계 가기까지 속도가 계속 증가중이므로) 속도를 대충 찍어봄
착실하게 비램 절약효과와 학습속도 개선이 있는 대신 단점이 캐싱중에 시퓨사용량이 정신나갈 정도로 오름
이 과정이 느리다면 CPU사용량이 100%인지 확인해볼 것. 만일 이렇다면 시퓨에서 발목잡고 있는거임

그리고 비램 2G 깎자고 이 시간과 시퓨를 써야 하나 고민된다면 옵션 끌 것
단 kohya씨는 속도에 관한 언급을 안했는데, 실험처럼 속도 증가 효과가 있으니 캐시가 빨리된다면 켜는것을 추천
학습 이미지 수는 적고 학습 스텝수가 높은 경우는 켜는게 나을 듯


Memory efficient attention

속도 느려짐. 켜면 간신히 굴러갈 정도 됨

xformers가 없거나 관련 에러가 나는 사람은 울며 겨자먹기로 이거 쓰라함


mixed_precision
이거에 관한 별다른 말이 없다?

전에 얼핏 이걸로 품질이 하락한다는 걸 봤던거같은데...

여하간 그래서 이거만 켰음


gradient chechpointing

이건 다른데서 글을 봤던거같은데, 명확히 이해는 못함

일단 제작자왈 속도와 비램사용량을 언급했으니 취향껏



4090 사용중

위의 넷을 몽땅 끔(mixed precision 끌라믄 밑에 Full fp16 training도 꺼야됨) - 비램터짐

...... 아놔. 이거 하실 챈럼은 돈으로 바ㄹ... 아 아니

Memory efficient attention 살림 - 23.5G 사용. 학습 6% 쯤에서 1.25s/it
mixed precision 살림 - 14G 사용. 학습 5%쯤에서 1.12it/s

그래서 지금은 세개 끄고 fp16 지정해서 진행중. 대충 1.5배 빨라졌나


최종요약

mixed precision(fp16)

gradient chechpointing, Memory efficient attention, cache latents 셋 체크해제
요렇게 하기 전 대비 학습속도 1.5배
실 속도는 각자의 시스템과 학습이미지에 따를것임




비램 8G 비길래 남는 여유로 webUI 돌렸더니 시스템 디지더라...

4090 챈러들 지겹다고 이렇게 하지마 OTL