Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整

この記事では、Stable Diffusion Quick Kit を例に、Dreambooth を使用して Stable Diffusion モデルを微調整する方法について詳しく説明します。これには、Stable Diffusion モデルの微調整の基礎知識、Dreambooth の微調整の概要、Quick Kit を使用してデモで微調整の効果を示すことなどが含まれます。

この記事は 例として、使用方法を詳しく説明します。 安定拡散モデルの微調整に関する基本的な知識、Dreambooth の微調整の概要など、モデルを微調整し、Quick Kit を使用してデモを通じて微調整の効果を実証します。

Amazon Web Services 公式サイト:https://www.amazonaws.cn

Amazonクラウド海外公式サイト:https://aws.amazon.com/cn/

01
安定拡散モデルの微調整
現在、安定拡散モデルを微調整する主な方法は 4 つあります。Dreambooth、LoRA (大規模言語モデルの低ランク適応)、テキスト反転、ハイパーネットワーク。

それらの違いはおおよそ次のようになります。

テキスト反転(埋め込みとも呼ばれます)は、元の拡散モデルを実際に変更するわけではありません。ディープラーニングを用いて、目的の画像と一致する文字画像の特徴パラメータを見つけ出し、この小さなモデルに保存します。つまり、元のモデルがこの分野で十分な学習をしていない場合、埋め込みによって「学習」させることは実際には困難であり、拡散モデルにこれまで見たことのない画像コンテンツをレンダリングするように教えることはできません。
Dreamboothは、ニューラルネットワーク全体の全層の重みを調整し、入力画像を安定拡散モデルに学習させます。その本質は、まずソースモデルをコピーし、それに基づいて微調整を行い、独立して新しいモデルを構築することです。基本的に何でも可能です。欠点は、学習に大量のVRAMを必要とすることです。現在、調整後、16GBのビデオメモリで学習を完了できます。
LoRAも少数の画像を使用しますが、特定のネットワーク層の重みを学習し、新しいネットワーク層を元のモデルに挿入することで、元のモデルのパラメータを変更したり、モデル全体をコピーしたりすることを回避します。また、挿入層のパラメータ数を最適化し、最終的に非常に軽量なモデルチューニング方法を実現します。LoRAによって生成されるモデルは小さく、学習が高速です。推論にはLoRAモデル+基本モデルが必要です。LoRAモデルは基本モデルの特定のネットワーク層を置き換えるため、その効果は基本モデルに依存します。
Hypernetworksの学習原理はLoRAと似ています。現在、公式ドキュメントは存在しません。LoRAとは異なり、Hypernetworkは独立したニューラルネットワークモデルであり、元の拡散モデルに挿入可能な中間層を出力するために使用されます。したがって、学習を通じて、適切な中間層と対応するパラメータを元の拡散モデルに挿入できる新しいニューラルネットワークモデルが得られ、出力画像が入力指示に関連付けられます。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
 注記: 写真はインターネットから引用したものです
02
Dreamboothとは
安定拡散モデルは、テキスト生成画像や画像生成画像といった豊富な画像生成シナリオを実現できますが、現実世界の特定の物体が画像に現れる場合、最先端のテキスト生成画像モデルであっても、その主要な視覚的特徴を保持することが困難です。つまり、与えられた参照セットにおける対象の外観を模倣または再現する能力が欠如しているのです。このようなモデルの出力領域の表現力には限界があります。テキスト反転微調整を用いて物体の正確なテキスト記述を提供したり、ハイパーネットワークを用いてスタイルを保持したりしたとしても、異なる外観を持つインスタンスが生成される可能性があります。

DreamBoothアルゴリズムはImagenモデルを微調整し、画像内の実在物体を忠実に復元する機能を実現します。少数の実在物体画像を微調整することで、元のSDモデルは画像エンティティの記憶の忠実性を維持し、元の画像内のエンティティの主要な特徴やテーマスタイルまでもテキストに認識します。これは、ユーザー固有の画像生成ニーズに合わせて調整可能な、新しいテキストから画像への「パーソナライズされた」(つまり、ユーザー固有の画像生成ニーズに適応可能な)拡散モデルです。

Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
Dreamboothの微調整が直面する問題と課題
Dreambooth の微調整の原則は、少数の入力画像を使用し、エンティティ本体 (おもちゃの猫/ロンメルなど) とインスタンス画像の微調整画像を instance_prompt によって定義し、シーンまたはテーマ スキーマ (漫画、油絵スタイルなど) を定義するクラス予測プロンプトとクラス画像画像を提供し、元の SD 内の UNet と vae ネットワークを抽出し、インスタンス プロンプトとクラス保存プロンプトをそれにバインドすることで、その後に生成される画像では、インスタンス プロンプトにキーワード トークンがある限り、入力インスタンス画像内のメイン エンティティが維持され、クラス保存グラフィックによって定義されたテーマ スタイルが維持されるようにすることです。

現在、DreamBooth を微調整するには主に 2 つの方法があります。

まず、安定拡散において モデルの選択、トレーニング画像のアップロード、ローカライズされたトレーニングにはビジュアル インターフェースが使用されます。
2 つ目は、colab ノートブックなどのサードパーティ IDE プラットフォーム上でスクリプト対話型開発モードでトレーニングを実施することです。
一つ目の方法は、Stable Diffusion WebUIアプリケーションがデプロイされている単一のサーバーまたはホスト上でのみトレーニングが可能で、企業や顧客のバックエンドプラットフォームや業務と統合できません。一方、二つ目の方法は、開発・テスト段階で個々のアルゴリズムエンジニアがモデルの実験や探索を行うことに重点を置いており、本番環境ベースのエンジニアリング展開を実現できません。さらに、上記の2つのDreamboothトレーニング方法では、高性能コンピューティングマシンリソースのコスト(特にモデル効果に対する要求が高く、50クラス以上の画像が必要で、ビデオメモリのOOMが発生しやすいシナリオ)、基本モデルと微調整後のモデルの保存と管理、トレーニングハイパーパラメータの管理、ログの統合モニタリング、トレーニングの加速、ライブラリのコンパイルとパッケージ化への依存など、具体的な実装レベルでは一連の困難と課題にも注意が必要です。
03
Dreamboothの微調整にSageMakerトレーニングジョブを使用する
SageMakerは、機械学習モデルの構築、トレーニング、デプロイを容易にする幅広い機能を提供する、ワンストップの機械学習統合開発プラットフォームです。トレーニングジョブレベルでは、V100、A100、T4など、様々な種類のモデルをプルできます。 BYOC(Bring Your Own Container)、BYOS(Bring Your Own Script)などによる最適化されたコンピューティングリソースにより、ユーザーは独自のトレーニングスクリプトやカスタマイズされたコンテナイメージを使用し、トレーニングプロセスを柔軟に制御し、独自のデータ前処理およびモデル評価手法を利用できます。さらに、自動ハイパーパラメータ最適化や分散トレーニングなどの高度な機能により、ユーザーはSageMakerの専用フレームワークやライブラリを使用して、Dreamboothモデルを柔軟かつカスタマイズして微調整・最適化し、WebUIやノートブックのローカル環境の制限を排除し、本番業務システムと統合してエンジニアリング展開を実現できます。

以下では、BYOC トレーニングジョブを使用して Amazon SageMaker で Dreambooth の微調整を実行し、Dreambooth トレーニングプロセスのメモリオーバーヘッド、モデル管理、ハイパーパラメータを最適化する方法について詳しく説明します。これにより、ユーザーは独自の ML プラットフォームまたはビジネスシステムにエンジニアリングを実装し、トレーニングの全体的な TCO を削減できます。

Dreambooth の SageMaker 技術ソリューションの微調整
モデル プル、トレーニング イメージ入力、モデル出力、トレーニング タスク タイプの観点から、SageMaker での Dreambooth ファイン チューニングの技術的実装について説明します。
モデルプル
AmazonはHuggingFaceと戦略的パートナーシップを結んでいます。そのため、SageMakerのトレーニングジョブでは、diffuseパイプラインAPIとpretrained_model_name_or_pathハイパーパラメータ変数を使用して、標準的なhuggingfaceモデルのURL形式(runwayml/stable-diffusion-v1-5など)のモデルID、またはモデルファイルディレクトリ(/opt/ml/model/stable-diffusion-v1.5/など)を渡すことができます。SageMakerは、アカウント登録や認証トークンの提示なしに、Huggingfaceからモデルを自動的に取得します。コード例は次のとおりです。
model_dir='/opt/ml/input/fineturned_model/' モデル = StableDiffusionPipeline.from_pretrained( model_dir, スケジューラ = DPMSolverMultistepScheduler.from_pretrained(model_dir, サブフォルダ="scheduler"), torch_dtype=torch.float16, )

 

トレーニング画像入力
微調整に使用する入力画像については、SageMakerのトレーニングジョブがトレーニングデータの入力に便利な方法を提供しています。inputsパラメータを通じて、入力画像チャネル名(imagesなど)を辞書形式で、入力画像のS3への保存パスを値として設定できます。SageMakerがトレーニングタスクを実行すると、S3から画像がダウンロードされ、コンピューティングマシンの/opt/ml/input/data/{channel}ディレクトリに配置されます。コード例は次のとおりです。
 
images_s3uri = 's3://{0}/drebooth/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)

 

 

モデル出力
トレーニング後、SageMakerはモデルファイルをデフォルトでmodel.tar.gzとしてパッケージ化し、S3上のtraining jobというサブディレクトリにアップロードします。お客様の本番環境システムはAPIを介してパスの場所を直接取得できるため、モデル管理とその後の推論のデプロイが容易になります(以下を参照)。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
トレーニング方法
Amazon SageMaker は、モデルトレーニングに BYOS および BYOC モードをサポートしています。Dreambooth モデルトレーニングでは、diffuse、huggingface、accelerate、xformers など、多くの依存関係のインストールとデプロイが必要です。さらに、xformers や accelerate などのオープンソースライブラリは、GPU モデルや cuda および cudnn のバージョンによって互換性が異なります。直接 pip インストールしてコンピューティングマシンにインストールしてデプロイすることは困難です。そのため、このソリューションでは BYOC 方式を採用し、Pytorch、cuda、torchversion などの公式プリセット基本イメージをベースに、ソースコードのコンパイルとパッケージ化を通じて xformers などの必要なライブラリをインストールし、お客様が作成した 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 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 []

 

パッケージ化されたイメージを Amazon ECR イメージリポジトリにプッシュするためのスクリプトは次のとおりです。
algorithm_name=dreambooth-finetuning-v3 account=$(aws sts get-caller-identity --query Account --output text) # 現在の設定で定義されているリージョンを取得します (定義されていない場合はデフォルトで us-west-2 になります)。region=$(aws configure getregion) fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # ECR にリポジトリが存在しない場合は作成します。 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 # Docker にログインします pwd=$(aws ecr get-login-password --region ${region}) docker login --username AWS -p ${pwd} ${account}.dkr.ecr.${region}.amazonaws.com # イメージ名を使用して Docker イメージをローカルにビルドし、完全な名前で 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 tag ${algorithm_name} ${fullname} docker push ${fullname} rm -rf ./sd_code

 

Dreambooth on SageMaker の微調整最適化
1
WebUIプラグインから削除
DreamBoothは、 文献、HuggingFaceのcolabノートブックのサンプルコードに関するオープンソース、参照  関連情報このバージョンをベースに拡張・更新する人はたくさんいます。最も完成度の高いバージョンは、安定拡散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_extentions のコード:

https://github.com/d8ahazard/sd_dreambooth_extension

前述のように、SD WebUI はバックエンドの業務システムと統合できないため、WebUI プラグイン モードから分離し、基本モデル、入力画像、インスタンス プロンプト、クラス プロンプト、微調整されたモデル出力などの標準入力に基づいて、別のモデル トレーニング プログラムにカプセル化する必要があります。

WebUI プラグインから分離するには、次の点に対処する必要があります。
プラグインコードは、WebUIフロントエンドインターフェースの様々なコンポーネントにバインドされた操作やデータインタラクションと連携しています。例えば、元のコードの共有部分には、Webページから入力された様々なトレーニングパラメータが保存されています。
shared.force_cpuの場合: modules.sharedをインポートします。no_safe = modules.shared.cmd_opts.disable_safe_unpickle modules.shared.cmd_opts.disable_safe_unpickle = True

 

mytqdm クラスは、Web ページの進行状況バーのステータス情報を表示します。
helpers.mytqdm から mytqdm をインポートします

 

この種のコードは、エンジニアリングされたバックグラウンドトレーニングジョブでは不要です。フロントエンドページから渡されるパラメータをハイパーパラメータとして整理し、メインボディで使用できるようにしています。 parse_args ライブラリを解析して取得し、ページ表示情報に関連するコードを削除します。

クリーンアップされたsd_extentionsコードはhttps://github.com/qingyuan18/sd_dreambooth_extension.gitで確認できます。コアとなるtrainモジュールのみが保持され、webui.py、helper、shardといったフロントエンドの連携関連コードはクリーンアップされていることがわかります。

トレーニングタスクパラメータの受け渡し
SageMakerトレーニングジョブは、モデルハイパーパラメータの受け渡しと解析をサポートしています。APIでは、前述のオリジナルプラグインコード内のmodel_path、model_name、instance_prompt、class_promptなどのパラメータがJSON文字列のキーと値のペアの形式でカプセル化され、Estimator APIを介してトレーニングジョブに渡されます。SageMakerトレーニングマシン内では、-key valueの標準的なargsパラメータ受け渡しモードに解析されるため、トレーニングコードではpython parse_argsライブラリを介して解析・処理できます。以下のコード例を参照してください。
ハイパーパラメータ = { '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( ロール = role, インスタンス数 = 1, インスタンスタイプ = インスタンスタイプ, イメージ uri = image_uri, ハイパーパラメータ = ハイパーパラメータ )

 

WebUI入力モデル
形式はckpt(最新のWebUIはsafetensor形式)で、diffuserトレーニング時にfrom_pretrainedでロードされるモデルパイプラインはStable Diffusionのモデルパスまたはローカルパス形式です(デフォルトはディレクトリパスで、その下にvae、unet、tokenizationerなどのサブモデルディレクトリがあり、各サブモデルディレクトリは独立したtorch pt形式のファイル(サフィックスは.bin)です)。

お客様の本番環境にckpt形式のモデルファイルが1つだけ存在する場合(civit.aiサイトからダウンロードしたモデルなど)、diffuserが提供する変換スクリプトを使用してckpt形式からdiffuserディレクトリ形式に変換することで、本番環境に同じコードをロードできます。スクリプトの使用例は以下の通りです。

Python convert_original_stable_diffusion_to_diffusers.py —チェックポイントパス ./models_ckpt/768-v-ema.ckpt —ダンプパス ./models_diffuser

 

上記のように、dump_path の出力はdiffuser形式のディレクトリです。このディレクトリを展開すると、vae、unet、text_encoderのサブモデルディレクトリファイルが表示されます。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
2
出力モデル管理
SageMaker のモデルトレーニング コンピューティング マシンのディレクトリ構造は次のとおりです。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
トレーニング済みモデルは、デフォルトで/opt/ml/model/ディレクトリに出力されます。SageMakerトレーニングジョブが完了すると、このディレクトリ内のモデルファイルはtar.gzファイルにパッケージ化され、トレーニングタスクのS3パスにアップロードされます。安定拡散モデルなどの複合モデルの場合、複数のサブディレクトリがあります。各サブディレクトリ内のモデルファイルは独立したbin形式です。各hモデルファイルは4Gまたは5Gを超える場合、SageMakerは自動的にパッケージ化して 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'ファイル {local_path} が 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) ### トレーニング済みの DB モデル ディレクトリを手動で s3 にアップロードします。path##### #### sagemaker tar プロセスを削除するため。##### print(f"manul_upload_model_path is {args.manul_upload_model_path}") upload_directory_to_s3(args.models_path,args.manul_upload_model_path)

 

この最適化により、800 ステップの SageMaker での Dreambooth トレーニングが 1 時間から約 30 分に短縮されました。
3
GPUメモリの最適化
Dreamboothのような大規模モデルの微調整トレーニングでは、コストが重要な要素となります。Amazonは様々なGPUモデルのコンピューティングリソースを提供しており、その中でもG4dnモデルは最もコスト効率が高く、ほぼすべてのAmazonリージョンでリソースを利用できます。

しかし、g4dnモデルは16GBのビデオメモリを搭載したNVIDIA T4グラフィックカードを1枚しか搭載していません。Dreamboothは、unetネットワークとvaeネットワークを再学習させ、以前の損失重みを保持する必要があります。より忠実度の高いDreamboothの微調整が必要な場合、入力データは数十枚にもなり、学習プロセスは1000ステップにもなります。ネットワーク全体、特にunetネットワークのグラフィックスノイズ除去とノイズ除去は、ビデオメモリのオーバーヘッド(OOM)を引き起こしやすく、学習タスクの失敗につながる可能性があります。

Dreamboothモデルを16GBのビデオメモリを搭載したコスト効率の高いマシンでトレーニングできるよう、複数の最適化を行いました。その結果、SageMakerでのDreamboothの微調整にはG4dn.xlargeマシンのみが必要となり、トレーニングは数百から3,000ステップで完了するため、お客様のDreamboothトレーニングコストを大幅に削減できます。

微調整コンポーネントを調整する
安定拡散モデルでは、text_encoder は CLIP サブモデルのテキストエンコーダです。インスタンスプロンプト/クラスプロンプトが長いテキストでない場合、Dreambooth はテキストエンコーダの再学習を必要としません。これは、いくつかのルールを調整したためです。ビデオメモリが 16GB 未満の場合は、text_encoder 部分の再学習はオフになります。ビデオメモリが 16GB 未満の場合は、8 ビット Adam オプティマイザーと fp16 半精度勾配データ形式が自動的に有効になります。ビデオメモリが 16GB 未満の場合は、CPU に直接オフロードして学習させることもできます。

コード例は次のとおりです。

print(f"合計VRAM: {gb}") 24 > gb >= 16の場合: attention = "xformers" not_cache_latents = False train_text_encoder = True use_ema = True 16 > gb >= 10の場合: train_text_encoder = False use_ema = False gbの場合 < 10: use_cpu = True use_8bit_adam = False mixing_precision = 'no'

 

xformersの使用
Formersはオープンソースの学習加速フレームワークです。異なるレイヤーのパラメータを保存し、各サブレイヤーのビデオメモリを動的に読み込み、自己注意メカニズムとレイヤー間の情報伝達を最適化することで、学習速度に影響を与えることなくビデオメモリを大幅に削減できます。

Dreamboothのトレーニング中、デフォルトのフラッシュメモリからxformersに注視が切り替わります。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 1回あたりに処理する画像数。インスタンス画像やクラス画像の数が少ない場合(10枚未満)は、この値を1に設定することで、バッチ処理する画像数を減らし、ビデオメモリの使用量を減らすことができます。
  • 'sample_batch_size': 1 は train_batch_size に相当し、サンプリング、ノイズ除去、ノイズ除去を一度に行うバッチスループットです。この値を下げると、ビデオメモリの使用量も削減されます。
  • not_cache_latents さらに、Stable Diffusionの学習は潜在拡散モデルに基づいています。元のモデルは潜在拡散をキャッシュしますが、ここでは主にインスタンスプロンプトとクラスプロンプトの下で正則化を学習します。そのため、GPUビデオメモリが逼迫している場合は、潜在拡散をキャッシュしないことでビデオメモリの使用量を最小限に抑えることができます。
  • 'gradient_accumulation_steps' 勾配更新のバッチ。トレーニングステップが1000など大きい場合は、勾配更新のステップ数を増やし、一定のバッチまで累積した後に一括更新することができます。値が大きいほど、ビデオメモリの使用量が増加します。ビデオメモリを削減したい場合は、トレーニング時間を多少犠牲にしてこの値を減らすことができます。テキストエンコーダtext_encodeの再トレーニングを選択した場合、勾配累積はサポートされておらず、マルチGPUマシンで加速マルチカード分散トレーニングが有効になっている場合、バッチ勾配更新gradient_accumulation_stepsは1にのみ設定できます。それ以外の場合、テキストエンコーダの再トレーニングは無効になります。
安定拡散クイックキット Dreambooth モデルの微調整デモンストレーション
デモでは、猫のおもちゃの写真を 4 枚使用し、ツールを使用して 512×512 の均一なサイズにトリミングしました。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
次に、事前に作成した SageMaker ノートブックに入り、Quick Kit リポジトリのクローンを作成し (git clone https://github.com/aws-samples/sagemaker-stablediffusion-quick-kit)、fine-tuning/dreambooth/stablediffusion_dreambooth_finetuning.zh.ipynb を開いて、ノートブックのプロンプトに手順ごとに従います。
# はトリガーワードとして zwx を使用します。モデルをトレーニングした後、この単語を使用してグラフを生成しますinstance_prompt="photo\ of\ zwx\ toy" class_prompt="photo\ of\ a\ cat toy" #ノートブックトレーニングコードの説明#ハイパーパラメータを設定します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.estimator から Sagemaker トレーニング ジョブを開始します。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)

 

トレーニングタスクの起動ログ:
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
トレーニング時間は約40分です。SageMaker Training JobコンソールからCloudWatchログを確認することもできます。トレーニングが完了すると、モデルは自動的にS3にアップロードされます。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
トレーニングが完了したら、Quick Kit推論ノートブックを使用して、トレーニング済みのモデルをSageMakerにロードし、推論を実行できます。トレーニング済みのモデルのテストは以下の通りです。
Amazon SageMakerで安定拡散を試す: Dreamboothに基づくモデルの微調整
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

Huggingface ディフューザー形式変換ツール:

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

安定した拡散 WebUI Dreambooth 拡張プラグイン:

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

xformers オープンソース:

https://github.com/facebookresearch/xformers

スコア

手紙への返信

メールアドレスが変更されることはありません。 支払い欄に必須の項目は必須です