더 정확하게 쓴 글 : https://arca.live/b/aiart/71607955

이 글은 앞으로 수정 안할거고 틀린것도 많지만 다음 글에 쓸데없는 정보 너무 많아서 맨 처음 학습할때 가독성 떨어지니까

어떤 글 볼지는 자유에 맡김


나 비전공자고 ai그림 배운지 2주일도 안 됐음

대충이라도 선택지 이해 못하면 안되는 병 있어서 용어 정리한거니까 알아서 걸러

아카에 있는거, 빙ai 합쳐 긁어서 신뢰도 테스트 안한 정보니까 댓글로 정정좀 해주셈

그리고 이 사이트 업뎃할때마다 스크립트 순서 바껴서 옵션 이름 확인하고 해


코랩 로라 링크

https://colab.research.google.com/github/Linaqruf/kohya-trainer/blob/main/kohya-LoRA-dreambooth.ipynb#scrollTo=FKBrTDPrcNjP


*Start Training까지 설정 완료되기 전에 ▶ 누르지마셈

코랩은 하루에 계정마다 제한시간이 있고

여기서 오른쪽에 RAM이랑 디스크 보이거나 연결됨이나 걍 초록색이 떠있으면 아무것도 안해도 6시간 카운트가 시작됨

2시간 죽어라 설정해놓고 4시간 학습하다가 끝날때쯤에 연결끊기는꼴 보기싫으면

키지도 말고 다음에 또 학습시킬때 쓰게 개인 설정 미리 메모하셈

난 이거 맨 처음 실행할려고 공부하는 도중에 구글계정 5개 만들었다.. 켜놓고 쓰는거 기준으로 작성함

그리고 ▶ 이거 안누르고 한시간인가 두시간 지나면 자동으로 연결 끊어지고 가상 폴더에 있는거 다날라감 

창 끈거 아니면 입력한건 유지되니 다시 맨 첨부터 순서대로 누르면 되긴해


그리고 (선택) 달려있는거중에 필요없다싶으면 ▶ 하지말고 다음걸로 넘어가

(선택)n.1 했다고 n에 있는거 다 안해도 되는거 아니다


모든 구드(구글드라이브) 경로는 1.1에서 마운트 해야지만 접근이 가능하고

지금 계정에 없는 다른 계정 폴더 바로가기도 똑같은 폴더로 인식함


아 그리고 4. 이렇게 되있는거에서  ▶ 이거 누르면

4.1이랑 4.1.1이랑 4.1.2랑  4.2랑 4.3 다 켜질려고 대기걸리는 무친상황 발생하니 펼쳐진거 제대로 보고 눌르셈


1.1 코랩 응용프로그램을 이 페이지 끄면 사라지는 넷상 가상 드라이브에 다운받는거임

branch : 비워 / 안비우면 자동으로 경로설정 안된다

install xformers : 켜 / 기술 이름임. 키면 프롬 조금 안먹지만 나중에 이 모델 쓸때 한번에 그림 여러개 뽑아도 검은이미지 안나옴

mount drive : 켜 / 네 계정 구글 드라이브 연동 (실시간 반영 잘 안됨, 구드에서 가상드라이브로 무식하게 마우스 잡고 옮기면 구드에 있는거 없어진다 경로설정하셈)

▶

앞으로도 이렇게 뜨기전에 다른 ▶ 누르면 조진다


1.2 : 이 페이지 가상 드라이브의 폴더 구조를 직관적인 ui로 띄워줌

open in new tab : 켜 / 새 페이지에 ui띄울지(체크) 스크롤 오지게 올려야하는 여기만 띄울지(안체크) 결정하는거임

▶

링크 뜨는거 눌러서 폴더 키고 치워놔


2. 로라로 만들 모델을 가상드라이브에 다운

구드에 있는 모델 그대로 디렉토리 경로 지정해서 쓸거면 패스해 


(선택)2.1 : 

modelname : 오른쪽 클릭해서 원하는 모델 선택하셈 (1.x나 2.x 하나만 받아도됨)

모델 종류 : https://arca.live/b/aiart/68304467?target=all&keyword=Treebark&category=%EC%9E%90%EB%A3%8C%EC%8B%A4&p=1

▶


(선택)2.2 : 원하는 모델 다운받는거

허깅페이스에 올리고 url 붙여넣고 개인 토큰 올리래

https://arca.live/b/aiart/68697468?target=all&keyword=iom+%ED%86%A0%ED%81%B0&p=1 참고해 난 안해봄


(선택)2.3 : 가상드라이브에 vae 다운하는건데 나중에 vae 있어야만 쓸수있는 학습기술 있(었는데 이거쓰다보니 없어져있음)

anime는 내가알기로 베리믹스임 코랩에 기본으로 깔리는 vae 그거

뭐쓸진 취향따라 정해 목록에 맘에드는거 없으면 vae도 나중에 구드 디렉토리경로 사용가능

▶


3. 데이터셋 (배울 이미지) 다운 or 경로설정


데이터셋의 이미지는 50~150장, 100장이 적당함 (많아서 좋을거 없음)

어제까지만 해도 aspect ratio bucketing이란 기술을 넣어놔서 512x512 이상 해상도를 자동으로 축소시켜서 학습시키는 기능이 있었는데,

이제 안보이는걸 보면 자동 내장이 된건지, 학습할 이미지가 축소중에 조금씩 잘리는 문제가 있어서 없애버린건지 모르겠음.

어쨌든 512x512로  자를거면 학습속도 빨라지긴 한대 자를거면 이거 써라

https://github.com/Trainraider/training-image-processor


직접 정규화 데이터셋 가공할거냐?

정규화 이미지 최대 계산식 (넘는건 안쓰이지만 부족하면 과적합남)

[repeats의 수 * 데이터셋 이미지 장수 ≧ 정규화 repeats 수 * 정규화 이미지 장수]

= [1epochs의 이미지 데이터 수 ≧ 정규화 이미지 repeats 수 * 정규화 이미지 장수]

→정규화 이미지 갯수 = 10리피트 10에포크면 대충 데이터셋 50장에 정규화 500장 / 100리피트 1에포크면 대충 50장에 5000장


정규화 모르면 걍 넘어가거나 밑에서 받어

실사 정규화 파일 : https://github.com/JoePenna/Stable-Diffusion-Regularization-Images

애니 정규화 파일 : https://huggingface.co/datasets/waifu-research-department/regularization

용량 ㅈㄴ 크니까 구드에 올리고 경로설정하셈


3.1 : 데이터셋의 경로 설정

이렇게 디렉토리 경로 복사하셈

train data dir : 구드 데이터셋 폴더 디렉토리 경로

reg data dir : 구드 정규화 이미지 폴더 디렉토리 경로 (없으면 냅둬)

▶


(선택)3.2 : .zip파일 구드나 인터넷에 올려서 디렉토리 경로 지정하면 거기에 풀어줌

.zip파일 안에 폴더나 쓸모없는 파일 있으면 안된다 

이미지 전체선택해서 안에 폴더 안들어가게 옵션 설정하고 압축해서 구드에 올리셈

zipfile url : 위에 3.1에서 구드 경로 복사하는 이미지 보고 붙이셈 /content/drive/MyDrive/~로 시작할거임

unzip to : 어느 폴더에 풀지 정하는거같은데 응용하면 나중에 생길 정규화 폴더 등에 다양하게 쓸수있을거같지만 난 몰라


(선택)3.3 : 웹사이트 정하고 세부 검색해서 이미지 퍼오는건데 웬만하면 데이터셋은 직접 추출해

관련 정보는 다른글 참조하셈 난 이거안씀


4. 데이터셋 가공



(선택)4.1 : 쓰지마

delete metadata : 아까 다운해두거나 경로설정해둔곳 파일중에 학습에 필요없거나 디렉토리에 써져있는 조건에 안맞는거 있으면 지워버리는거임 근데 멀쩡한 이미지랑 미리 만들어둔 태그 .txt랑 .캡션 다 지운다

convert : 투명도 데이터 있는 이미지에서 투명도 없애버리고(RGB) 흰색으로 바꿈 

random color : 위에 흰색으로 바꾼다는걸 아무 색깔로 바꿈

모르고 키면 핵폭발이 일어나겠지?


4.2 : 데이터셋에 미리 이미지랑 같은 이름.txt나 .caption으로 프롬프트 넣을 줄 모른다면 써야함

걍 이미지만 있는 데이터셋 안에 이미지 파일이랑 똑같은 이름의 .txt이나 .caption 넣어주는거임


(선택)4.2.1 : 프롬프트가 아니라 .caption으로 이미지를 학습시키거나 뽑을 생각이면 쓰셈

걍 파일추가라서 나중에 .txt로 바꿔서 학습해도 별 문제없음 (뭐.. 아마도)

나는 .caption으로 이미지 뽑는사람 못봤다

▶


(준선택)4.2.2 : .txt의 태그 파일을 데이터셋 안 이미지마다 분석해서 추가해줌

.txt파일 있는상태에서 이거 실행하면 안 합쳐지고 미리 넣어둔 .txt파일 날라간다


batch size : 한번에 몇개의 이미지에 태그를 붙이는 .txt파일을 생성할지 정함

높으면 속도 빠른건 당연한데 1이면 퀄리티 높아진다는 카더라가 있음 어차피 얼마 안걸림

max data loader n workers : 냅둬 / 나도 몰라.. 태그 신경써서 붙일거면 코랩에서 안 붙이고 수작업하지

model : swin, convnext, vit 세 종류가 있는데 빙ai랑 지랄하며 머신러닝을 공부한 결과 swin이 다른 모델의 단점을 극복한 상위 모델인걸 배웠음 (틀려도 몰라) https://better-tomorrow.tistory.com/entry/Swin-Transformer

threshold : 일반,그림체,배경이 학습목적일 때 : 0.35 / 사물,캐릭터 : 0.85 (1에 가까울수록 확실한 태그만 붙임)

▶


(선택)4.2.3 : 모든 데이터셋에 공통된 태그(프롬프트)를 넣고싶으면 사용

로라 자체가 프롬프트(태그)로 가중치 넣는거라 딱히 쓸모없다고 생각하지만 흔한 프롬에 끼얹거나 할때 창의력 발휘해서 쓰삼

전체프롬 추가하는게 꼭 좋은게 아닌게 캐릭터 로라같은경우에 아예 수작업으로 모든 이미지의 특징 태그를 지워서 

프롬프트에 뭘 쓰던 나오게 로라에 세뇌시키는방법도 쓰더라


extension : .txt랑 .caption중에 넣을거 선택

custom tag : 너가 만들거나 넣고싶은 태그 적어

append : 체크 / 이미 있는 태그 파일에 custom tag 넣는거임

참고로 이거 실행하면 무슨짓을 해도 custom tag 하나 달랑 적혀있는 ..txt파일이 이미지마다 하나 더 생기는데 그냥 유저 확인용인지 무슨 연관이 있는지는 모름


5. 학습과 관련된 설정 후 학습시작

이제부터 헬게이트가 열린다


5.1

v2 : 꺼 / 몰라 SD2.x 모델 쓰면 체크하는건가? 난 SD1.x 모델만 써서 모르겠음

v_parameterization : 꺼 / 몰라

project name : 너가 만들 로라 이름. 로라 쓸때마다 프롬에 이 이름 들어간다 (영어로 띄어쓰기 대신 언더바 _ 붙여서 해)

pretrained model name or path : 훈련시킬 모델의 디렉토리 경로. 2.1번에서 구드경로 안쓰기로 정하고 다운받은사람은 (/content/pretrained_model/~) 이 경로 가보셈

vae : 학습에 사용할 vae 경로. 마찬가지로 구드 말고 2.3에서 받은거 쓸거면 (/content/vae/~) 경로 가보셈

output to drive : 체크 / 네 구드에 만들어진 로라 저장할지 말지

▶


5.2 : 공부할 시간이다

- batch size (배치) : 모델이 한 번에 동시에 학습하는 "이미지 갯수"

batch size 1 = 모델이 책상에 이미지 하나만 놓고 한 번 학습함 (느리고 vram 적게먹음 +학습퀄 상승 카더라)

batch size 6 = 모델이 책상에 반투명한 이미지 여섯개씩 놓고 한장으로 합친다음에 겹친거 보면서(비유임 정확히는 noise) 한 번 학습함 (빠른데 vram 많이먹음)


- step (스텝 수) : batch가 한 번 이루어진 횟수. 학습의 단위. 예상 학습시간을 유추할 때 주로 쓰이는 단위

batch size에 6을 입력했을때, step이 10이면 : 6개의 합쳐진 이미지를 10번 학습해서 총 60개의 이미지를 학습함


- epochs (에포크) : 학습에 관련된 가장 큰 단위.

repeats에 15를 입력했을때, 2 epochs = 30 repeats


- repeats (리피트) : 한 번의 epochs 안에서, 데이터셋에 있는 모든 이미지를 각각 한 번씩 학습한걸 루프하는 횟수 

- 한 루프에는 모든 데이터가 하나씩 들어가 있다. 루프마다 이미지의 순서는 무작위로 바뀐다. 그러나, 한 루프에 같은 이미지가 두 번 학습되진 않는다.

만약 정규화를 쓰지 않았고,

데이터셋에 3장의 이미지(호로,뮤리,노라)가 있고, batch size에 2, epochs에 2, repeats에 3, 중간저장에 1 을 입력하면

- 0 epochs 완료 -

[(호로,뮤리),(노라] - 1 step (batch) 완료, 1 repeats 완료

[뮤리),(호로,노라)] - 3 step 완료, 2 repeats 완료

[(노라,뮤리),(호로] - 4 step 완료, 3 repeats 완료

- 1 epochs 완료 -

- 중간 저장.. "LoRAname-000001.safetensors" 로라 저장 완료-

[뮤리),(노라,호로)] - 6 step 완료, 1 repeats 완료

[(뮤리,노라),(호로] - 7 step 완료, 2 repeats 완료

[호로),(노라,뮤리)] - 9 step 완료, 3 repeats 완료

- 2 epochs 완료 -

- 학습 종료 -

- 최종 저장.. "LoRAname.safetensors" 로라 저장 완료-

- 총 step 수 : 9 -


이렇게 학습한다.

근데 정규화가 어디에 끼어있는진 모름

하나 알아야할건, 위에 3번에 써놨듯이 만약 정규화 이미지를 reg data (regularization data) 안에 충분히 넣었다면

1. "10리피트 10에포크면 대충 데이터셋 50장에 정규화 500장"

2. "100리피트 1에포크면 대충 데이터셋 50장에 정규화 5000장" 

이므로, 각각

→ 1. "batch size 1일 때 5000 step + 정규화 500step = 5500step"

→ 2. "batch size 1일 때 5000 step + 정규화 5000step = 10000step"

이렇게 총 step이 늘어남.


따라서,

총 step = repeats * epochs * (배울 이미지 갯수 / batch size)


* 추가로 (데이터셋의 이미지 수 / batch size) = iter(iteration) 라고 한다.

총 step = repeats * epochs * iteration


총 step = 구현률이 필요한 정도에 따라 하급퀄 3000번, 중급퀄 5000번, 상급퀄 10000번이상이 국룰

(30만번 하는사람도 봄)


공부 다 했음?

train repeats : 자유 / 그냥 repeats임. 학습할 이미지의 repeats.

reg repeats : 1/ 정규화 이미지의 repeats. 보통은 1로 둬야 계산이 편함 (3번 가서 정규화 공식 보고와라)

instance token : 자유 (iom이 국룰) / 아무 의미 없고, 그리기 관련 프롬프트랑 아무것도 겹치면 안된다. 사실 나도 잘 모름. 

https://arca.live/b/hypernetworks/66495748?target=all&keyword=iom&p=1 참고.

class token : 이 로라가 주로 어느 프롬을 배울지. 주로 "1girl" 사용, 그림체는 "style". 

https://arca.live/b/aiart/67880016 여기서 참고


resolution : 512 / 대부분의 모델은 512로 학습했으니 얘 혼자 큰거 배우면 조지겠지?

스크롤 갖고 놀지마라 512로 안 돌아온다.

flip aug : 켜 / 이미지 데이터를 매 repeats마다 무작위로 좌우반전시킨다. 좀 더 다양하게 학습되겠지? 근데 실험 아직 안해봄

caption extension : .txt로 프롬프트 배울건지 .caption으로 프롬프트 배울건지 정하는거

caption dropout rate : 0 / 이게 뭐냐면 기껏 태깅해놓은 태그를 확률만큼 랜덤으로 없애는거임. 몇만step 학습할거 아니면 로라보다는 범용 모델에 쓰는게 낫겠지. 과적합 방지용으로도 쓴대

caption dropout every n epochs : 몇 번의 epochs마다 위 옵션처럼 태그를 없애버릴지.

keep tokens : 다른사람들도 null값인걸 보면 이것도 태그 버리기 용 아닐까?

▶


(선택?)5.3 : 학습 진행중에 그림뽑기

sample every n type : epochs로 두면 밑에 value값(3)epochs마다 그림뽑기 / steps로 두면 밑에 value값(3)steps마다(ㅋㅋ) 그림뽑기

sapler : 내가 여기까지 공부했을때쯤 떨어져 나갈 뻔 해서 모름. ddim으로 하셈

prompt : 너가 아는 프롬프트. 대충 masterpiece, best quality, 1girl

negative: 너가 아는 네거티브 프롬프트. 대충 (worst quality, low quality:1.4)

width(가로길이), height(세로길이) : 512x512 / 768x512 / 512x768 셋중택

scale : 8~12 (낮으면 창의적 높으면 프롬프트 복종적)

seed : 통일성 볼려면 이거 중요한데 난 아직 공부 안함 공지 ㄱㄱ

steps : Sampling steps일걸? 20~30 (높으면 퀄좋고 오래걸리고 잘튕김)

▶



5.4 : 학습률 조정, 추가 명령어 & 인수 삽입

network module : 냅둬 / 몰라. 여기서 쓰는 network가 인터넷이 아닌것만 알아

network args : 냅둬 / 뭔가 명령어 쓰는거겠지

network dim : 128 (학습 잘 안될만한 그림체(style)은 196) / 네트워크 크기라는데 그게 뭐야? 난 학습률로 알아들었음

256 이상의 값은 큰 영향이 없대

network alpha : network dim이랑 똑같이 / adamw8bit같은 구형은 똑같이하는게 국룰이래. 사실 잘 몰라. 이거까지 조정하려면 u_net까지 알아야할걸

network weight : 학습시키던 로라 있으면 여기에 디렉토리 경로 넣으면 마저 학습됨


이게 학습률 담당하는 세부적인 부분인데, 문제는 아무리 공부하고 찾아봐도 이게 뭔지 1도 모르겠음.

* Ir은 learning rate의 약자일거임. 그게 뭐냐고? 밑으로 내려봐.


optimizer type : 냅둬 / 8bit란 말이 안좋은거같지만 그런건 아닌거같았음.

optimizer args : 명령어 넣는곳인데, 뭔가 해보고싶으면 빙ai한테 learning rate decay 물어봐라

unet Ir : 이거 조정하는얘기 많이 봤음

이거는 그 외에는 몰라 냅둬

▶

이해되는놈들만 써라..


5.5

lowram : 체크하면 시스템 메모리를 덜 씀 (low v ram: 그래픽카드 메모리를 덜 씀)

noise offset : 0.05(일반) 0.1(권장) / 1이 최대임 높일수록 이미지 잘깨진다

우리가 쓰려는 Stable Diffusion이란 프로그램은 어두운 음영 표현이 잘 안됨. 그게 noise때문인데 

이 기술을 넣어주면 어두운 분위기,그림자,색채랑 일관성이 좋아진다. 관련 사이트를 봤었는데 링크찾기 귀찮아.. 

num epochs : 자유 / 아까 5.2에서 배운 공식에서 총 스탭수를 결정짓는 에포크임

train batch size : 이것도 5.2에서 배운 그거

mixed precision : 학습중의 로라 확장자 (no가 제일 퀄 좋고 용량많고 느림. 그래봤자 로라는 500메가임 / fp16이 퀄 좀 떨어지고 가벼운거 / bp16은 옛날에쓰던거같음)

save precision : 저장되는 로라 확장자. 위랑 똑같음

save n epochs type : 중간저장을 어떤 방식으로 할지 (s_n_e_r : 최종 학습까지 중간저장 몇value번 할건지 알아서 에포크 나눠줌 / s_e_n_e : 걍 에포크 몇value번마다 한번 저장할건지)

save model as : safetensors가 바이러스 전염위혐 없어서 tkpt에 비해 유행하는 확장자일거임

max token length : 이 로라 모델이 프롬프트를 몇자까지 인식하게 할지. 225가 최대임

clip skip : 2 / 이거 공부하려면 https://arca.live/b/aiart/70437794?target=all&keyword=clip+skip&p=1 이거 보든가

gradient 어쩌구 : 냅둬 / https://arca.live/b/hypernetworks/65422980?category=%EC%A0%95%EB%B3%B4&p=1 이게뭔데

seed : 냅둬 / 뭔진 아는데 몰라

▶


5.6 : 머신러닝 시작

샘플이미지 보거나 설정 바꿀거면 가상드라이브에 있는 저 세개 디렉토리 경로 바꾸거나 확인하래

저걸 구드로 해놓고 ▶를 누르면 다음번엔 5번에서 경로만 설정해도 이지랄을 안해도 되겠지?

▶


누르면 학습 시작까지 프로그램 다운을 약 6분정도 하고


epoch3 (3120/10400 [1:16:14<2:57:54,  1.47s/it, loss=0.131]epoch 4/10) 

이걸 잘봐야하는데


- "3120/10400" : 현제 step 수 / 전체 step 수


- "1.47s/it" : 1step당 걸리는 시간 (전체 step 수 / 이거로 나누면 딱 그정도 걸릴거같은데, 정규화 안쓴 기준으로 난 정확히 그거의 두 배의 시간만 걸리더라. 1배치 1만스탭에 1.46s/it 넣으면 2시간이 걸려야하는데 자꾸 4시간 걸림 ㅎ)


- loss=0.131 : 매 step마다 기존의 학습정보가 얼마나 개선되느냐(가중치가 달라지느냐)임

난 보통 0.15~0.13 사이에서 노는데

이게 특정epoch를 기준으로 0.09, 0.07... 이렇게 내려간다?

100% 과적합난거임

그러니까 loss율이 몇step 몇epoch에서 삐꾸나는지 메모해둬야 다음번엔 과적합 안나게하거나 나게 할 경험이 쌓이겠지?


6. 다만든 로라 테스트


6.1 weight에 로라 디렉토리 넣고 키면 코드표시했을떄 나오는거 복붙하면 다른사람들이 그 로라 사양 알아볼 수 있음.

▶


6.2 webui 킬필요없이 빨리 테스트하는거

weight 디렉토리 mul 가중치 나머지 몰라 냅둬


v2 몰라 v파라미터 몰라 인스턴트프롬프트 몰라

프롬프트랑 네거티브 위에써놨고

모델이랑 vae는 구드에있는거 경로갖다써라

outdir : 이미지가 구드 들어가는 경로니까 /content/drive/MyDrive/LoRA 이런거로 잘 정리해봐

scale : 창의적 8 비창의적 12

sampler : 몰라 냅둬

steps : 아까말함 20~30

pre : 이미지퀄 좋은게 no인데 여긴없으니 fp

가로세로 크기 정하는데 저거 맘대로하면 제대로안나온다 아까써둔대로해

images per prompt : 그림몇장뽑아서 제출할까요

batch size : 한번에 그림 몇장씩 뽑을까요 (1해도됨)

clipskip : 2


참고로 불과 이틀전까지 내가 만들던 메뉴는 이게 아니었는데 쓰다보니 이상함을 감지함

임시저장 없어서 좀 수정해서 걍 올려놓는다 아마 대충 맞을거임

테스트해보고싶었는데 이거 8시간 쓰다가 아침됐음 잘래


아래는 필요없는거 다 제끼고 가장 빨리 머신러닝 돌릴 수 있는 옵션만 모음

빙ai가 괴상한 옵션들 추가하고 조정해준 내 전용 세팅이니까 뭐 필요한지만 봐 나도 테스트중임 (이 세팅대로 돌리면 오류뜸)

안써져있는건 기본값으로 두고 업데이트해서 옵션 위치 위 글이랑 조금이라도 바뀌면 못씀



- 1.1 (3분걸림) : mount drive 체크 (xformers 지금 안받아질거임)


* 만약에 1.1에서 xformer 관련으로 안받아진다고 빨간에러가 뜬다?

그럼 1시간 15분동안 휠파일을 빌드해야함. 

하지만 내가 만든 휠파일 있으니 받아서 쓰셈


내가 올린것도 안되면 빙ai 선생님과 즐겁게 빌드해보자

-

오류 :  ERROR: xformers-0.0.16+814314d.d20230118-cp38-cp38-linux_x86_64.whl is not a supported wheel on this platform 

오류 메시지를 보면 휠 파일이 colab의 플랫폼과 호환되지 않는 것 같습니다. 아마도 파이썬 버전이나 GPU 종류가 맞지 않는 것일 수 있습니다.

colab에서 xformers의 소스 코드를 다운로드하고 빌드해서 설치하는 방법입니다. 다음과 같은 순서로 진행해 보세요.


1. 새로운 셀을 만들고 !git clone --depth 1 https://github.com/facebookresearch/xformers.git 명령어를 입력하고 실행합니다. 이 명령어는 xformers의 깃허브 저장소에서 최신 버전의 소스 코드를 colab에 복사합니다.

2. 다시 새로운 셀을 만들고 %cd xformers 명령어를 입력하고 실행합니다. 이 명령어는 작업 디렉토리를 xformers 폴더로 변경합니다.

3. 다시 새로운 셀 만들고 !git submodule update --init --recursive 명령어 입력실행. CUTLASS라는 서브모듈 찾아야돼서 깃허브 서브모듈 초기화후 업데이트.

4. 다시 새로운 셀을 만들고 !python setup.py build 명령어를 입력하고 실행합니다. 이 명령어는 xformers의 소스 코드를 빌드하는 과정입니다. 빌드가 완료되면 dist 폴더 안에 휠 파일이 생성됩니다. (1시간 15분걸림 ㅅㅂ)

5. 다시 새로운 셀을 만들고 !python setup.py bdist_wheel 임력 실행. 디렉토리에 dist폴더 보여줌

6. dist폴더 안에 생긴 .whl파일을 1.2에 말해준 ui 켜서 구드로 빨랑 복붙해 (디렉토리 다운 넘 오래걸림)

6. 다시 새로운 셀을 만들고 %cd dist 명령어를 입력하고 실행합니다. 이 명령어는 작업 디렉토리를 dist 폴더로 변경합니다.

7. 마지막으로 새로운 셀을 만들고 !pip install [파일명] 명령어를 입력하고 실행합니다. 여기서 [파일명]은 생성된 휠 파일의 이름으로 바꿔야 합니다.(dist폴더에 있음) 예: !pip install xformers-0.0.16+814314d.d20230118-cp37-cp37m-linux_x86_64.whl

7-2. 내가 만들어둔 휠파일은 !pip install xformers-0.0.17+b89a493.d20230308-cp39-cp39-linux_x86_64.whl임. 링크 : https://huggingface.co/aiblender/230309_xfromers_whl/tree/main

8. 휠 파일을 설치하려면 코랩 디렉토리에 상관없이 !pip install file.whl 명령을 실행하면 됩니다. 웹에서 다운로드한 휠 파일이라면 !pip install package_name 명령을 사용하면 됩니다


- 2.2

modelUrl : 이거할바에 폴더ui에서 구드에있는거 복붙함 (경로폴더는 아무거나 받으면 만들어짐)


- 3.1

train data dir :

/content/drive/MyDrive/학습이미지폴더

reg data dir :

/content/drive/MyDrive/정규화이미지폴더


* 4.1 : (맨 처음 dataset 가공할때만 사용) convert, random color 체크 후 실행 → 나머지 체크 해제 후 delete metadata만 체크 후 실행 → 이미지 개수 처음과 똑같아야함


- 5.1

project name : 로라이름

pretrained model name or path : 

/content/pretrained_model/학습할 모델 (ui켜서 구드에서 복붙)

output to drive 체크


- 5.2

train repeats : 5

instance token : iom

class token : style (기본값은 띄어쓰기 있으니까 지우자)

resolution : 768

flip aug : 체크

caption extension : none


- 5.3 (이거안하면 5.5에서 name 오류 뜸)

sample every n type : sample every n epochs

sample every n type value : 50

prompt : masterpiece, best quality, 1girl

negative : "(worst quality, low quality:1.4)" / (이거만 프롬에 쌍따옴표 없으면 오류나니 조심)

width : 512

height : 768

scale : 12

steps : 30


- 5.4

network dim : 64

network alpha : 64

unet lr : 5e-5

text encoder lr : 5e-5

 lr scheduler : cosine with restarts

lr warmup steps : 1000

lr_scheduler_num_cycles : 2


- 5.5 (5.5 이전의 뭔가 아무거나 수정했으면 이거 무조건 키고 5.6 돌려야함)

noise offset : 0.05

num epochs : 400

batch size : 4

mixed precision : no

save precision : float

save n epochs type : save n epoch ratio

save n epochs type value : 0.25 (1이 최대. 0.25는 총 세번 중간저장됨)

gradient checkpointing 체크

gradient checkpointing steps : 2



- 5.6

경로 구드로 바꾸면 오류남


위 값대로 하면 오류없이 학습됨

steps:   0% 40/32000 [17:49<237:25:41, 26.74s/it, loss=0.116]epoch 2/800

이게 사양인데 steps 뻥튀기된건 

[gradient checkpointing 체크

gradient checkpointing steps : 2 ] 이거때문임

배치 수에 2를 곱하고 vram 메모리량을 루트만큼 줄여서 cuda out오류 안뜨게 해주는 옵션인데

곱하는게 배치뿐만이 아닌가봄

일단 오류 안뜨는거까지 성공했으니 수치 조정하겠음