在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调
本文將以 Stable Diffusion Quick Kit 為例,詳細講解如何利用 Dreambooth 對 Stable Diffusion 模型進行微調,包括基礎的 Stable Diffusion 模型微調知識,Dreambooth 微調介紹,并且使用 Quick Kit 通過一個 demo 演示微調效果。
01
Stable Diffusion 模型微調
目前 Stable Diffusion 模型微調主要有4種方式:Dreambooth、LoRA (Low-Rank Adaptation of Large Language Models)、Textual Inversion、Hypernetworks。
它們的區別大致如下:
Textual Inversion (也稱為 Embedding),它實際上并沒有修改原始的 Diffusion 模型, 而是通過深度學習找到了和你想要的形象一致的角色形象特征參數,通過這個小模型保存下來。這意味著,如果原模型里面這方面的訓練缺失的,其實你很難通過嵌入讓它“學會”,它并不能教會 Diffusion 模型渲染其沒有見過的圖像內容。
Dreambooth 是對整個神經網絡所有層權重進行調整,會將輸入的圖像訓練進 Stable Diffusion 模型,它的本質是先復制了源模型,在源模型的基礎上做了微調(fine tunning)并獨立形成了一個新模型,在它的基本上可以做任何事情。缺點是,訓練它需要大量 VRAM,目前經過調優后可以在 16GB 顯存下完成訓練。
LoRA 也是使用少量圖片,但是它是訓練單獨的特定網絡層的權重,是向原有的模型中插入新的網絡層,這樣就避免了去修改原有的模型參數,從而避免將整個模型進行拷貝的情況,同時其也優化了插入層的參數量,最終實現了一種很輕量化的模型調校方法。?LoRA 生成的模型較小、訓練速度快,推理時需要 LoRA 模型+基礎模型,LoRA 模型會替換基礎模型的特定網絡層,所以它的效果會依賴基礎模型。
Hypernetworks 的訓練原理與 LoRA 差不多,目前其并沒有官方的文檔說明,與 LoRA 不同的是,Hypernetwork 是一個單獨的神經網絡模型,該模型用于輸出可以插入到原始 Diffusion 模型的中間層。 因此通過訓練,我們將得到一個新的神經網絡模型,該模型能夠向原始 Diffusion 模型中插入合適的中間層及對應的參數,從而使輸出圖像與輸入指令之間產生關聯關系。
?注: 圖片來自網絡資料
02
什么是 Dreambooth
Stable Diffusion 模型可以實現文生圖、圖生圖的豐富圖像生成場景,但讓一個真實的特定現實物體出現在圖像中時,最先進的文本生成圖像模型也很難保留其關鍵視覺特征,即它們缺乏模仿或再現給定參考集中主體外觀的能力,此類模型輸出域的表達性有限,即便使用 Textual Inversion 微調對對象進行精確文本描述,或者 hypernetwork 進行風格保持,它們也可能產生具有不同外觀的實例。
DreamBooth 算法對 Imagen 模型進行了微調,從而實現了將現實物體在圖像中真實還原的功能,通過少量實體物品圖像的 fine-turning,使得原有的 SD 模型能對圖像實體記憶保真,識別文本中該實體在原圖像中的主體特征甚至主題風格,是一種新的文本到圖像“個性化”(可適應用戶特定的圖像生成需求)擴散模型。
Dreambooth fine tuning 面臨的問題和挑戰
Dreambooth fine tuning 的原理,是通過少量輸入圖片,并且通過 instance_prompt 定義實體主體(e.g. toy cat/隆美爾)和 instance images 的 fine tuning 圖像,以及提供一個定義場景或者主題 schema(e.g. 卡通,油畫風格)class prevision 的 prompt 和 class image 圖片,抽取原 SD 中 UNet、vae 網絡,將 instance prompt 和 class preservation 的 prompt 與之綁定,以便后續生成的圖片中只要有 instance 的 prompt 中的關鍵字 token,就保持輸入 instance 圖片里面的主體實體,并且保持該 class presevation 的圖形定義的主題風格。
目前業界對 DreamBooth 做 fine tuning 主要為兩種方式:
一是在 Stable Diffusion WebUI 可視話界面進行模型的選擇,訓練圖片的上載及本地化的訓練;
二是在第三方 IDE 平臺如 colab notebook 上以腳本交互式開發的方式進行訓練。
第一種方式只能在部署 Stable Diffusion WebUI 應用的單一服務器或主機上訓練,無法與企業及客戶的后臺平臺及業務集成;而第二種方式側重于算法工程師個人在開發測試階段進行模型實驗探索,無法實現生產化工程化的部署。此外,以上兩種方式訓練 Dreambooth,還需要關注高性能算力機資源的成本(尤其對模型效果要求較高的場景,需要多達50張以上的 class images,顯存容易 OOM)、基礎模型和 fine tuning 后模型的存儲和管理、訓練超參的管理、統一的日志監控、訓練加速、依賴 lib 編譯打包等具體實施落地層面的一系列困難和挑戰。
03
使用 SageMaker Training Job 進行 Dreambooth fine tuning
Amazon SageMaker 是一個一站式的機器學習集成開發平臺,提供了廣泛的功能來幫助用戶輕松構建、訓練和部署機器學習模型。在 training job 層面,SageMaker 可以拉取 V100、A100、T4 等各種類型 GPU 優化的算力機資源,通過 BYOC (Bring Your Own Container),BYOS (Bring Your Own Script) 等方式,允許用戶使用自己的訓練腳本或自定義容器鏡像、靈活控制訓練過程并使用自己的數據預處理和模型評估方法。此外,還可以通過自動超參數優化功能、分布式訓練等 advance 的功能,從而使得用戶能夠在 SageMaker 中使用特定的框架和 lib 庫,靈活性和可定制性的進行 Dreambooth 模型的 fine tuning 和調優,消除 WebUI 及 notebook 本地環境的局限,并和生產業務系統集成,實現工程化部署。
以下詳細介紹了在 Amazon SageMaker 上,使用 BYOC 模式的 training Job,進行 Dreambooth fine tuning 的方式方法,并針對 Dreambooth 訓練過程的顯存開銷、模型管理、超參等進行了優化實踐,從而實現用戶在自己的 ML 平臺或業務系統的的工程化落地,并降低訓練的整體 TCO。
Dreambooth fine tuning on SageMaker 技術方案
我們從模型拉取、訓練圖像輸入、模型輸出、訓練任務類型幾個方面講解 Dreambooth 在 SageMaker 上 fine tuning 的技術實現:
模型拉取
Amazon 與 HuggingFace 有戰略合作關系,因此在 SageMaker 的 training job 中,我們可以通過一個 diffuser 的 pipeline api,通過一個pretrained_model_name_or_path 超參變量,傳入標準 huggingface model url 格式的模型 id(比如 runwayml/stable-diffusion-v1-5),或者模型文件目錄(e.g. /opt/ml/model/stable-diffusion-v1.5/),SageMaker 會自動拉取 Huggingface 上的 model,不需要注冊賬號及傳入 token 認證,代碼示例如下:
model_dir='/opt/ml/input/fineturned_model/'model = StableDiffusionPipeline.from_pretrained(model_dir,scheduler = DPMSolverMultistepScheduler.from_pretrained(model_dir, subfolder="scheduler"),torch_dtype=torch.float16,)左滑查看更多
訓練圖像輸入
對于用于 fine tuning 的輸入圖像,SageMaker training job 提供方便的訓練數據輸入的方法,通過 inputs 參數,可以以字典方式設定輸入圖像的 channel 的名字(如:images),輸入圖像在 S3 的存儲路徑做為 value,則 SageMaker 訓練任務時,會以將圖像從 S3 下載下來放置到算力機的 /opt/ml/input/data/{channel} 目錄下,代碼示例如下:
images_s3uri = 's3://{0}/dreambooth/images/'.format(bucket) inputs = {'images': images_s3uri }estimator = Estimator(role = role,instance_count=1,instance_type = instance_type,image_uri = image_uri,hyperparameters = hyperparameters,environment = environment ) estimator.fit(inputs)左滑查看更多
模型輸出
trainning 之后,SageMaker 默認會將模型文件打包為 model.tar.gz,并上傳到 S3 上以 trainning job 命名的子目錄,客戶的生產系統可以直接通過 API 獲取該路徑位置,從而方便實現模型管理和后續推理部署,如下所示:
訓練方式
Amazon SageMaker 支持 BYOS、BYOC 兩種模式進行模型訓練,對于 Dreambooth 的模型訓練,因為涉及 diffuser、huggingface、accelerate、xformers 等眾多依賴的安裝部署,且如 xformers、accelerate 一類的開源 lib 在各種 GPU 機型,各種 cuda、cudnn 版本下存在兼容性差異,很難通過直接 pip install 方式在算力機上安裝部署,因此本方案使用 BYOC 方式,基于官方預置的 Pytorch、cuda、torchversion 等基礎鏡像,再通過源代碼編譯打包方式安裝 xformers 等所需的 lib,擴展為客戶自己生產上的 Dreambooth 訓練容器鏡像。
注意 xformers 在 Amazon G4dn,G5 上的編譯安裝,需要 cuda 11.7,torch 1.13以上版本,且 CUDA_ARCH_LIST 算力參數需要設置為8.0以上,否則編譯會報該類型 GPU 算力不支持。
編譯打包的 docker file 參考如下:
FROM pytorch/pytorch:1.13.0-cuda11.6-cudnn8-runtime ENV PATH="/opt/ml/code:${PATH}" ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get install --assume-yes apt-utils -y RUN apt update 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 export TORCH_CUDA_ARCH_LIST="7.5 8.0 8.6" && export 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 requirements.txt && pip install -e . ENTRYPOINT []左滑查看更多
打包后 push 到 Amazon ECR 鏡像 repository 的腳本參考如下:
algorithm_name=dreambooth-finetuning-v3 account=$(aws sts get-caller-identity --query Account --output text) # Get the region defined in the current configuration (default to us-west-2 if none defined) region=$(aws configure get region) fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null fi # Log into Docker pwd=$(aws ecr get-login-password --region ${region}) docker login --username AWS -p ${pwd} ${account}.dkr.ecr.${region}.amazonaws.com # Build the docker image locally with the image name and then push it to ECR # with the full name. 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 tag ${algorithm_name} ${fullname} docker push ${fullname} rm -rf ./sd_code左滑查看更多
Dreambooth on SageMaker fine tuning 優化
1
從 WebUI 插件剝離
DreamBooth 最早是由 Google 文獻資料,在 HuggingFace 的 colab notebook 示例代碼上開源,詳見 github 上相關資料,后續有眾多 folk 并基于該版本的擴展和更新,目前最完善的一個版本是做成 stable diffusion WebUI 插件的開源腳本,該插件封裝了更多的操控訓練的超參和優化手段,可以集成 lora 權重,并支持 WebUI 需要的 checkpoint 的格式,詳見 github 上 sd_extentions 的代碼。
github 上相關資料:
https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/sd_dreambooth_training.ipynb#scrollTo=rscg285SBh4M
github 上 sd_extentions 的代碼:
https://github.com/d8ahazard/sd_dreambooth_extension
如上文所述,SD WebUI 無法和后端業務系統整合,因此我們需要將其從 WebUI 插件方式剝離,根據基礎模型、輸入圖像、instance prompt、class prompt 等標準輸入和 fine tuning 后模型輸出,獨立封裝成單獨的模型訓練程序。
要從 WebUI 插件剝離,主要以下幾方面需要處理:
插件代碼有各種 WebUI 前端界面組件綁定的操作及數據交互耦合在一起,如原始代碼的 shared,保存的是 web 頁面的輸入的各種訓練參數。
if shared.force_cpu: import modules.sharedno_safe = modules.shared.cmd_opts.disable_safe_unpicklemodules.shared.cmd_opts.disable_safe_unpickle = True左滑查看更多
mytqdm 類,為 web 頁面提示進度條相關狀態信息:
from helpers.mytqdm import mytqdm左滑查看更多
此類代碼這在工程化的后臺訓練 job 中是不必要的,我們把前端頁面傳參的部分,統一整理為 hyperparameter 超參,以便在 main 主體中通過 python 的 parse_args lib 解析和獲取,另外把頁面展示信息相關這些代碼去掉。
清理后的 sd_extentions 代碼可以參見 https://github.com/qingyuan18/sd_dreambooth_extension.git,可以看到這里面只保留了核心 train 訓練模塊,webui.py、helper、shard 等前端耦合相關代碼都已經清理。
訓練任務參數傳遞
SageMaker Training Job 支持模型超參的傳遞和解析。在 API 中,將剛才提到的原始插件代碼中 model_path、 model_name、instance_prompt、class_prompt 等參數,封裝在一個 json 字符串的鍵值對格式中,再通過 estimator API 傳遞給 Training Job,在 SageMaker 訓練算力機內部,會解析為—key? value 的標準 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': instance_prompt, ……} estimator = Estimator( role = role, instance_count=1, instance_type = instance_type, image_uri = image_uri, hyperparameters = hyperparameters )左滑查看更多
WebUI 輸入的模型
為 ckpt 格式(現在最新的 WebUI 為 safetensor 格式),而 diffuser 訓練時 from_pretrained 加載的 model pipeline 為 Stable Diffusion 的 model path 或者本地路徑格式(默認為目錄路徑,目錄下有 vae、unet、tokenizationer 等子模型目錄,每個子模型目錄下為獨立的 torch pt 格式文件(后綴.bin))。
如果客戶生產環境中,是 ckpt 格式的單個模型文件(如從 civit.ai 站點下載的模型),那么我們可以通過 diffuser 官方提供的轉換腳本 ,將其從 ckpt 格式轉為 diffuser 目錄格式,以便同樣的代碼在生產環境中進行加載,腳本使用示例如下:
python convert_original_stable_diffusion_to_diffusers.py ?—checkpoint_path ./models_ckpt/768-v-ema.ckpt ? —dump_path ./models_diffuser左滑查看更多
如上— dump_path 輸出即為 diffuser 格式目錄,該目錄下展開可以看到各個 vae、unet、text_encoder 的子模型目錄文件。
2
輸出模型管理
SageMaker 的模型訓練算力機目錄結構如下:
訓練后的模型,會默認輸出到 /opt/ml/model/ 目錄下,SageMaker Training Job 完成后,會將這個目錄下的 model 文件打包為 tar.gz 文件,并上傳到訓練任務的 S3 路徑。對于 Stable Diffusion 這樣的復合模型,存在多個子目錄,每個子目錄的模型文件都是獨立的 bin 格式,每個 h 模型文件有4、5G 以上,SageMaker 自動打包和 upload 到 S3 會耗時太長。
因此我們加入一個 manul_upload_model_path 參數,指定訓練后的模型文件手工上傳的 S3 路徑,訓練結束后通過 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)for root, dirs, files in os.walk(local_directory):for filename in files: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'File {local_path} uploaded to s3://{bucket}/{s3_path}')for subdir in dirs:upload_directory_to_s3(local_directory+"/"+subdir,dest_s3_path+"/"+subdir)s_pipeline.save_pretrained(args.models_path) ### ?manually upload trained db model dirs to s3 path##### #### to eliminate 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 training,800 steps 訓練由1小時提升到30分鐘左右。
3
GPU 顯存優化
對于 Dreambooth 這樣的大模型 fine tuning 訓練,成本是需要考慮的重要因素,Amazon 提供了各種 GPU 機型的算力機資源,其中 G4dn 機型是性價比最高的,且在幾乎所有 Amazon 的區域中都有資源。
但 g4dn 機型只有單張 16G 顯存的英偉達 T4 顯卡,Dreambooth 要重訓練 unet、vae 網絡,來保留先驗損失權重,當需要更高保真度的 Dreambooth fine tuning,會多達數十張圖片的輸入數據,1000 step 的訓練過程,整個網絡尤其是 unet 網絡的圖形加噪及降噪等處理,很容易造成顯存 OOM 導致訓練任務失敗。
為了保障客戶在 16G 顯存的成本優勢機型上能夠 train Dreambooth 模型,我們做了這幾部分的優化,從而使得 Dreambooth fine tuning 在 SageMaker 上只需要 G4dn.xlarge 的機型,數百到3000的 training steps 都可以完成訓練,大幅度降低了客戶訓練 Dreambooth 的成本。
調整 fine tuning 組件
在 Stable Difussion 模型中,text_encoder 是 CLIP 子模型的文本編碼器,對于 instance prompt/class prompt 不是長文本的情況下,Dreambooth 不需要重新訓練文本編碼器,因為我們調整了一些規則,如果發現顯存小于 16G,關閉 text_encoder 部分的重訓練。如果顯存更低,則自動啟用開啟 8bit Adam 優化器,以及 fp16 半精度梯度數據格式。如果顯存更小,甚至直接 offload 到 CPU 訓練。
代碼示例如下:
print(f"Total VRAM: {gb}")if 24 > gb >= 16:attention = "xformers"not_cache_latents = Falsetrain_text_encoder = Trueuse_ema = Trueif 16 > gb >= 10:train_text_encoder = Falseuse_ema = Falseif gb < 10:use_cpu = Trueuse_8bit_adam = Falsemixed_precision = 'no'左滑查看更多
使用 xformers
formers 是開源的訓練加速的框架,通過存儲不同層的參數,每個子層動態加載顯存,以及優化了自注意力機制和跨層的信息傳遞等方法,可以在不影響訓練速度的情況大幅降低顯存。
在 Dreambooth 訓練過程中,將 attention 關注度由默認的 flash 改為 xformer,對比開啟 xformers 前后的 GPU 顯存情況,可以看到該方法明顯降低了顯存使用。
開啟 Xformers 前:
***** Running training *****Instantaneous batch size per device = 1Total train batch size (w. parallel, distributed & accumulation) = 1Gradient Accumulation steps = 1Total optimization steps = 1000Training settings: CPU: False Adam: True, Prec: fp16, Grad: True, TextTr: False EM: True, LR: 2e-06 LORA:False Allocated: 10.5GB Reserved: 11.7GB左滑查看更多
開啟 Xformers 后:
***** Running training *****Instantaneous batch size per device = 1Total train batch size (w. parallel, distributed & accumulation) = 1Gradient Accumulation steps = 1Total optimization steps = 1000Training settings: CPU: False Adam: True, Prec: fp16, Grad: True, TextTr: False EM: True, LR: 2e-06 LORA:False Allocated: 5.5GB Reserved: 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每次處理的圖片數量,如果 instance images 或者 class image 不多的情況下(小于10張),可以把該值設置為1,減少一個批次處理的圖片數量,一定程度降低顯存使用。
‘sample_batch_size’: 1和 train_batch_size 對應,一次進行采樣加噪和降噪的批次吞吐量,調低該值也對應降低顯存使用。
not_cache_latents? 另外,Stable? Diffusion 的訓練,是基于 Latent Diffusion Models,原始模型會緩存 latent,而我們主要是訓練 instance prompt, class prompt 下的正則化,因此在 GPU 顯存緊張情況下,我們可以選擇不緩存 latent,最大限度降低顯存占用。
‘gradient_accumulation_steps’? 梯度更新的批次,如果訓練 steps 較大,比如1000,可以增大梯度更新的步數,累計到一定批次再一次性更新,該值越大,顯存占用越高,如果希望降低顯存,可以在犧牲一部分訓練時長的前提下減少該值。注意如果選擇了重新訓練文本編碼器 text_encode,不支持梯度累積,且多 GPU 的機器上開啟了 accelerate 的多卡分布式訓練,則批量梯度更新 gradient_accumulation_steps 只能設置為1,否則文本編碼器的重訓練將被禁用。
Stable Diffusion Quick Kit Dreambooth 模型微調演示
演示中我們使用了一個貓玩具的4張圖片,通過工具進行了512×512統一尺寸裁剪。
然后進入提前創建好的 SageMaker notebook,克隆 Quick Kit 倉庫,git clone https://github.com/aws-samples/sagemaker-stablediffusion-quick-kit,打開 fine-tuning/dreambooth/stablediffusion_dreambooth_finetuning.zh.ipynb, 一步一步按照 notebook 提示進行操作。
#使用了zwx作為觸發詞, 模型訓練好之后我們使用這個詞來生成圖 instance_prompt="photo\ of\ zwx\ ?toy" class_prompt="photo\ of\ a\ cat toy" #notebook訓練代碼說明 #設置超參 environment = {'PYTORCH_CUDA_ALLOC_CONF':'max_split_size_mb:32','LD_LIBRARY_PATH':"${LD_LIBRARY_PATH}:/opt/conda/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/','instance_prompt': instance_prompt, 'class_prompt':class_prompt,'resolution':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 } hyperparameters = json_encode_hyperparameters(hyperparameters) #啟動sagemaker training job from sagemaker.estimator import Estimator inputs = {'images': f"s3://{bucket}/dreambooth/images/" } estimator = Estimator(role = role,instance_count=1,instance_type = instance_type,image_uri = image_uri,hyperparameters = hyperparameters,environment = environment ) estimator.fit(inputs)左滑查看更多
訓練任務啟動日志:
訓練時間大約在40分鐘左右,也可以通過控制臺 SageMaker Training Job 查看 CloudWatch 日志,訓練結束后會自動把模型上傳到 S3。
訓練完成后可以使用 Quick Kit 推理 notebook 將訓練好的模型加載到 SageMaker 進行推理,訓練好的模型測試如下:
04
結論
綜上所述,本文介紹 Dreambooth 的業務需求及技術原理,通過在 Amazon SageMaker 上 BYOC 方式的 Training Job 解決方案,以及顯存、模型管理、超參等的優化實踐,實現了 Dreambooth fine tuning 的生產化運行。文中腳本代碼及筆記本訓練示例,可做為用戶基于 Stable Diffusion 的 AIGC ML 平臺的工程化的基礎。
05
附錄
Stable Diffusion Quick Kit 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
Dreambooth 論文:
https://dreambooth.github.io/
Dreambooth 原始開源 github: https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/sd_dreambooth_training.ipynb#scrollTo=rscg285SBh4M
Huggingface diffuser 格式轉換工具:
https://github.com/huggingface/diffusers/tree/main/scripts
Stable diffusion webui dreambooth extendtion 插件:
https://github.com/d8ahazard/sd_dreambooth_extension.git
Facebook xformers 開源:
https://github.com/facebookresearch/xformers
本篇作者
唐清原
亞馬遜云科技數據分析解決方案架構師,負責 Amazon Data Analytic 服務方案架構設計以及性能優化,遷移,治理等 Deep Dive 支持。10+數據領域研發及架構設計經驗,歷任 Oracle 高級咨詢顧問,咪咕文化數據集市高級架構師,澳新銀行數據分析領域架構師職務。在大數據,數據湖,智能湖倉,及相關推薦系統 MLOps 平臺等項目有豐富實戰經驗。
粟偉
亞馬遜云科技資深解決方案架構師,專注游戲行業,開源項目愛好者,致力于云原生應用推廣、落地。具有15年以上的信息技術行業專業經驗,擔任過高級軟件工程師,系統架構師等職位,在加入亞馬遜云科技之前曾就職于 Bea、Oracle、IBM 等公司。
聽說,點完下面4個按鈕
就不會碰到 bug 了!
總結
以上是生活随笔為你收集整理的在 Amazon SageMaker 上玩转 Stable Diffusion: 基于 Dreambooth 的模型微调的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: noseunittestpytest
- 下一篇: SpringBoot单元测试RunWit