일단 이 글은 기본적인 CLI 툴 사용 지식에 대해 알고 있는 사람을 기준으로 설명함.

왜냐? 병합 방법이 GUI로 없어..

또한 git이 설치되어 있고 파이썬 3.10 이상인 환경을 권장함. 앞으로 명령어는 이 색깔로 적도록 하겠음.


일단 시작하자면, 우리는 SuperMerger나 기타 WebUI에 있는 확장 형태의 무언가가 아닌 순수한 LyCORIS 구현체를 이용할 것임.

그러니 일단 git clone부터 갈기도록 하고, 윈도우 사용자라면 파워쉘, 리눅스 사용자라면 터미널 창을 열어 다음 명령어를 입력하자.

git clone https://github.com/KohakuBlueleaf/LyCORIS.git

cd LyCORIS


그럼 이제 LyCORIS 폴더 안에 와 있을거임.

다음 명령어를 입력하자. venv 설정인데, 시스템 전역에 pip 패키지가 설치되는 것을 방지하도록 하기 위함임.

전역에 pip 패키지가 설치되게 되면, 추후에 다른 파이썬으로 짜여진 코드를 실행하기 위해 패키지를 설치할 때 꼬일 수 있기 때문임.

환경에 진짜 뒤지게 민감하고 하위 호환이라고는 가져다 버린 파이썬이니 꼭 venv를 사용하도록 하자.

python -m venv venv


[리눅스 환경일 경우]

source venv/bin/activate


[윈도우 환경일 경우]

.\venv\Scripts\activate.ps1


터미널의 맨 앞에 (venv) 라는 문구가 붙었다면 다음 과정을 진행하자.


Torch 설치

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 (본인 CUDA 버전에 맞춰서 설치할 것. 12.x 이상일 경우도 cu118로 설치해도 됨.)

(선택) pip install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cu121 (12.x 이상, 버전 깔맞춤하고 싶다면 이렇게 설치)


필수 패키지 설치 (requirements.txt에 버전이 기입이 안 되어 있어서 호환성 이슈 터짐. 다음 버전으로 설치해야만 작동함.)

pip install safetensors==0.2.6 diffusers[torch]==0.10.2 transformers==4.26.0


merge.py 이동

[리눅스 환경일 경우]

mv tools/merge.py merge.py


[윈도우 환경일 경우]

mv .\tools\merge.py merge.py


이제 준비는 끝임.


아래와 같은 형식으로 명령어를 입력해 LyCORIS 기반 LoRA, 일반 LoRA 등을 병합할 수 있음.

python merge.py ./모델.safetensors ./로라.safetensors ./병합완료모델.safetensors --weight=(평소에 쓰던 로라 가중치)

python merge.py ./모델.safetensors ./로라.safetensors ./병합완료모델.safetensors --weight=(평소에 쓰던 로라 가중치) --dtype=fp16 (선택 - fp16으로 내보내기(용량이 줄어듦, 보통 fp16 모델이 많기에 내 생각엔 이거 추가해주는 게 좋을듯.))


병합할 모델과 로라의 경로를 넣어주고 돌리면 됨.

개인적으로는 모델과 로라를 미리 LyCORIS 폴더 안에 넣어두고 ./로라.safetensors 혹은 .\로라.safetensors 식으로 두고 병합하는 게 편했음.


아래와 같이 실행하면 알아서 병합해줄 것임.

python merge.py /workdir/SD-WebUI-Docker/data/StableDiffusion/baseModel.safetensors /workdir/SD-WebUI-Docker/data/Lora/useLoRA.safetensors /workdir/SD-WebUI-Docker/data/StableDiffusion/newModel.safetensors --weight=0.4 --dtype=fp16


이런 식으로 실행하고 나면, merge.py의 세번째 인자인 ./병합완료모델.safetensors 부분의 경로에 병합 완료된 모델이 저장되어 있을 것임.

근데 여러 개의 LoRA를 병합해야 하면 LyCORIS 폴더 안에 넣어두고 로라 하나 적용해둔거 out1.safetensors로 저장하고 다시 그걸 불러와 로라 하나 더 병합한 모델을 out2.safetensors로 저장하는 식의 야가다를 좀 뛰어야 할거임.

나는 걍 자동화하는 쉘 스크립트 하나 짜서 쓸 생각..


아무튼 대충 병합 방법이였음 ㅇㅇ 도움이 되는 사람이 있길 바람.