El modelo de difusión estable le permite crear imágenes creativas usando texto. Amazon ofrece modelos previamente capacitados para el uso fácil del aprendizaje automático (ML) utilizando Sagemaker JumpStart, que se ha proporcionado con modelos de diferencia adicionales desde octubre de 2022. Esto le permite crear fácilmente una imagen de difusión estable y también ofrecer un punto final de Sagemaker para un servicio inmediato. El punto final de Sagemaker escala automáticamente cuando el tráfico aumenta, por lo que puede mantener la infraestructura de manera eficiente, incluso cuando las fluctuaciones de tráfico son graves y proporcionan una mayor seguridad sobre IAM.
En las palabras clave de difusión estable, puede ver los resultados de la diferencia estable de acuerdo con las palabras clave.
"La leyenda del paisaje de Zelda atmosférico, hiper realista, 8k, composición épica, render de octanaje, paisaje de artesos Clifton y Galen Rowell, resolución de 16k, paisaje Veduta Foto de Dustin Lefevre & Tdraw, resolución de 8k Deviantart, Flickr, renderizado en Enscape, Miyazaki, Nausicaa Ghibli, Breath of the Wild, 4k Post Processing, Artstation, renderizado por Motor irreal "

La respuesta obtenida al solicitar la imagen de difusión estable proporcionada por JumpStart con Sagemaker Endpoint es la siguiente. En la respuesta JSON, la información RGB de la imagen se entrega al campo "Generado_Image". Para usar esto en el cliente, debe cambiarlo al formato de imagen. Además, dado que la certificación IAM debe autenticarse al solicitar una generación de imágenes de diferencia estable con Sagemaker Endpoint, el cliente debe tener una credencial de IAM, una información confidencial y la solicitud de API a través del AWS SDK. Por lo tanto, los navegadores web o las aplicaciones móviles son difíciles de proporcionar servicios basados en IAM. Por esta razón, esta publicación utiliza API Gateway y Lambda para la certificación IAM y la conversión de archivos de imagen a Sagemaker Endpoint.
{
"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
}]
}
}La arquitectura general es la siguiente. Sagemaker tiene un modelo de difusión estable proporcionado por JumpStart para crear una imagen desde el texto de entrada. Lambda ofrece la información de texto entregada por el usuario al punto final de Sagemaker a través de la autenticación IAM y obtiene la información de la imagen resultante en forma de mapa de imágenes. El mapa de la imagen se almacena en el formato S3 como un formato JPEG para que el usuario pueda usarlo fácilmente, creando una URL para la imagen utilizando la información del dominio CloudFront. La puerta de enlace de la API recibe la solicitud del usuario como una API RESTful y entrega la solicitud del usuario a la Lambda, y la información de imagen de URL creada por Lambda se entrega al usuario. Todos los servicios se distribuyen utilizando AWS CDK, y las imágenes de contenedores de Docker se gestionan con ECR.

En Lambda, debe especificar "ContentType" y "Aceptar" como se muestra a continuación al solicitar una inferencia con Sagemaker Endpoint.
"ContentType" : "application/json" ,
"Accept" : "application/json" ,En este caso, el cuerpo de la solicitud ofrece la información necesaria para la diferencia estable al formato a continuación. Ancho, la altura debe dividirse en 8 para especificar el tamaño de la imagen. Num_images_per_prompt es el número de imágenes generadas a la vez, y num_inference_steps se refiere al paso de renovación al crear una imagen. Guía_scale expresa el alcance del aviso.
{
predictions ":[{
" prompt ": "astronaut on a horse" ,
"width" : 768 ,
"height" : 512 ,
"num_images_per_prompt" : 1 ,
"num_inference_steps" : 50 ,
"guidance_scale" : 7.5
}]
}En lambda_function.py, hacemos una solicitud como se muestra a continuación. Utilizando el Boto3 de Python, la solicitud se entrega al punto final de Sagemaker, el ContentType es "Aplicación/JSON", y el encabezado Aceptar es "Aceptar = 'Aplicación/JSON" o Puede usar "Aceptar = '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 ))Si la aceptación se llama "Aplicación/JSON" para la consulta en Sagemaker Endpoint, los datos de texto hechos de RGB se reducen. Los datos de la imagen se extraen del "cuerpo" de JSON y "Generated_image", y luego se convierte en datos de imagen binarios que se pueden almacenar en S3 utilizando pil (almohada) y biblioteca Numpy. El código en lambda_function.py se muestra a continuación.
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" })Por cierto, en Lambda, las bibliotecas de almohada y numpy deben agregarse con "Pip install -target = [carpeta lambda] almohada numpy" y luego comprimidas y cargadas. Le permite usar bibliotecas como Numpy. El ejemplo del Dockerfile en este momento es el siguiente.
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" ]Si establece el encabezado Aceptar en "Application/JSON; JPEG", Sagemaker Endpoint transmite la imagen JPEG de codificación a la base64. Por lo tanto, después de la decodificación de Base64, cámbielo a la transmisión binaria in -memoria y cárguela a 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" })En preparación para la implementación de CDK, describimos cómo implementar S3, Lambda, API Gateway y CloudFront a CDK.
Punto final de difusión estable Cree un punto final de difusión estable en Sagemaker JumpStart.
La infraestructura para el razonamiento es API Gateway, S3, Lambda, Cloudfront y distribuida a AWS CDK. Para obtener información detallada de distribución, consulte CDK-Stable-Diffusion Stack.ts. Después de seleccionar Crear entorno en la consola Cloud9 para crear Cloud9, ingrese el nombre como se muestra a continuación. Aquí, entré en "difusión de Stabel". Luego, mantenga todo el resto y seleccione [Crear].

Después de que se crea Cloud9, seleccione [Abrir] e ingrese el terminal como se muestra a continuación.

Después de eso, descargue el código relevante como se muestra a continuación.
git clone https : //github.com/kyopark2014/stable-diffusion-api-serverDado que se requiere la información del punto final del Sagemaker al crear la infraestructura, seleccione "CDK-Stable-Diffusion/Lib/Lib/Lib/LIF/Liffusion-Diffusion-Diffusion-Stack.ts" como se muestra a continuación.

Vaya a la difusión-estable CDK e instale bibliotecas "AWS-CDK-LIB" y "ruta" con NPM. Aquí, "AWS-CDK-LIB" significa la biblioteca CDK 2.0.
cd cdk - stable - diffusion && npm install aws - cdk - lib pathInstale toda la infraestructura con el siguiente comando.
cdk deployCuando la infraestructura se completa con el CDK, puede encontrar la información de la infraestructura instalada como se muestra a continuación. Donde Appurl está disponible para llamar a la API utilizando la instrucción de consulta en el navegador, y el curlurl se usa para probar en shell.

El ejemplo real es el siguiente.
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"}'Cómo conectarse desde el navegador es el siguiente. Ingrese la oración para consultar en el mensaje.
https : //1r9dqh4f37.execute-api.ap-northeast-2.amazonaws.com/dev/text2image?prompt=astronaut on a horseLos resultados en este momento son los siguientes.

Puede ejecutar de la siguiente manera con el comando 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"}'Un ejemplo del resultado del razonamiento. El "cuerpo" tiene una URL de la imagen generada como resultado del razonamiento.
{ "statusCode" : 200 , "body" : "https://d283dvdglbetjo.cloudfront.net/img_20230208-014926" }Seleccione el método de publicación como se muestra a continuación e ingrese la URL.

Ingrese en json en [cuerpo] - [crudo].
{
"text" : "astronaut on a horse"
}Agregue la aplicación/JSON a [encabezados] como el tipo conten como se muestra a continuación.

Seleccione [enviado] y obtenga los siguientes resultados.

Cambié el texto para ingresar como se muestra a continuación.



Un joven jedi rubio con cabello corto de pie en el arte conceptual de Sunset de Doug Chiang, pintura realista, alta definición, concepto Arte, imagen portait, rastreo de ruta, paisaje sereno, alta calidad, altamente detallada, 8k, colores suaves, colores cálidos, mar turbulento, alta coherencia, anatómica Correcto, hiperrealista, arte conceptual, cara definida, cinco dedos, simétricos

El ojo de la tormenta, atmosférico, hiper realista, 8k, composición épica, cinemato, render de octano, artstation paisajismo Rowell, resolución de 16k, paisaje foto veduta de Dustin Lefevre & Tdraw, resolución de 8k, paisaje detallado Flickr, renderizado en Enscape, Miyazaki, Nausicaa Ghibli, Breath of the Wild, 4K Post Processing

Genere imágenes a partir de texto con el modelo de difusión estable en Amazon Sagemaker Jumpstart
Simplificando modelos y soluciones de aprendizaje automático pre -construido con Amazon Sagemaker Jumpstart
Introducción a Jumpstart -Text a imagen
Sagemaker Endpoint (punto final de modelo único)
Cree y automatice la administración de sus usuarios de SageMaker Studio CDK
Implementación de puntos finales de Sagemaker con CloudFormation
Ejecutando Servidor sin ML en AWS Lambda
Implementar modelos de diferencia estable en Amazon Sagemaker Endpoint