稳定的扩散模型使您可以使用文本创建创意图像。亚马逊提供了使用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添加到[标头]作为束类型。

选择[已发送]并获得以下结果。

我将文本更改为输入,如下所示。



一位年轻的金发男性绝地,短发站立在道格·钟(Doug Chiang)电影,现实绘画,高清,概念的日落概念艺术艺术,港口图像,路径追踪,宁静的景观,高质量,高度详细,8k,柔软的色彩,暖色,动荡的海,高相干,解剖学正确,超现实,概念艺术,定义的面部,五个手指,对称性

风暴的眼睛,大气,过度逼真,8k,史诗般的构图,电影,辛烷值渲染,Artstation景观远景罗威尔(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端点上部署稳定的差异模型