安定した拡散モデルを使用すると、テキストを使用してクリエイティブな画像を作成できます。 Amazonは、2022年10月から追加のDiffnessモデルが提供されているSagemaker Jumpstartを使用して、機械学習(ML)を簡単に使用できる事前に訓練されたモデルを提供しています。これにより、安定したDiffnessイメージを簡単に作成し、Sagemakerのエンドポイントを即座に提供することができます。 Sagemakerのエンドポイントは、トラフィックが増加すると自動的にスケーリングされるため、トラフィックの変動が深刻である場合でも、インフラストラクチャを効率的に維持でき、IAMのセキュリティが強化されます。
安定したDiffnessキーワードでは、キーワードに応じて安定した違いの結果を見ることができます。
「ゼルダ風景の雰囲気の雰囲気、ハイパーリアル、8k、壮大な構成、映画、オクタンレンダリング、アートステーションランドスケープClifton&Galen Rowell、16K解像度、Landscape Veduta Photo by Dustin Lefevre&Tdraw、8K Resolution Deviantart、Flickr、Enscape、Miyazaki、Nausicaa Ghibli、Breath of the Wild、4K詳細後処理、アートステーション、レンダリング非現実的なエンジン」

Sagemaker Endpointを使用してJumpstartが提供する安定した拡散画像を要求するときに得られた応答は次のとおりです。 JSON応答では、画像のRGB情報が「generated_image」フィールドに配信されます。これをクライアントで使用するには、画像形式に変更する必要があります。さらに、Sagemaker Endpointで安定した差異画像生成を要求する場合、IAM認定を認証する必要があるため、クライアントはAWS SDKを介したIAM資格、機密情報、およびAPI要求を持っている必要があります。したがって、WebブラウザーまたはモバイルアプリをIAMベースのサービスを提供することは困難です。このため、この投稿では、IAM認定とSagemaker EndpointへのIMAMのコンバージョンにAPI GatewayとLambdaを使用しています。
{
"generated_image" : [
[[ 221 , 145 , 108 ],[ 237 , 141 , 98 ],[ 249 , 154 , 111 ],..]
...
],
"prompt" : "{
predictions" :[{
"prompt" : "astronaut on a horse" ,
"width" : 768 ,
"height" : 512 ,
"num_images_per_prompt" : 1 ,
"num_inference_steps" : 50 ,
"guidance_scale" : 7.5
}]
}
}全体的なアーキテクチャは次のとおりです。 Sagemakerには、JumpStartが提供する安定した拡散モデルがあり、入力テキストから画像を作成します。 Lambdaは、IAM認証を介してユーザーがSagemakerエンドポイントに配信したテキスト情報を配信し、結果の画像の情報を画像マップの形式で取得します。画像マップは、簡単に使用できるJPEG形式としてS3に保存され、CloudFrontドメイン情報を使用して画像のURLを作成します。 API Gatewayは、Restful APIとしてユーザーの要求を受信し、ユーザーのリクエストをLambdaに配信し、Lambdaによって作成されたURL画像情報がユーザーに配信されます。すべてのサービスはAWS CDKを使用して配布され、Dockerコンテナ画像はECRで管理されています。

Lambdaでは、Sagemaker Endpointへの推論を要求するときに、以下に示すように「ContentType」と「Accept」を指定する必要があります。
"ContentType" : "application/json" ,
"Accept" : "application/json" ,この場合、リクエストの本文は、安定した違いに必要な情報を以下の形式に配信します。幅、高さを8に分割して、画像のサイズを指定する必要があります。 num_images_per_promptは一度に生成された画像の数であり、num_inference_stepsは、画像を作成する際の除去ステップを指します。 Guidance_scaleは、プロンプトの範囲を表します。
{
predictions ":[{
" prompt ": "astronaut on a horse" ,
"width" : 768 ,
"height" : 512 ,
"num_images_per_prompt" : 1 ,
"num_inference_steps" : 50 ,
"guidance_scale" : 7.5
}]
}Lambda_function.pyでは、以下に示すようにリクエストを行います。 PythonのBoto3を使用して、リクエストはSageMakerエンドポイントに配信され、ContentTypeは「Application/JSON」であり、Acceptヘッダーは「Accept = 'Application/JSON」または"Accept = 'Application/json; jpeg"を使用できます。
import boto3
runtime = boto3 . Session (). client ( 'sagemaker-runtime' )
response = runtime . invoke_endpoint ( EndpointName = endpoint , ContentType = 'application/json' , Accept = 'application/json;jpeg' , Body = json . dumps ( payload ))Sagemaker Endpointでのクエリに対して、受け入れが「アプリケーション/JSON」と呼ばれる場合、RGBで作られたテキストデータがダウンします。画像データは、JSONの「ボディ」と「Generated_Image」から抽出され、PIL(枕)とNumpyライブラリを使用してS3に保存できるバイナリ画像データに変換します。 lambda_function.pyのコードを以下に示します。
from PIL import Image
import numpy as np
def parse_response ( query_response ):
response_dict = json . loads ( query_response )
return response_dict [ "generated_images" ], response_dict [ "prompt" ]
response_payload = response [ 'Body' ]. read (). decode ( 'utf-8' )
generated_image , prompt = parse_response ( response_payload )
image = Image . fromarray ( np . uint8 ( generated_images [ 0 ]))
buffer = io . BytesIO ()
image . save ( buffer , "jpeg" )
buffer . seek ( 0 )
s3 = boto3 . client ( 's3' )
s3 . upload_fileobj ( buffer , mybucket , mykey , ExtraArgs = { "ContentType" : "image/jpeg" })ちなみに、ラムダでは、枕とnumpyライブラリを「PIPインストール-target = [Lambdaフォルダー]枕numpy」で追加し、圧縮してアップロードする必要があります。 Numpyなどのライブラリを使用できます。この時点でのDockerFileの例は次のとおりです。
FROM amazon / aws - lambda - python : 3.8
RUN pip3 install -- upgrade pip
RUN python - m pip install joblib awsiotsdk
RUN pip install numpy pillow
WORKDIR / var / task / lambda
COPY lambda_function . py / var / task
COPY . .
CMD [ "lambda_function.lambda_handler" ]Acceptヘッダーを「Application/JSON; JPEG」に設定すると、Sagemaker EndpointはエンコードJPEGイメージをBase64に送信します。したがって、base64デコードの後、それをin -memoryバイナリストリームに変更し、S3にアップロードします。
response_payload = response [ 'Body' ]. read (). decode ( 'utf-8' )
generated_image , prompt = parse_response ( response_payload )
import base64
img_str = base64 . b64decode ( generated_image )
buffer = io . BytesIO ( img_str )
s3 . upload_fileobj ( buffer , mybucket , mykey , ExtraArgs = { "ContentType" : "image/jpeg" })CDKの展開に備えて、S3、Lambda、API Gateway、およびCloudFrontをCDKに展開する方法について説明します。
安定した拡散エンドポイントSagemaker Jumpstartに安定したDiffnessエンドポイントを作成します。
推論のためのインフラストラクチャは、APIゲートウェイ、S3、ラムダ、クラウドフロント、およびAWS CDKに配布されます。詳細な配布情報については、CDK-stable-diffusionstack.tsを参照してください。 Cloud9コンソールで環境の作成を選択してCloud9を作成した後、以下に示すように名前を入力します。ここでは、「Stabel Diffusion」を入力しました。その後、すべての残りを保持し、[作成]を選択します。

Cloud9が作成されたら、[開いて]を選択し、以下に示すように端子を入力します。

その後、以下に示すように関連するコードをダウンロードしてください。
git clone https : //github.com/kyopark2014/stable-diffusion-api-serverインフラストラクチャを作成する際にサージメーカーのエンドポイント情報が必要であるため、以下に示すように「CDK-stable-diffusion/lib/lib/lib/lib/lifusion-difusion-diffusion-stack.ts」を選択します。

cdk-stable diffusionに移動し、NPMに「AWS-CDK-LIB」および「PATH」ライブラリをインストールします。ここで、「AWS-CDK-LIB」とはCDK 2.0ライブラリを意味します。
cd cdk - stable - diffusion && npm install aws - cdk - lib path次のコマンドでインフラストラクチャ全体をインストールします。
cdk deploy以下に示すように、インフラストラクチャがCDKで完了したら、インストールされたインフラストラクチャの情報を見つけることができます。ブラウザでクエリステートメントを使用してAPIRLがAPIを呼び出すことができる場合、Curlurlはシェルでテストするために使用されます。

実際の例は次のとおりです。
CdkStableDiffusionStack . WebUrl = https : //1r9dqh4f37.execute-api.ap-northeast-2.amazonaws.com/dev/text2image?prompt=astronaut
CdkStableDiffusionStack . curlUrl = curl - X POST https : //1r9dqh4f37.execute-api.ap-northeast-2.amazonaws.com/dev/text2image -H "Content-Type: application/json" -d '{"text":"astronaut on a horse"}'ブラウザから接続する方法は次のとおりです。プロンプトでクエリするために文を入力します。
https : //1r9dqh4f37.execute-api.ap-northeast-2.amazonaws.com/dev/text2image?prompt=astronaut on a horse現時点での結果は次のとおりです。

Curlコマンドで次のように実行できます。
curl - X POST https : //1r9dqh4f37.execute-api.ap-northeast-2.amazonaws.com/dev/text2image -H "Content-Type: application/json" -d '{"text":"astronaut on a horse"}'推論の結果の例。 「ボディ」には、推論の結果として生成された画像のURLがあります。
{ "statusCode" : 200 , "body" : "https://d283dvdglbetjo.cloudfront.net/img_20230208-014926" }以下に示すようにPOSTメソッドを選択し、URLを入力します。

[body] - [raw]でJSONに入ります。
{
"text" : "astronaut on a horse"
}以下に示すように、コンテンタイプとして[ヘッダー]にアプリケーション/JSONを追加します。

[送信]を選択し、次の結果を取得します。

以下に示すように、入力するようにテキストを変更しました。



ダグチアンシネマティック、リアルな絵画、高解像度、コンセプトによるサンセットコンセプトアートに静止している短い髪の若いブロンドの男性ジェダイアート、ポーテイトイメージ、パストレース、穏やかな風景、高品質、非常に詳細な、8K、柔らかい色、暖かい色、乱流海、高コヒーランス、解剖学正しい、超現実的な、コンセプトアート、定義された顔、5本の指、対称

嵐の目、大気、ハイパーリアル、8K、壮大な構成、映画、オクタンレンダリング、アートステーションランドスケープビスタ写真Rowell、16K Resolution、Landscape Veduta Photo by Dustin Lefevre&Tdraw、8K解像度、詳細な風景flickr、enscape、miyazaki、nausicaa ghibliでレンダリングされた、ブレスオブザワイルド、4k詳細な後処理

Amazon Sagemakerジャンプスタートで安定したDiffnessモデルを使用してテキストから画像を生成する
モデルと機械学習ソリューションを簡素化して、Amazon Sagemaker Jumpstartで作成しました
Jumpstart -Text to Imageの紹介
Sagemakerエンドポイント(単一モデルエンドポイント)
Sagemaker Studioユーザーの管理を構築して自動化するCDK
クラウド形成を備えたサジェメーカーのエンドポイントを展開します
AWSラムダでサーバーレスMLを実行します
Amazon Sagemakerエンドポイントに安定したDiffnessモデルを展開します