kohya_ss를 사용하여 LoRA 만들기
기존 모델에 원하는 캐릭터, 그림체를 적용할 수 있는 LoRA를 만들어 보자.
드림부스편에서도 잠시 소개하였었는데, 아예 새로운 모델을 만드는 것보다 용량이 작아 간편하고 유연하다는 장점이 있다. 유저 레벨에서의 사용 방식은 기존의 embedding 이라는 더 직관적인 이름의 기술과 비슷하다.
드림부스 학습에서 사용했던 kohya_ss라는 툴을 사용할 것이다.
공식 가이드는 이곳에서 확인할 수 있다.
LoRA 생성
GUI 환경
.\venv\Scripts\activate
python lora_gui.py
kohya_ss가 설치된 경로에서 위 명령어를 실행하면 GUI 환경에서 LoRA를 생성할 수 있다.
CLI 환경
train_network.py
파일을 사용한다.
드림부스 이용
드림부스 가이드와 방식이 거의 완전히 동일하다. 마지막 학습 실행 단계에서만 약간의 차이가 있다.
우선, train_db.py
대신 train_network.py
를 실행한다. 즉 .bat
파일에서 해당 부분만 바꾸어 주면 모델 대신 LoRA 파일이 생성되는 것이다. 모델 저장 관련된 것을 제외하고 기존의 거의 모든 옵션이 사용 가능하다. 단, stop_text_encoder_training
은 지원되지 않는다.
드림부스에서 사용한 옵션을 완전히 그대로 사용하면 안 되고, 작은 차이점이 있다. 이는 아래에서 설명한다.
LoRA 학습 관련 옵션
--network_module
옵션에 학습될 모듈의 이름을 명시한다. networks.lora
와 호환되므로 이것을 명시하면 된다.
--network_module=networks.lora
learning rate는 1e-4
로 설정한다. 드림부스에서 사용한 값보다 크므로 주의해야 한다.
예시 옵션은 다음과 같다.
accelerate launch --num_cpu_threads_per_process 12 train_network.py
--pretrained_model_name_or_path=..\models\model.ckpt
--train_data_dir=..\data\db\char1 --output_dir=..\lora_train1
--reg_data_dir=..\data\db\reg1 --prior_loss_weight=1.0
--resolution=448,640 --train_batch_size=1 --learning_rate=1e-4
--max_train_steps=400 --use_8bit_adam --xformers --mixed_precision=fp16
--save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=42 --color_aug
--network_module=networks.lora
이로써 간편하게 LoRA 학습이 가능하다. 더 다양한 옵션과 추가적인 정보는 공식 가이드를 참조하면 된다.
팁
베이스로 사용할 모델은 병합 모델 대신 Nobel AI의 유출 모델 animefull
과 같이 온전히 학습을 통해 생성된 모델을 사용하는 것이 좋다. 병합 모델의 경우 병합을 거치면서 텍스트 인코더의 토큰 해석률이 떨어지는 문제가 발생하기 때문에 학습 퀄리티가 떨어질 수 있기 때문이다.