드림부스에는 현 시점으로 두 가지 버전이 있는데,

A. 런포드 버전 

B. 코랩 버전


이 글은 런포드에서 드림부스를 구동하는 방법을 정리한 글입니다.

이 글을 쓰는 시점에서는 저는 아직 코랩버전의 드림부스를 사용해보지 못했습니다. 

나중에 기회가 되면 한번 써 보고 싶긴합니다만, 일단은 런포드에 대해서만 다루어보겠습니다.

저도 역시 런포드를 이제 막 쓰는 입장이고 배울게 많아서 이 글엔 오류가 많을수도 있습니다.


런포드(https://www.runpod.io/)는 계정을 만들어서 충전시킨후 

포드(pod)를 대여하고 클라우드 상에서 대여하는 gpu의 성능에 따라 

시간 당 요금을 지불하는 방식입니다.


본 AI 그림글 채널에 올라온 글에 기반을 하고 있으며

AI에 원하는 캐릭터/그림체 학습시키기 (드림부스)

하다가 막히시거나 이해가 잘 안가는 경우 아래의 비디오를 참조하셔도 좋습니다. 



준비물:

- 해외결제가 되는 카드

- nai-animefull-final-pruned.ckpt 유출본 모델 파일

- 4기가 이상의 파일을 업로드 가능한 구글 드라이브 용량

- 데이터셋 512 x 512 



(1) 런포드 가입/충전

Step 1-1

해당 웹사이트에 가서 계정을 만든 후에


Step1-2

Billing 항목에서 노란색 동그라미 친 부분에  원하시는 충전금액을 입력후 (USD) 

Pay with Card 버튼을 클릭하시면 결제창이 뜨고, 정보 입력후 결제하시면 됩니다.


(2) 런포드 실행

Step 2-1


두가지 옵션이 있는데

Secure Cloud

Community Cloud 

Secure Cloud는 비싼대신에 보안이 강화되어 있는 버전 같은거라고 보시면 되고

Community Cloud에 있는 gpu들이 좀더 가격이 싸고 종류가 많습니다.


이글은 Community Cloud에 있는 GPU를 대여해서 런포드를 구동시켜보겠습니다.


Step 2-2

Community Pod를 클릭하면 대여가능한 GPU들 리스트가 보이는데

이 글은 JoePenna버전의 드림부스를 구동시켜야하는데, 최소 요구 Vram이 24기가입니다.

그러므로 3090혹은 A5000 아니면 그 이상의 Vram의 GPU를 선택하시길 바랍니다.


Spot은 가격이 싼 대신에, 중간에 타의로 무작위로 작업종료가 될수가 있습니다. 그러므로 비추천합니다.

On-demand가 가격이 비싼 대신에 끊김없는 GPU 대여를 보장받을수 있습니다.


이 글에서는 RTX 3090버전 GPU를 대여해보겠습니다.


Step 2-3

*중요

Container DiskVolume을 각각 60기가로 설정하시는것이 좋습니다.

중간에 용량이 부족하면 난감해지기 때문입니다.

또한 Select a Template 항목에서 RunPod Stable Diffusion항목을 선택하시고 (중요!)

좌측 하단의 Continue버튼을 누르시면 됩니다.


Step 2-4

Deploy On-Demand 클릭


Step 2-5

My Pods 클릭


Step 2-6

우측상단에 초록색 Running 이리고 뜨시면 포드가 구동된 것이며

이떄 부터 비용이 계산되기 시작합니다. Conenct 클릭


Step 2-7

Connect to Jupyer Lab [Port 8888] 클릭

그럼 이제 쥬피터가 실행됩니다.



(3) 쥬피터 실행 및 드림부스 설치

Step 3-1

쥬피터에 진입 후, Python3(ipykernel)을 눌러주세요


Step 3-2


위 화면 노란색 부분에 

!git clone https://github.com/JoePenna/Dreambooth-Stable-Diffusion 을 복사/붙이기 하시고


Step 3-3

노란색 표시 안의 세모 버튼을 클릭하시면 드림부스의 설치가 진행됩니다.


Step 3-4

좌측 메뉴에 Dreambooth-Stable-Diffusion 폴더가 설치된것을 확인할수 있습니다. 

저걸 더블클릭해서 Dreambooth-Stable-Diffusion 폴더안으로 진입


Step 3-5

Dreambooth-Stable-Diffusion 폴더 내부에 

dreambooth_runpod_joepenna.ipynb 를 클릭하세요.


Step 3-6

우측에 이 화면이 보이시면 절반쯤 오셨다고 보시면 됨.

처음이면 어려워 보이지만 주저하지 말고, 회색 부분 하나 하나를 그냥 실행 시킨다고 생각하면 됨.

 


(4) 드림부스 학습 준비 

Step 4-1

첫 번째 단계임.  Build Enviroment에 3가지 코드블럭이 있는데

이 강좌에선 SD 1.4모델을 안씁니다. 그러므로

#BUILD ENV 항목의 코드를 위의 스크린샷 처럼 설치시켜주세요.

1. 클릭

2. 실행 (세모)

나머지 부분은 스킵하셔도 됩니다. 


Step 4-2


파란색 세로 라인이 해당 코드블럭이 선택되었다는 뜻입니다.

이 상태에서 상단의 세모 버튼을 누르면 해당 코드블럭이 실행됩니다. 



Step 4-3

위 노란색 부분처럼 뭐가 계속 뜰텐데요. 이건 필수 파일들을 설치하는 과정이라고 생각하시면 됩니다.



(5) 구글드라이브에 유출본 모델파일 업로드/불러오기 


이제 하셔야 할것은 구글드라이브에 nai-animefull-final-pruned.ckpt 유출본 모델 파일을 올리는겁니다.

물론 바로 런포드에 다이렉트로 드래그&드랍으로 하셔도 되지만 업로드/다운로드 속도가 엄청 느립니다.

그리고 런포드는 시간당 비용을 추징하기 때문에 구글 드라이브에 모델파일을 올려두시면 두고두고 쓰실 수 있습니다.


Step 5-1

구글 드라이브에 미리 model.ckpt파일로 이름을 바꾼 유출본 모델 파일을 업로드하고 나서

우클릭 하고나서 링크생성 버튼을 누릅니다. 

 

Step 5-2


일반 액세스 항목에서 링크가 있는 모든 사용자로 바꾸시고

아래 링크복사를 눌러주세요.


복사된 항목을 붙여넣기 하면 아마 아래처럼 링크가 나오실텐데

https://drive.google.com/file/d/1iBalOxAtdgIIKg2dG6ZFDPgyvpd92GPh/view?usp=sharing


여기서 우리는 1iBalOxAtdgIIKg2dG6ZFDPgyvpd92GPh 부분만 필요합니다.

이제 !gdown https://drive.google.com/uc?id= <<< 이 코드에다가 위에 잘라놓은 코드를 붙여서


!gdown https://drive.google.com/uc?id=1iBalOxAtdgIIKg2dG6ZFDPgyvpd92GPh

이렇게 준비를 해놓습니다.


(6) 런포드 주피터에 모델파일을 구글드라이브에서 받기

Step 6-1

이제 다시 쥬피터로 돌아오시면 상단 메뉴에 버튼이 있습니다. 

이 버튼은 빈 코드 블럭을 생성합니다. 해당 버튼을 눌러주세요


Step 6-2

그렇면 이렇게 빈 코드 공간이 생깁니다. 

이곳에다가 아까 Step5-2에서 준비한 코드를 붙여넣기 하고

!gdown https://drive.google.com/uc?id=1iBalOxAtdgIIKg2dG6ZFDPgyvpd92GPh

상단 메뉴에  세모 버튼을 누르면



이렇게 아까 구글드라이브에 올려놓은 모델 파일이 다운로드가 시작됩니다.

100% 될때 까지 기다려주세요.


Step 6-3


다운로드 완료후 model.ckpt 파일이 Dreambooth-Stable-Diffusion 폴더안에 다운로드 되었습니다.

이 파일은 Dreambooth-Stable-Diffusion 디렉토리내에 반드시 있어야 하니 저대로 그냥 내비두시면 됩니다.

이제 학습을 시작하러 갑시다.


(7) 드림부스 학습 시작하기

Step 7-1

다시 dreambooth_runpod_joepenna.ipynb 파일에 들어오셔서 스크롤 다운을 하시다보면

Regularization Images (Skip this if you are uploading our own or using the provided images)

라는 항목이 있습니다. 이 강좌에서는 우리가 스스로 준비한 학습자료를 사용할것이기 떄문에 스킵하세요.


Step 7-2

바로 밑에 Download Pre-generated reguarlization image라는 항목이 있습니다. 

이건 스킵하시면 안됩니다. 노란색으로 표시된 부분에 이미 person_ddim이라고 되어 있습니다.

이 강좌에선 이대로 사용할것이기 때문에 이 코드블럭을 노란색 표시대로 코드 블럭 선택 후 실행시켜주세요.

그러면 스스로 필요파일 설치를 시작합니다. 


Step 7-3

스크롤 다운 하시면 Upload your training images라는 항목이 있습니다.

해당 항목은 Dreambooth-Stable-Diffusion 디렉토리안에 training_images 라는 폴더를 생성후 그 안에

512 x 512 사이즈로 정리된 약 10~20장의 학습자료를 넣으라는 항목입니다. 

(중요) 반드시 짝수 개수의 학습자료를 넣으셔야 합니다. 그렇지 않을 경우 약 1500스탭에서 강제 종료됩니다.(라고 써있네요.)

해당 항목은 2-3장의 전신이미지,  3-5장의 상반신, 5~12장의 근접 얼굴 자료를 넣으라고 권고하고 있습니다. (20장 기준인듯 합니다.)

그리고 최대한 원하는 이미지에 가까운 것을 사용하라고 되어 있습니다.


Step 7-4

좌측항목 빈 공간에 우클릭 하시면 위와 같이 메뉴가 뜹니다. training_images 라는 새폴더를 생성하시고 

그 안에 학습자료들을 드래그 & 드랍으로 넣어주시면 됩니다.


저는 미리 준비된 자료를 girl이라는 이름으로 통일해놓고 집어 넣었습니다.

파일 이름은 학습하는 주제에 제일 근접한것으로 넣는게 좋다고 합니다. 


Step 7-5

Upload your training images 항목 아래에 두개의 코드블럭이 있는데 무시하셔도 됩니다.



Step 7-6


이제 스크롤 다운해서  Training 항목에서 학습에 관련된 설정을 입력하셔야합니다.

1. max_training_step은 최대 학습 스탭수를 설정하는 곳입니다. 만약에 중간에 터지거나 사용자가 멈추지 않는 이상은 드림부스는 이 정회진 횟수까지 학습을 시도하게 됩니다. 기본적으로는 2000 설정되어 있습니다.

2. class단어에는 보통 그림체의 경우에는 저는 Style을 넣습니다.

3. token은 모델의 이름이라고 보시면 됩니다.


저 같은 경우는 이걸 준비하면서 

최대 학습수 = 3000, 

class =  Style, 

token = SH

이렇게 넣었습니다. token값과 class값을 기억하시길 바랍니다.

이 두 단어가 바로 모델을 불러올때 쓰이는 프롬 값입니다. (예시. SH Style)


Step 7-7

이제 학습에 필요한 준비가 모두 끝났습니다. 코드블럭을 선택하시고 나서 상단의 세모 버튼을 누르시면 됩니다.


실행에 성공적이면 아래처럼 뭔가 계속해서 메세지가 올라올겁니다. 계속해서 메세지가 올라옵니다.


해당 블록의 맨 아래쪽에 이렇게 뜹니다. 그러면 트레이닝이 성공적으로 되고 있는겁니다.

해당 메시지는 지금 15628 스탭 학습시 약 6시간 15분 37초가 소요될 예정이고

Loss는 0.308프로, 현재 트레이닝은 20스탭까지 되어있다는 뜻인데.


저는 트레이닝은 3000으로 맞춰놨으므로 무조건 그때 끝납니다. 

아마 3000스탭에 약 1시간 15분이 소요될거 같습니다.


3000 스탭 학습에 약 1시간 12분 14초가 소요됬습니다. 


만약에 트레이닝 중 오류가 발생한다면 이 글 끝부분에 

(10) 트레이닝 도중 발생할수 있는 에러 <<< 참조해주시길 바람.


(8) 모델파일 생성 및 간단 테스트 해보기

이제 학습결과를 토대로 모델을 생성 하셔야 합니다.

Step 8-1

Copy and name the checkpoint file 코드 블록을 선택후 실행하시면 됩니다.

생성된 모델 파일은 trained_models 폴더 내부에 있습니다.


Step 8-2

간단한 샘플 이미지 생성하기 입니다.

위 코드에서 {file_name}을 모델의 파일명으로

"joepenna person as a masterpiece portrait painting by John Singer Sargent in the style of Rembrandt" 를

테스트할 프롬프트로 바꿔주시고 코드를 실행하시면 됩니다.


저는 프롬프트에다가 

"SH3 Style, 1girl, solo, masterpiece, bestquality, masterpiece, pov, looking_at_viwer"

이렇게 넣었는데요.

SH3 Style이 바로 아까 트레이닝 코드에서 지정하신 token값과 class값 입니다.

(저 트레이닝 항목 이후 학습 중 몇번 터져서 다시 재시작하다보니 SH에서 SH3가 되버렸네요.)

앞으로도 저 모델을 사용시 프롬프트 맨 앞에 SH3 Style이라고 넣어주시면 됩니다. 


생성된 샘플이미지는 output/txt2img-smaples 폴더 안에 있습니다.


입력한 프롬값에 대해 생성된 모델이 어떤 이미지를 생성하는지 간단 테스트 해볼수 있습니다.



(9) 런포드에서 모델파일 다운 받기

runpod.io 업로드 다운 속도 개암걸릴 때

어떤 분이 올려주셨는데, 저도 쓰고 있는 방법입니다. 

런포드에서 직접 다운받는 속도가 너무 느린경우가 많습니다.

그래서 AZURE 무료 계정으로 클라우드 스토리지를 만들어서 받는 방식인데

AZURE의외에도 다른 클라우드 스토리지도 지원하는걸로 압니다. 




(10) 트레이닝 도중 발생할수 있는 에러들


(!) CUDA 메모리 부족으로 트레이닝이 실패할 경우 대처법


설령 3090같은 24기가의 Vram을 가진 조건에 부합하는 기기로 드림부스를 시도하더라도 이렇게 터질때가 있습니다. 

이럴 경우엔


Restart Pod를 눌러주시면 시스템을 다시 재부팅합니다.

그러면 자료는 보존 되면서 다시 정상 작동에 필요한 메모리를 확보합니다.


(주의!) 절대로 보라색 네모 (Stop) 버튼을 누르지 마세요. 

해당 옵션은 아예 포드를 종료시키고 모든 자료를 삭제합니다.


그리고 다시 Dreambooth-Stable-Diffusion 폴더 내부에 

dreambooth_runpod_joepenna.ipynb 를 클릭하시고

저는 Training 항목 코드의 token값과 class 항목을 변경 후

해당 코드를 실행하시면 됩니다. 


(!) dataset 에러가 발생한경우 

Download pre-generated regularization images 항목에서 뭔가 에러가 발생했다는 뜻입니다.

그러면 다시 위로 가셔서


이 부분의 코드를 재 시작해주시고 

다시 Training 항목의 코드를 시작해주시면 됩니다. 보통 다시 재 실행됬지만

이래도 안될 경우엔 다시 포드를 재시작 해주시고 다시 트레이닝을 시도해주세요.


 

여태까지 개인적으로 런포드기반 드림부스로 작업한 것들

첫번째 드림부스 결과 기록 (19금 이미지 있음)

NAI 유출본 기반 드림부스 모델 - Urushihara Satoshi  


위에서는 안 다룬 어떤분이 올려주신

런포드 드림부스에서 배치 사이즈 조정하기

 드림부스 학습시 batch size 변경 방법

 

저도 이리저리 파편화되어 있는 정보들을 모아서  맨땅에 헤딩하는 방식으로 시도해보니

어쩌다가 런포드로 드림부스까지 돌리게되었는데요. 원래 전공이 이쪽도 아니고

이쪽에 잘 아시는 분들이 보시면 뭔가 비효율적이거나 맞지 않는 부분이 많이 있을듯 합니다.

적극적인 피드백을 부탁드립니다.


아직 코랩으로 돌리는 드림부스는 시도조차도 못해봤네요. 

한번 봤는데 훨씬 더 사용하기 쉽게 되어 있는거 같은데

이것도 한번 나중에 시도해보고 싶네요.

 

이 글을 마치는 시점이 현지 시간으로 약 새벽 대라 내일 아침에 일하러 

가야되서 좀 응답이 늦어질수도 있습니다. 그럼 다들 성공하시길! 



(업데이트 2022-10-27)

안녕하세요. 좋게 봐주셔서 정말 감사합니다. 

하루사이에 많은 피드백들과 학습 가이드 기타 많은 정보들이 올라왔었습니다.  

일단은 해당 원본 글은 유지하고 그 대신 계속해서 새로운 정보 링크를 

지속적으로 링크 형식으로 추가하겠습니다. 

또한 제가  놓치고 있는 정보가 있는 경우 댓글란에 제보를  해주시면

확인하는대로 계속 추가 하겠습니다.


** 유용한 정보 & 팁

런포드 SD 환경에서 메모리 에러가 자주 일어나는 이유   

드림부스 파라미터 일부 (작성중)

드림부스 학습시간 획기적으로 줄이는 방법

드림부스 학습시 batch size 변경 방법


** 학습정보 가이드

해외발 드림부스 훈련 이미지 가이드  

(ckpt repo발) 드림부스 훈련용 이미지 가이드

정규화 이미지 엄청 중요한거 같은데?

정규화 이미지 바꿨더니 로스율이 확 줄어든거 같은 느낌

드림부스 정규화 이미지 공유

드림부스 결과물이 그지같이 나오는 거 피하기


**런포드가 아닌 환경에서 드림부스 구동

ㅈ같은 로컬 윈도우로 드림부스 성공함

로컬 윈도우 드림부스 10gb 버전 저용량 디퓨전도 성공함