2023년 7월 27일 SDXL 1.0 업데이트 수정
GUI가 아니라서 절망스럽겠지만 SDXL kohya_ss LoRA CUI 학습 사용법임.
1.0 기준으로 1.1 이후의 미래에는 달라질 수 있음. 일부 설치 사용법은 https://arca.live/b/aiart/68205055 에서 긴빠이 해옴.
1. 필요한 것
- 권장 VRAM 12GB 이상 NVIDIA 그래픽 카드 (1024,1024)
- 최소 VRAM 8GB 이상 NVIDIA 그래픽 카드 (768,768)
- 라데온은 윈도우에서 불가능함. 리눅스라면 방법이 좀 다르지만 가능할지도?
- Windows 10/11
- 리눅스에서 설치는 가능하나 방법이 좀 다름.
- python 3.10 하고 git
- 설치 시 PATH 환경 변수 추가 하기.
- stable diffusion WebUI (automatic1111 또는 vladmandic)
- WD Tagger 1.4 https://github.com/yjunej/stable-diffusion-webui-wd14-tagger
- ComfyUI
- 학습할 데이터셋 (리사이징 안 해도 된다고 함, 학습할 해상도보다 크기만 하면 됨)
- 관련 지식 (원 클릭, 세 줄 요약, 기본 설명 그런 거 없다)
https://github.com/kohya-ss/sd-scripts/tree/sdxl 을 기반으로 설명할 것임
2. 설치
먼저 설치할 곳에서 파워쉘을 열어야한다. Shift + 우클릭 한 다음 여기에 Powershell 창 열기를 선택하면 창이 열림.
그런 다음 git clone https://github.com/kohya-ss/sd-scripts -b sdxl 입력. 그럼 sd-scripts 폴더가 생겼을거임.
그런 다음 cd sd-scripts 입력. 팁을 하나 주자면 sd 까지만 입력하고 TAB 키를 누르면 자동완성 해주기도 한다.
그런 다음 python -m venv venv 입력해서 가상환경 만들고
그런 다음 .\venv\Scripts\activate 입력해서 가상환경에 진입한다.
그런 다음 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 입력하고
그런 다음 pip3 install --upgrade -r requirements.txt 입력하고
그런 다음 pip3 install xformers==0.0.20 입력해서 이것저것 설치한다.
bitsandbytes_windows 설치는 생략한다. 다른 optimizer 사용으로 bitsandbytes를 사용하지 않을것이다.
그런 다음 accelerate config 입력하고
This machine [엔터]
No distributed training [엔터]
NO [엔터] - 기본값이 NO 엔터만 쳐도 됨!
NO [엔터]
NO [엔터]
all [입력]
fp16 [숫자 1 눌러서 선택 후 엔터]
sd-scripts에 있는 PowerShell 창은 닫을 필요는 없음. 닫았다면 sd-scripts 폴더에서 Shift + 우클릭 한 다음 여기에 Powershell 창 열기를 선택한 다음 .\venv\Scripts\activate로 다시 실행하면 됨.
3. 데이터셋 태깅하기.
그림체 학습인 경우에는 태깅을 권장하지 않음.
데이터셋을 아직 구하지 못했다면 픽시브 단부루 구글 기타등등 알잘딱 구해놓 길 바람. 그리고 데이터셋만 잘 구하면 학습은 잘된다. 데이터셋을 목적에 맞게 잘 수집하길 바람. 잘 구하는 방법은 너무 길어서 여따 적진 않을거임.
잠시 WebUI를 키고 확장기능을 다운 받는다. https://github.com/yjunej/stable-diffusion-webui-wd14-tagger
혹시 설치 안 했으면 설치해라. 설치하고 webui 재시작. 인풋 이미지 경로에 너가 모아둔 이미지 파일들 경로 적어두고 밑에 설정에 두 개 체크한 다음에, 가중치는 0.35가 적절한데 바꾸고 싶으면 바꾸든가 해라. 높을수록 더 정확한 태그만 붙여줌. 설정 다 했으면 interrogate 누르면 끝. 이제 WebUI는 꺼도 됨. 태깅 끝.
4. 학습 설정
GUI 버전과 다르게 CUI 버전은 toml 파일을 만들어서 진행해야한다. 이 세팅은 아직 정확한 세팅이 아니니 참고.
메인 설정의 toml 파일과 데이터셋 설정용 toml 파일 총 두개의 toml 파일을 만들어야 한다.
toml 파일에는 \ 또는 역슬래시 문자가 들어가면 안됨.
일단 메인 toml 파일. 대충 이렇게 생겼다.
pretrained_model_name_or_path = "C:/dos/sdxl/sd_xl_base_1.0.safetensors"
dataset_config = "C:/dos/sdxl/data.toml"
output_dir = "C:/dos/sdxl/sdxl"
output_name = "sdxl"
resolution = "1024,1024"
train_batch_size = 4
max_train_steps = 500
enable_bucket = true
bucket_no_upscale = true
full_bf16 = true
save_model_as = "safetensors"
optimizer_type = "adafactor"
optimizer_args = [ "scale_parameter=False", "relative_step=False", "warmup_init=False" ]
lr_scheduler = "constant_with_warmup"
lr_warmup_steps = 100
learning_rate = 0.0002
no_half_vae = true
xformers = true
mixed_precision = "bf16"
save_precision = "bf16"
cache_latents = true
cache_text_encoder_outputs = true
gradient_checkpointing = true
save_every_n_epochs = 1
network_train_unet_only = true
min_timestep = 0
max_timestep = 1000
network_module = "networks.lora"
pretrained_model_name_or_path는 sd_xl_base_1.0.safetensors이 있는 절대 위치를 입력해줘야 한다.
dataset_config는 데이터셋 설정용 toml이 있는 절대 위치를 입력해줘야 한다.
output_dir는 LoRA 파일이 저장되는 위치.
output_name는 LoRA 파일 이름.
resolution는 학습 해상도. VRAM 8GB이라면 768,768로 변경해야한다.
train_batch_size는 배치 사이즈. VRAM 8GB이라면 1로 변경해야한다.
max_train_steps는 정지하는 시점의 스텝. 주의할것은 GUI 버전하고 다르게 CUI 버전의 총 스텝수는 max_train_steps에 train_batch_size를 곱한 수이다. 안그러면 바짝 타버린 LoRA가 나올 수 있다.
이 이하의 세팅값들은 나도 잘 모름. 다만 learning_rate는 대충 눈 감고 고른거니 참고.
그런 다음 데이터셋 설정용 toml. 대충 이렇게 생겼다.
[[datasets]]
[[datasets.subsets]]
image_dir = 'C:/dos/sdxl/ika'
class_tokens = 'anime ikamusume 1girl'
num_repeats = 5
caption_extension = ".txt"
image_dir는 데이터셋이 있는 위치. 주의할것은 GUI 버전하고 다르게 CUI 버전은 이미지가 들어있는 폴더를 지정해야한다.
class_tokens는 이 데이터셋에 대한 설명.
num_repeats는 리피트. 대충 에포크가 10을 넘지 않도록 설정한다. (max_train_steps x train_batch_size) ÷ (num_repeats x 데이터셋 이미지수 수) 의 올림 수치가 에포크 수이다.
caption_extension은 캡션 파일 확장자.
이렇게 텍스트 파일을 만든 다음 확장자를 .toml로 저장하자. 여기서는 메인 toml 파일을 C:\dos\sdxl\run.toml 로 저장했고 데이터셋 설정용 toml을 C:\dos\sdxl\data.toml 으로 저장했다.
5. 학습 가동
닫았다면 sd-scripts 폴더에서 Shift + 우클릭 한 다음 여기에 Powershell 창 열기를 선택한 다음 .\venv\Scripts\activate로 다시 실행하면 됨.
sd-scripts에 있는 PowerShell 창에 아래처럼 입력한다.
accelerate launch sdxl_train_network.py --config_file="C:\dos\sdxl\run.toml"
정상적으로 가동되면 평소처럼 학습을 진행할거임. 그래픽카드 성능에 따라 30분에서 2시간 정도 걸릴 수 있음.
loss=값에 nan 안뜨면 잘 되고 있는것이고 nan 뜨면 망한거임.
6. LoRA 사용 방법
먼저 ComfyUI을 설치한 다음 실행하고 https://comfyanonymous.github.io/ComfyUI_examples/sdxl/ 의 사진을 다운로드 받은 다음 ComfyUI으로 드래그한다.
그런 다음 LoRA를 로드할 수 있도록 설정한다.
끝
SDXL 1.0 캐릭터 학습 결과물.