Amazon SageMaker에서 Stable Diffusion 활용: Dreambooth를 기반으로 한 모델 미세 조정

이 기사는 다음을 기반으로 작성됩니다. Quick Kit를 예시로 사용하여 사용법을 자세히 설명하고 있습니다. 기본 Stable Diffusion 모델 미세 조정 지식, Dreambooth 미세 조정 소개, Quick Kit를 사용하여 데모를 통해 미세 조정 효과 시연 등 Stable Diffusion 모델 미세 조정.

클라우드 기술 공식 웹사이트:https://www.amazonaws.cn

공식 웹 사이트:https://aws.amazon.com/cn/

01
Stable Diffusion 모델 미세 조정
현재 Stable Diffusion 모델을 미세 조정하는 네 가지 주요 방법이 있습니다.Dreambooth, LoRA(Low-Rank Adaptation of Large Language Models), 텍스트 반전, Hypernetworks.

이들의 차이점은 대략 다음과 같습니다.

Textual Inversion(Embedding이라고도 함)은 원래 Diffusion 모델을 실제로 수정하는 것이 아니라 딥러닝을 사용하여 원하는 이미지와 일치하는 캐릭터 이미지 특징 매개변수를 찾아서 이 작은 모델을 통해 저장합니다. 즉, 원래 모델에 이 측면의 훈련이 없으면 실제로 임베딩을 통해 "학습"하기가 어렵습니다. 확산 모델이 보지 못한 이미지 콘텐츠를 렌더링하도록 가르칠 수는 없습니다.
Dreambooth는 전체 신경망의 모든 레이어의 가중치를 조정하고 입력 이미지를 Stable Diffusion 모델로 학습시키는 방식으로, 소스 모델을 먼저 복사한 다음 소스 모델을 기반으로 미세 조정하여 독립적으로 구성하는 것이 핵심입니다. 기본적으로 무엇이든 할 수 있는 새로운 모델입니다. 단점은 훈련에 VRAM이 많이 필요하다는 점이며, 현재 튜닝 후 16GB의 비디오 메모리에서 훈련할 수 있습니다.
LoRA 역시 적은 수의 이미지를 사용하지만 별도의 특정 네트워크 계층의 가중치를 훈련하고 원본 모델에 새로운 네트워크 계층을 삽입함으로써 원본 모델 매개변수를 수정하거나 전체 모델을 복사하는 것을 방지합니다. 또한 삽입 레이어의 매개변수 양을 최적화하여 마침내 매우 가벼운 모델 조정 방법을 실현했습니다. LoRA로 생성된 모델은 크기가 작고 훈련 속도가 빠르며, 추론을 위해서는 LoRA 모델 + 기본 모델이 필요하며, LoRA 모델은 기본 모델의 특정 네트워크 계층을 대체하므로 기본 모델에 따라 효과가 달라집니다.
Hypernetworks의 학습 원리는 LoRA와 유사하며 현재 공식적인 문서는 없습니다. LoRA와 달리 Hypernetwork는 원래 Diffusion 모델에 삽입할 수 있는 중간 레이어를 출력하는 데 사용되는 별도의 신경망 모델입니다. 따라서 훈련을 통해 원래의 확산 모델에 적절한 중간 레이어와 해당 매개변수를 삽입하여 출력 이미지와 입력 명령 간의 상관 관계를 생성할 수 있는 새로운 신경망 모델을 얻게 됩니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-1
 메모: 온라인 정보의 사진
02
드림부스는 무엇인가요?
Stable Diffusion 모델은 텍스트 기반 이미지와 이미지 기반 이미지의 풍부한 이미지 생성 시나리오를 구현할 수 있지만 실제 특정 실제 객체가 이미지에 나타나는 경우 가장 발전된 텍스트 생성 이미지 모델은 주요 시각적 특징을 거의 유지하지 못합니다. 즉, 주어진 참조 세트에서 대상의 모습을 모방하거나 재현하는 능력이 부족합니다. 이러한 모델의 출력 도메인의 표현력은 제한됩니다. 정확한 텍스트를 위해 대상을 미세 조정하기 위해 텍스트 반전을 사용하더라도 설명이나 스타일 보존을 위해 Hypernetwork를 사용하는 경우 다른 모양의 인스턴스가 생성될 수 있습니다.

DreamBooth 알고리즘은 Imagen 모델을 미세 조정하여 이미지의 실제 객체를 실제로 복원하는 기능을 달성합니다. 소수의 물리적 객체 이미지를 미세 조정함으로써 원본 SD 모델은 이미지 엔터티 메모리에 대한 충실도를 유지하고 텍스트를 식별할 수 있습니다. 엔터티의 주요 특징과 원본 이미지의 테마 스타일까지 새로운 텍스트 대 이미지 "개인화"(사용자의 특정 이미지 생성 요구 사항에 맞게 조정할 수 있음) 확산 모델입니다.

在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-2
Dreambooth 미세 조정이 직면한 문제와 과제
드림부스 파인튜닝의 원리는 소량의 이미지를 입력하고, 인스턴스_프롬프트를 통해 개체주체(장난감 고양이/롬멜 등)와 인스턴스 이미지의 파인튜닝 이미지를 정의하고, 장면이나 테마 스키마(만화, 만화 등)를 정의하는 클래스를 제공하는 것이다. 유화 스타일) 프롬프트 및 클래스 이미지 사진 미리보기, 원본 SD에서 UNet 및 vae 네트워크 추출, 인스턴스 프롬프트 및 클래스 보존 프롬프트를 여기에 바인딩하여 인스턴스 프롬프트의 키워드 토큰이 이후 생성된 그림에서는 입력이 그림의 주요 엔터티로 유지되며 클래스 보존 그래픽에 의해 정의된 테마 스타일을 유지합니다.

현재 업계에서는 DreamBooth를 미세 조정하는 두 가지 주요 방법이 있습니다.

하나는 안정 확산(Stable Diffusion) 상태입니다. 시각적 인터페이스를 사용하면 모델을 선택하고, 교육 이미지를 업로드하고, 현지화된 교육을 수행할 수 있습니다.
두 번째는 Colab Notebook과 같은 타사 IDE 플랫폼에서 스크립트 대화형 개발을 통해 교육을 진행하는 것입니다.
첫 번째 방법은 Stable Diffusion WebUI 애플리케이션의 단일 배포에서만 사용할 수 있습니다.또는 백엔드 플랫폼 및 기업과 고객의 비즈니스와 통합할 수 없는 호스트에서의 교육인 반면, 두 번째 방법은 개발 및 테스트 단계에서 개별 알고리즘 엔지니어가 모델 실험 및 탐색을 수행하는 데 중점을 두며 생산 엔지니어링 배포를 달성할 수 없습니다. 또한 위의 두 가지 방법으로 Dreambooth를 훈련할 때 고성능 컴퓨팅 기계 리소스 비용(특히 50개 이상의 클래스 이미지가 필요한 모델 효과에 대한 요구 사항이 높은 장면 및 비디오 메모리)에도 주의해야 합니다. OOM 발생), 기본 모델 및 미세 조정 후 모델 저장 및 관리, 학습용 하이퍼파라미터 관리, 통합 로그 모니터링 및 학습, lib 컴파일 및 패키징에 의존하며 구현 수준에서 일련의 어려움과 과제가 있습니다.
03
Dreambooth 미세 조정을 위해 SageMaker 교육 작업 사용
Amazon SageMaker는 사용자가 기계 학습 모델을 쉽게 구축, 교육 및 배포할 수 있도록 다양한 기능을 제공하는 원스톱 기계 학습 통합 개발 플랫폼입니다. 훈련 작업 수준에서 SageMaker는 V100, A100, T4 등과 같은 다양한 유형을 가져올 수 있습니다. BYOC(Bring Your Own Container), BYOS(Bring Your Own Script) 등을 통해 최적화된 컴퓨팅 머신 리소스를 통해 사용자는 자신만의 트레이닝 스크립트나 맞춤형 컨테이너 이미지를 사용할 수 있으며, 트레이닝 프로세스를 유연하게 제어하고 자신만의 데이터 전처리 및 사용이 가능합니다. 모델 평가 방법. 또한 자동 하이퍼파라미터 최적화 및 분산 트레이닝과 같은 고급 기능을 사용하면 사용자가 SageMaker의 특정 프레임워크 및 lib 라이브러리를 사용하여 유연성과 사용자 정의로 Dreambooth 모델의 미세 조정 및 조정을 수행할 수 있으므로 WebUI의 한계를 제거할 수 있습니다. 노트북 로컬 환경, 생산 비즈니스 시스템과 통합하여 엔지니어링 배포를 달성합니다.

다음은 BYOC 모드 훈련 작업을 사용하여 Amazon SageMaker에서 Dreambooth 미세 조정을 수행하는 방법을 자세히 설명하고 Dreambooth 훈련 프로세스의 메모리 오버헤드, 모델 관리, 슈퍼 매개변수 등을 최적화하여 사용자가 미세 조정을 할 수 있도록 합니다. Dreambooth를 자체적으로 조정하고 ML 플랫폼 또는 비즈니스 시스템의 엔지니어링을 구현하고 교육의 전체 TCO를 줄입니다.

SageMaker 기술 솔루션에 대한 Dreambooth 미세 조정
모델 풀링, 학습 이미지 입력, 모델 출력 및 학습 작업 유형 측면에서 SageMaker의 Dreambooth 미세 조정 기술 구현을 설명합니다.
모델 풀
Amazon은 HuggingFace와 전략적 파트너십을 맺고 있으므로 SageMaker의 훈련 작업에서 디퓨저의 파이프라인 API와 pretrained_model_name_or_path 하이퍼파라미터 변수를 사용하여 표준 Huggingface 모델 URL 형식(예: runwayml/stable-diffusion-v1-)으로 모델 ID를 전달할 수 있습니다. 5) 또는 모델 파일 디렉터리(예: /opt/ml/model/stable-diffusion-v1.5/), SageMaker는 계정을 등록하고 토큰 인증, 코드를 전달할 필요 없이 Huggingface에서 자동으로 모델을 가져옵니다. 예를 들면 다음과 같습니다:
model_dir='/opt/ml/input/fineturned_model/' 모델 = StableDiffusionPipeline.from_pretrained( model_dir, Scheduler = DPMSolverMultistepScheduler.from_pretrained(model_dir, subfolder="scheduler"), torch_dtype=torch.float16, )

 

훈련 이미지 입력
미세 조정에 사용되는 입력 이미지에 대해 SageMaker 훈련 작업은 훈련 데이터를 입력하는 편리한 방법을 제공합니다.inputs 파라미터를 통해 입력 이미지(예: 이미지)의 채널 이름을 사전에 설정할 수 있으며, 스토리지 S3의 입력 이미지 경로 값으로 SageMaker 교육 작업 중에 이미지가 S3에서 다운로드되어 컴퓨팅 시스템의 /opt/ml/input/data/{channel} 디렉터리에 배치됩니다. 코드 예는 다음과 같습니다. 다음과 같이:
 
Images_s3uri = 's3://{0}/drebooth/images/'.format(bucket) inputs = { 'images': Images_s3uri } estimator = Estimator( 역할 = 역할, 인스턴스_count=1, 인스턴스_유형 = 인스턴스_유형, image_uri = 이미지_uri, 하이퍼파라미터 = 하이퍼파라미터, 환경 = 환경 ) estimator.fit(입력)

 

 

모델 출력
훈련 후 SageMaker는 기본적으로 모델 파일을 model.tar.gz로 패키징하여 S3의 훈련 작업 이름을 딴 하위 디렉터리에 업로드합니다. 고객의 생산 시스템은 API를 통해 경로 위치를 직접 얻을 수 있으므로 모델 관리 및 작업이 용이합니다. 후속 조치 추론 배포는 다음과 같습니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-3
훈련 방법
Amazon SageMaker는 모델 훈련을 위해 BYOS 및 BYOC 모드를 지원합니다.Dreambooth 모델 훈련을 위해서는 디퓨저, 허깅페이스, 가속, xformers 등과 같은 많은 종속 항목의 설치 및 배포가 필요하며 xformers 및 가속과 같은 오픈 소스 라이브러리를 사용할 수 있습니다. cuda, cudnn 버전마다 호환성 차이가 있고 직접 pip install을 통해 컴퓨팅 머신에 설치 및 배포가 어렵기 때문에 본 솔루션에서는 공식적으로 사전 설정된 기본 이미지 등을 기반으로 BYOC 방식을 사용합니다. Pytorch, cuda, torchversion을 제공하고, 소스코드 컴파일 및 패키징을 통해 xformers 등 필수 libs를 설치하고, 이를 고객이 제작한 Dreambooth 트레이닝 컨테이너 이미지로 확장합니다.

Amazon G4dn 및 G5에서 Xformers를 컴파일하고 설치하려면 cuda 11.7, torch 1.13 이상이 필요하며 CUDA_ARCH_LIST 컴퓨팅 성능 매개변수는 8.0 이상으로 설정되어야 합니다. 그렇지 않으면 컴파일 시 이 유형의 컴퓨팅 성능이 보고됩니다. GPU는 지원되지 않습니다.

컴파일 및 패키징됨 파일 참조는 다음과 같습니다.

FROM pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime ENV PATH="/opt/ml/code:${PATH}" ENV DEBIAN_FRONTEND 비대화형 RUN apt-get 업데이트 RUN apt-get install --assume-yes apt-utils -y RUN apt 업데이트 RUN echo "Y"|apt install vim RUN apt install wget git -y RUN apt install libgl1-mesa-glx -y RUN pip install opencv-python-headless RUN mkdir -p /opt/ml /code RUN pip3 install sagemaker-training COPY train.py /opt/ml/code/ COPY ./sd_code/ /opt/ml/code/ RUN pip install -r /opt/ml/code/extensions/sd_dreambooth_extension/requirements.txt ENV SAGEMAKER_PROGRAM train.py RUN 내보내기 TORCH_CUDA_ARCH_LIST="7.5 8.0 8.6" && 내보내기 FORCE_CUDA="1" && pip install ninja triton==2.0.0.dev20221120 && git clone https://github.com/xieyongliang/xformers.git / opt/ml/code/repositories/xformers && cd /opt/ml/code/repositories/xformers && git submodule update --init --recursive && pip install -r 요구 사항.txt && pip install -e .ENTRYPOINT []

 

패키징 후 Amazon ECR 이미지 리포지토리로 푸시하기 위한 스크립트 참조는 다음과 같습니다.
알고리듬_이름=dreambooth-finetuning-v3 계정=$(aws sts get-caller-identity --query Account --output text) # 현재 구성에 정의된 지역 가져오기(정의되지 않은 경우 기본값은 us-west-2) 지역= $(awsconfiguregetregion) fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # ECR에 리포지토리가 없으면 생성합니다. aws ecr explain-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > / dev/null fi # Docker pwd=$(aws ecr get-login-password --region ${region})에 로그인 docker login --username AWS -p ${pwd} ${account}.dkr.ecr.${ Region}.amazonaws.com # 이미지 이름을 사용하여 로컬에서 도커 이미지를 빌드한 다음 전체 이름을 사용하여 ECR #에 푸시합니다. mkdir -p ./sd_code/extensions cd ./sd_code/extensions/ && git clone https:// github.com/qingyuan18/sd_dreambooth_extension.git cd ../../ docker build -t ${algorithm_name} ./ -f ./dockerfile_v3 > ./docker_build.log docker 태그 ${algorithm_name} ${fullname} docker push $ {전체 이름}rm -rf ./sd_code

 

SageMaker 미세 조정 최적화의 Dreambooth
1
WebUI에서 벗겨지다
DreamBooth는 다음에 의해 처음 개발되었습니다. HuggingFace의 Colab Notebook 샘플 코드에 대한 문서, 오픈 소스, 자세한 내용은 참조  관련 정보, 이 버전을 기반으로 하는 많은 민속 확장 및 업데이트가 있을 것입니다. 현재 가장 완벽한 버전은 안정적인 확산 WebUI 플러그인으로 만들어진 오픈 소스 스크립트입니다. 이 플러그인은 훈련 제어를 위한 더 많은 하이퍼 매개변수 및 최적화 방법을 캡슐화합니다. , lora 가중치를 통합할 수 있으며 WebUI에 필요한 체크포인트 형식을 지원합니다. 자세한 내용은 다음을 참조하세요. github의 sd_extentions 코드.

github 관련 정보:

https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/sd_dreambooth_training.ipynb#scrollTo=rscg285SBh4M

github의 sd_extensions 코드:

https://github.com/d8ahazard/sd_dreambooth_extension

위에서 언급했듯이 SD WebUI는 백엔드 비즈니스 시스템과 통합될 수 없기 때문에 WebUI 플러그인 모드와 분리하여 기본 모델, 입력 이미지, 인스턴스 프롬프트 등 표준 입력을 기반으로 독립적으로 캡슐화해야 합니다. 클래스 프롬프트 등을 미세 조정한 후 모델 출력을 별도의 모델 훈련 프로그램으로 만듭니다.

WebUI 플러그인과 분리하려면 다음 측면을 처리해야 합니다.
플러그인 코드에는 다양한 WebUI 프런트 엔드 인터페이스 구성 요소 바인딩 작업과 데이터 상호 작용이 결합되어 있습니다.예를 들어 원본 코드의 공유 코드는 웹 페이지에서 입력된 다양한 학습 매개 변수를 저장합니다.
shared.force_cpu인 경우: import module.shared no_safe = module.shared.cmd_opts.disable_safe_unpickle module.shared.cmd_opts.disable_safe_unpickle = True

 

mytqdm 클래스는 웹 페이지에 대한 진행 표시줄 관련 상태 정보를 표시합니다.
helpers.mytqdm에서 mytqdm 가져오기

 

이러한 유형의 코드는 엔지니어링 백그라운드 학습 작업에서는 필요하지 않으며, 프런트엔드 페이지의 매개변수 전송 부분을 본체에서 전달할 수 있도록 하이퍼 매개변수로 구성합니다. 페이지 표시 정보와 관련된 코드를 구문 분석하고 획득하고 제거하는 pars_args lib입니다.

정리된 sd_extentions 코드는 https://github.com/qingyuan18/sd_dreambooth_extension.git에서 확인할 수 있으며, 코어트레인 트레이닝 모듈만 유지되고 webui.py, helper 등의 프론트엔드 커플링 관련 코드가 남아있는 것을 볼 수 있습니다. 및 샤드가 정리되었습니다.

훈련 작업 매개변수 전송
SageMaker 훈련 작업은 모델 하이퍼파라미터의 전달 및 구문 분석을 지원합니다. API에서는 json 문자열의 키-값 쌍 형식에서 방금 언급한 원본 플러그인 코드의 model_path, model_name, instance_prompt, class_prompt 및 기타 매개변수를 캡슐화한 다음 이를 Estimator API를 통해 Training Job에 전달합니다. SageMaker에서 컴퓨팅 성능 훈련 기계 내부에서는 -key 값의 표준 args 매개변수 전송 모드로 구문 분석되므로 훈련 코드에서 Python Parse_args lib를 통해 구문 분석 및 처리할 수 있습니다. 다음 코드를 참조하십시오. 예:
hyperparameters = { 'model_name':'aws-trained-dreambooth-model', 'mixed_precision':'fp16', 'pretrained_model_name_or_path': model_name, 'instance_data_dir':instance_dir, 'class_data_dir':class_dir, 'with_prior_preservation':True, ' models_path': '/opt/ml/model/', 'manul_upload_model_path':s3_model_output_location, 'instance_prompt': 인스턴스_프롬프트, …} 추정기 = 추정기( 역할 = 역할, 인스턴스_카운트=1, 인스턴스_유형 = 인스턴스_유형, 이미지_uri = 이미지_uri, 하이퍼파라미터 = 하이퍼파라미터)

 

WebUI 입력 모델
ckpt 형식이며(최신 WebUI는 이제 safetensor 형식임), 디퓨저 훈련 중 from_pretrained로 로드된 모델 파이프라인은 Stable Diffusion의 모델 경로 또는 로컬 경로 형식(기본값은 디렉터리 경로이며 하위 경로가 있음) vae, unet, tokenizationer 등과 같은 모델 디렉토리는 디렉토리 아래에 있습니다. , 각 하위 모델 디렉토리는 독립적인 토치 pt 형식 파일(접미사 .bin)입니다.

고객이 프로덕션 환경에 있는 경우 ckpt 형식의 단일 모델 파일입니다(예: civit. 사이트에서 다운로드한 모델), 이후 디퓨저에서 공식적으로 제공하는 변환 스크립트를 통해 ckpt 형식에서 디퓨저 디렉토리 형식으로 변환하면 프로덕션 환경에서도 동일한 코드가 로딩될 수 있다.스크립트 사용 예는 다음과 같다. :

파이썬 Convert_original_stable_diffusion_to_diffusers.py —checkpoint_path ./models_ckpt/768-v-ema.ckpt —dump_path ./models_diffuser

 

위와 같이 dump_path 출력은 디퓨저 형식 디렉터리입니다. 이 디렉터리를 확장하면 각 vae, unet 및 text_encoder의 하위 모델 디렉터리 파일을 볼 수 있습니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-5
2
출력 모델 관리
SageMaker의 모델 훈련 컴퓨팅 시스템의 디렉터리 구조는 다음과 같습니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-6
훈련된 모델은 기본적으로 /opt/ml/model/ 디렉터리에 출력됩니다. SageMaker 훈련 작업이 완료된 후 이 디렉터리의 모델 파일은 tar.gz 파일로 패키징되어 S3 경로에 업로드됩니다. 훈련 과제. Stable Diffusion과 같은 복합 모델의 경우 여러 하위 디렉터리가 있습니다. 각 하위 디렉터리의 모델 파일은 독립적인 bin 형식입니다. 각 h 모델 파일은 4 또는 5G 이상입니다. SageMaker는 자동으로 패키징하고 S3로 가는 데 시간이 너무 오래 걸립니다.

따라서 훈련된 모델 파일이 수동으로 업로드되는 S3 경로를 지정하기 위해 manul_upload_model_path 매개변수를 추가합니다.훈련 후에는 전체 모델 디렉터리가 S3 SDK를 통해 지정된 S3에 재귀적으로 업로드되므로 SageMaker는 더 이상 model.tar를 패키징하지 않습니다. gz.

참조 코드 예시는 다음과 같습니다.

def upload_directory_to_s3(local_directory, dest_s3_path): bucket,s3_prefix=get_bucket_and_key(dest_s3_path) 루트, 디렉터리, os.walk의 파일(local_directory): 파일의 파일 이름: local_path = os.path.join(root, filename)relative_path = os .path.relpath(local_path, local_directory) s3_path = os.path.join(s3_prefix,relative_path).replace("\\", "/") s3_client.upload_file(local_path, bucket, s3_path) print(f'파일 {local_path } dirs의 하위 디렉터리에 대해 s3://{bucket}/{s3_path}')에 업로드됨: upload_directory_to_s3(local_directory+"/"+subdir,dest_s3_path+"/"+subdir) s_pipeline.save_pretrained(args.models_path) ### 훈련된 DB를 수동으로 업로드 Sagemaker tar process##### print(f"manul_upload_model_path is {args.manul_upload_model_path}") upload_directory_to_s3(args.models_path,args. manul_upload_model_path)

 

이번 최적화를 통해 SageMaker에서의 Dreambooth 훈련은 800단계 훈련이 1시간에서 약 30분으로 늘어났습니다.
3
GPU 메모리 최적화
Dreambooth와 같은 대형 모델의 미세 조정 학습에는 비용이 중요한 요소로, Amazon은 다양한 GPU 모델의 컴퓨팅 머신 리소스를 제공하며, 그 중 G4dn 모델이 가장 비용 효율적이며 거의 모든 Amazon 지역에서 사용할 수 있는 리소스가 있습니다. .

그러나 g4dn 모델에는 16G 비디오 메모리를 갖춘 단일 NVIDIA T4 그래픽 카드만 있습니다. Dreambooth는 이전 손실 가중치를 유지하기 위해 unet 및 vae 네트워크를 재교육해야 합니다. 더 높은 충실도의 Dreambooth 미세 조정이 필요한 경우 최대 수십 개의 이미지가 데이터, 1000단계 훈련 과정, 전체 네트워크, 특히 unet 네트워크의 그래픽 노이즈 및 노이즈 감소 처리는 쉽게 메모리 OOM을 발생시켜 훈련 작업이 실패할 수 있습니다.

고객이 16G 비디오 메모리를 갖춘 비용 효율적인 모델에서 Dreambooth 모델을 교육할 수 있도록 이러한 최적화를 수행하여 Dreambooth 미세 조정에는 수백 ~ 3000개의 교육 단계가 포함된 SageMaker의 G4dn.xlarge 모델만 필요합니다. 완료되므로 고객을 위한 Dreambooth 교육 비용이 크게 절감됩니다.

미세 조정 구성요소
Stable Difussion 모델에서 text_encoder는 CLIP 하위 모델의 텍스트 인코더이며, 인스턴스 프롬프트/클래스 프롬프트가 긴 텍스트가 아닌 경우 몇 가지 규칙을 조정했기 때문에 Dreambooth는 텍스트 인코더를 재교육할 필요가 없습니다. 메모리가 16G 미만인 것으로 확인되면 text_encoder 부분의 재교육을 끄세요. 비디오 메모리가 더 낮으면 8비트 Adam 최적화 프로그램과 fp16 반정밀도 그라데이션 데이터 형식이 자동으로 활성화됩니다. 비디오 메모리가 더 작다면 훈련을 위해 CPU로 직접 오프로드할 수도 있습니다.

코드 예시는 다음과 같습니다.

print(f"총 VRAM: {gb}") 24 > gb >= 16인 경우: attention = "xformers" not_cache_latents = False train_text_encoder = True use_ema = 16 > gb >= 10인 경우 True: train_text_encoder = False use_ema = gb인 경우 False < 10: use_cpu = 참 use_8bit_adam = 거짓 혼합_정밀도 = '아니요'

 

Xformer 사용
Formers는 오픈 소스 훈련 가속 프레임워크입니다. 서로 다른 레이어의 매개변수를 저장하고, 각 하위 레이어에 대해 비디오 메모리를 동적으로 로드하고, Self-Attention 메커니즘과 레이어 간 정보 전송을 최적화함으로써 교육에 영향을 주지 않고 비디오 메모리를 크게 줄일 수 있습니다. 훈련속도..

Dreambooth 훈련 과정에서 기본 플래시에서 xformer로 주의가 바뀌었는데, xformers를 켜기 전과 후의 GPU 메모리 상황을 비교해 보면 이 방법이 메모리 사용량을 크게 줄여주는 것을 알 수 있습니다.

Xformers를 시작하기 전에:

***** 훈련 실행 ***** 장치당 순간 배치 크기 = 1 총 훈련 배치 크기(병렬, 분산 및 누적 포함) = 1 기울기 누적 단계 = 1 총 최적화 단계 = 1000 훈련 설정: CPU: False Adam: True, Prec: fp16, Grad: True, TextTr: False EM: True, LR: 2e-06 LORA:False 할당: 10.5GB 예약됨: 11.7GB

 

Xformers를 연 후:
***** 훈련 실행 ***** 장치당 순간 배치 크기 = 1 총 훈련 배치 크기(병렬, 분산 및 누적 포함) = 1 기울기 누적 단계 = 1 총 최적화 단계 = 1000 훈련 설정: CPU: False Adam: True, Prec: fp16, Grad: True, TextTr: False EM: True, LR: 2e-06 LORA:False 할당: 5.5GB 예약됨: 5.6GB

 

기타 최적화 매개변수
  • 'PYTORCH_CUDA_ALLOC_CONF':'max_split_size_mb:32'메모리 조각화로 인해 발생한 CUDA OOM의 경우 PYTORCH_CUDA_ALLOC_CONF의 max_split_size_mb를 더 작은 값으로 설정할 수 있습니다.
  • train_batch_size':1 매번 처리되는 이미지 수 인스턴스 이미지나 클래스 이미지가 많지 않은 경우(10개 미만) 이 값을 1로 설정하면 일괄 처리되는 이미지 수를 줄여 사용량을 줄일 수 있습니다. 비디오 메모리를 어느 정도..
  • 'sample_batch_size': 1은 샘플링 노이즈 추가와 노이즈 감소를 동시에 수행하는 일괄 처리량인 train_batch_size에 해당하며, 이 값을 낮추면 비디오 메모리 사용량도 줄어듭니다.
  • not_cache_latents 또한 Stable Diffusion의 훈련은 Latent Diffusion Models를 기반으로 합니다. 원래 모델은 잠재성을 캐시하며 우리는 주로 인스턴스 프롬프트와 클래스 프롬프트에서 정규화를 훈련합니다. 따라서 GPU 메모리가 부족할 경우 캐시하지 않도록 선택할 수 있습니다. 잠재성 메모리 사용량을 최소화합니다.
  • 'gradient_accumulation_steps'는 그래디언트 업데이트 배치이며, 트레이닝 단계가 1000과 같이 큰 경우 그래디언트 업데이트 단계 수를 늘려서 특정 배치로 누적한 후 한꺼번에 업데이트할 수 있습니다. 값이 클수록 메모리 사용량이 높아집니다. 비디오 메모리를 줄이려는 경우 훈련 시간의 일부를 희생하여 이 값을 줄일 수 있습니다. 그라디언트 누적을 지원하지 않는 텍스트 인코더 text_encode를 재교육하기로 선택하고 다중 GPU 시스템에서 가속의 멀티 카드 분산 교육이 활성화된 경우 일괄 그라디언트 업데이트gradient_accumulation_steps는 1로만 설정할 수 있습니다. 그렇지 않으면 텍스트 인코더가 다시 학습되고 비활성화됩니다.
Dreambooth 모델 미세 조정 시연
시연에서는 고양이 장난감 사진 4장을 사용하고 도구를 사용하여 512×512의 균일한 크기로 자릅니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-7
그런 다음 미리 생성된 SageMaker 노트북을 입력하고 Quick Kit 리포지토리를 복제하고 git clone https://github.com/aws-samples/sagemaker-stablediffusion-quick-kit을 열고 Fine-tuning/dreambooth/stablediffusion_dreambooth_finetuning.zh.ipynb를 열고, 한 단계 노트북의 지시에 따라 단계별로 진행하세요.
#는 zwx를 트리거 단어로 사용합니다. 모델이 훈련된 후 이 단어를 사용하여 이미지를 생성합니다. 슈퍼 매개변수 설정하기 환경 = { 'PYTORCH_CUDA_ALLOC_CONF':'max_split_size_mb:32', 'LD_LIBRARY_PATH':"${LD_LIBRARY_PATH}:/opt/conda/lib/" } 하이퍼파라미터 = { 'model_name':'aws-trained-dreambooth-model ', 'mixed_precision':'fp16', 'pretrained_model_name_or_path': model_name, 'instance_data_dir':instance_dir, 'class_data_dir':class_dir, 'with_prior_preservation':True, 'models_path': '/opt/ml/model/', 'instance_prompt ': 인스턴스_프롬프트 , 'class_prompt':class_prompt, '해결책':512, 'train_batch_size':1, 'sample_batch_size': 1, 'gradient_accumulation_steps':1, 'learning_rate':2e-06, 'lr_scheduler':'constant', 'lr_warmup_steps':0, 'num_class_images':50, 'max_train_steps':300, 'save_steps':100, 'attention':'xformers', 'prior_loss_weight': 0.5, 'use_ema':True, 'train_text_encoder':False, 'not_cache_latents' :True, 'gradient_checkpointing':True, 'save_use_epochs': False, 'use_8bit_adam': False } 하이퍼파라미터 = json_encode_hyperparameters(하이퍼파라미터) #는 sagemaker.estimator에서 Sagemaker 훈련 작업을 시작합니다. import Estimator inputs = { 'images': f" s3:/ /{bucket}/drebooth/images/" } 추정기 = 추정기( 역할 = 역할, 인스턴스_수=1, 인스턴스_유형 = 인스턴스_유형, 이미지_uri = 이미지_uri, 하이퍼파라미터 = 하이퍼파라미터, 환경 = 환경 ) 추정기.fit(입력)

 

훈련 작업 시작 로그:
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-8
훈련 시간은 약 40분 정도이며, 콘솔 SageMaker Training Job을 통해서도 CloudWatch 로그를 볼 수 있으며, 훈련이 완료된 후 모델은 자동으로 S3에 업로드됩니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-9
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-10
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-11
훈련이 완료된 후 Quick Kit 추론 노트북을 사용하여 추론을 위해 훈련된 모델을 SageMaker에 로드할 수 있습니다. 훈련된 모델은 다음과 같이 테스트됩니다.
在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调-12
04
결론적으로
요약하면, 본 글에서는 Dreambooth의 비즈니스 요구사항과 기술 원리를 소개하고, Amazon SageMaker의 BYOC 교육 작업 솔루션을 통해 비디오 메모리, 모델 관리, 슈퍼 매개변수 등의 최적화 실습을 통해 Dreambooth의 생산 운영을 소개합니다. 미세 조정이 실현됩니다. . 이 기사의 스크립트 코드 및 노트북 교육 예제는 사용자가 Stable Diffusion을 기반으로 AIGC ML 플랫폼을 엔지니어링하는 기초 역할을 할 수 있습니다.
05
부록
안정 확산 퀵 키트 github:

https://github.com/aws-samples/sagemaker-stablediffusion-quick-kit

Stable Diffusion Quick Kit Dreambooth 미세 조정 문서:

https://catalog.us-east-1.prod.workshops.aws/workshops/1ac668b1-dbd3-4b45-bf0a-5bc36138fcf1/zh-CN/4-configuration-stablediffusion/4-4-find-tuning-notebook

드림부스 논문:

https://dreambooth.github.io/

Dreambooth 원본 오픈 소스 github: https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/sd_dreambooth_training.ipynb#scrollTo=rscg285SBh4M

허깅페이스 디퓨저 형식 변환 도구:

https://github.com/huggingface/diffusers/tree/main/scripts

안정적인 확산 webui dreambooth 확장 플러그인:

https://github.com/d8ahazard/sd_dreambooth_extension.git

Xformers 오픈 소스:

https://github.com/facebookresearch/xformers

점수

답장을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다