穩定的擴散模型使您可以使用文本創建創意圖像。亞馬遜提供了使用SageMaker Jumpstart輕鬆使用機器學習(ML)的預培訓模型,自2022年10月以來,該模型已提供了其他差異模型。這使您可以輕鬆地創建穩定的差異圖像,還可以為立即服務提供SageMaker端點。當交通量增加時,SageMaker端點會自動擴展,因此即使交通波動嚴重並提供了IAM的增強安全性,它也可以有效地維護基礎設施。
在穩定的差異關鍵字中,您可以根據關鍵字看到穩定差異的結果。
“ Zelda景觀大氣,過度逼真,8K,史詩般的成分,電影,辛烷值,辛烷值,Artstation景觀的傳奇Clifton&Galen Rowell,16K分辨率,Dustin Lefevre&Tdraw的景觀Veduta照片,8K分辨率deviantart,flickr,在Enscape,Miyazaki,Nausicaa Ghibli,野外呼吸,4K詳細的後期加工,ArtStation,ArtStation,通過虛幻引擎”

請求使用SageMaker端點的Jumpstart提供的穩定擴散圖像時獲得的響應如下。在JSON響應中,圖像的RGB信息將傳遞到“生成的_image”字段。為了在客戶端中使用它,必須將其更改為圖像格式。此外,由於在要求使用SageMaker端點的穩定差異圖像生成時必須對IAM認證進行認證,因此客戶必須通過AWS SDK具有IAM憑據,敏感信息和API請求。因此,網絡瀏覽器或移動應用程序很難提供基於IAM的服務。因此,該帖子使用API網關和Lambda進行IAM認證,並將圖像文件轉換為SageMaker端點。
{
"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網關作為RESTFUL API接收用戶的請求,並將用戶的請求傳遞給Lambda,而Lambda創建的URL圖像信息已交付給用戶。所有服務均使用AWS CDK分發,並使用ECR管理Docker容器圖像。

在lambda中,您必須指定“ contentType”和“接受”,如下所示,請求使用SageMaker Endpoint推斷。
"ContentType" : "application/json" ,
"Accept" : "application/json" ,在這種情況下,請求的主體可為下面的格式提供穩定差異所需的信息。寬度,高度應分為8,以指定圖像的大小。 NUM_IMAGES_PER_PROMPT是一次生成的圖像數量,Num_inference_steps是指創建圖像時的DeNoising步驟。 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”,而接受標頭為“ cackept ='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端點上稱為“ Application/json”的“應用程序/JSON”,則由RGB製成的文本數據降低了。圖像數據是從JSON的“正文”和“生成_image”中提取的,然後轉換為可以使用PIL(Pillow)和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" })順便說一句,在lambda中,應添加枕頭和numpy庫,並添加“ pip install -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標頭設置為“應用程序/JSON; JPEG”,則SageMaker端點將編碼JPEG映像傳輸到base64。因此,在基本64解碼後,將其更改為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網關和CloudFront部署到CDK。
穩定的擴散端點在SageMaker Jumpstart中創建穩定的擴散端點。
推理的基礎架構是API Gateway,S3,Lambda,CloudFront,並分發到AWS CDK。有關詳細的分發信息,請參閱CDK穩定 - 擴散stack.ts。在Cloud9 Console中選擇創建環境以創建Cloud9之後,輸入名稱,如下所示。在這裡,我進入了“刺擴散”。之後,保留所有其餘部分,然後選擇[創建]。

創建雲9後,選擇[打開]並輸入終端,如下所示。

之後,下載相關代碼,如下所示。
git clone https : //github.com/kyopark2014/stable-diffusion-api-server由於在創建基礎架構時需要使用SageMaker的端點信息,因此請選擇“ CDK-stable-diffusion/lib/lib/lif/lif/lif/lif/lif/lif/lif fifusion-diffusion-diffusion-stack.ts”,如下所示。

轉到CDK穩定擴散,然後使用NPM安裝“ AWS-CDK-LIB”和“路徑”庫。在這裡,“ AWS-CDK-LIB”是指CDK 2.0庫。
cd cdk - stable - diffusion && npm install aws - cdk - lib path使用以下命令安裝整個基礎架構。
cdk deploy當基礎架構使用CDK完成時,您可以找到已安裝的基礎架構的信息,如下所示。如果可以使用瀏覽器中的查詢語句調用Appurl來調用API,而Curlurl用於在Shell中進行測試。

實際示例如下。
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" }選擇如下所示的郵政方法並輸入URL。

在[身體] - [RAW]中輸入JSON。
{
"text" : "astronaut on a horse"
}如下所示,將應用程序/JSON添加到[標頭]作為束類型。

選擇[已發送]並獲得以下結果。

我將文本更改為輸入,如下所示。



一位年輕的金發男性絕地,短髮,依然依靠道格·千葉電影,現實繪畫,高清,概念的日落概念藝術藝術,港口圖像,路徑追踪,寧靜的景觀,高質量,高度詳細,8k,柔軟的色彩,暖色,動蕩的海,高相干,解剖學正確,超現實,概念藝術,定義的面部,五個手指,對稱性

風暴的眼睛,大氣,過度逼真的,8k,史詩般的構圖,電影,辛烷值,辛烷值,Artstation Landscape Vista Photo羅威爾(Rowell),16k分辨率,景觀veduta攝影作品,達斯汀·勒菲弗爾(Dustin Lefevre&Tdraw),8k分辨率,詳細的景觀flickr,在恩斯卡普(Enscape),宮崎駿(Miyazaki),nausicaa ghibli,野外呼吸,4K詳細的後期處理

使用Amazon Sagemaker上的穩定差異模型從文本中生成圖像
簡化模型和機器學習解決方案與Amazon Sagemaker Pred -jumpstart預先建立
簡介摘要 - 文本到圖像
SageMaker端點(單型號端點)
構建和自動化您的SageMaker Studio用戶CDK的管理
用雲形式部署薩吉式終點
在AWS lambda上運行無服務器ML
在Amazon SageMaker端點上部署穩定的差異模型