/ AI

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과 같이 온전히 학습을 통해 생성된 모델을 사용하는 것이 좋다. 병합 모델의 경우 병합을 거치면서 텍스트 인코더의 토큰 해석률이 떨어지는 문제가 발생하기 때문에 학습 퀄리티가 떨어질 수 있기 때문이다.