Le modèle de diffusion stable vous permet de créer des images créatives à l'aide de texte. Amazon propose des modèles pré-formés pour une utilisation facile de l'apprentissage automatique (ML) à l'aide de Sagemaker Jumpstart, qui est fourni avec des modèles de diffiction supplémentaires depuis octobre 2022. Cela vous permet de créer facilement une image de diffusion stable et d'offrir également un point de terminaison SageMaker pour un service immédiat. Le point final de Sagemaker évolue automatiquement lorsque le trafic augmente, il peut donc maintenir efficacement l'infrastructure même lorsque les fluctuations du trafic sont graves et assurent une sécurité améliorée sur IAM.
Dans les mots clés stables Diffness, vous pouvez voir les résultats de la différence stable en fonction des mots clés.
"The Legend of Zelda paysage atmosphérique, hyper réaliste, 8K, composition épique, cinématographique, rendu d'octane, paysage artistique Clifton & Galen Rowell, Résolution 16K, Paysage Veduta Photo de Dustin Lefevre & Tdraw, Résolution 8K DeviantArt, Flickr, rendu à Enscape, Miyazaki, Nausicaa Ghibli, Breath of the Wild, 4K détaillé post-traitement, artStation, rendu par Moteur irréel "

La réponse obtenue lors de la demande de l'image de diffusion stable fournie par Jumpstart avec SageMaker Endpoint est la suivante. Dans la réponse JSON, les informations RVB de l'image sont livrées au champ "généré_image". Pour l'utiliser dans le client, vous devez le changer au format d'image. De plus, comme la certification IAM doit être authentifiée lors de la demande d'une génération d'images de différence stable avec SageMaker Endpoint, le client doit avoir un diplôme IAM, une information sensible et la demande d'API via le SDK AWS. Par conséquent, les navigateurs Web ou les applications mobiles sont difficiles à fournir des services basés sur IAM. Pour cette raison, ce message utilise API Gateway et Lambda pour la certification IAM et la conversion de fichiers d'image en point de terminaison 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
}]
}
}L'architecture globale est la suivante. SageMaker a un modèle de diffusion stable fourni par Jumpstart pour créer une image à partir du texte d'entrée. Lambda fournit les informations textuelles fournies par l'utilisateur à Sagemaker Endpoint via l'authentification IAM et obtient les informations de l'image résultante sous la forme de la carte d'image. La carte d'image est stockée dans le format S3 sous forme de JPEG pour une utilisation facile et crée une URL pour l'image en utilisant des informations de domaine CloudFront. La passerelle API reçoit la demande de l'utilisateur en tant qu'API RESTful et fournit la demande de l'utilisateur à la Lambda, et les informations d'image URL créées par Lambda sont livrées à l'utilisateur. Tous les services sont distribués à l'aide d'AWS CDK et les images de conteneurs Docker sont gérées avec ECR.

Dans Lambda, vous devez spécifier "ContentType" et "accepter" comme indiqué ci-dessous lors de la demande de l'inférence avec le point de terminaison SageMaker.
"ContentType" : "application/json" ,
"Accept" : "application/json" ,Dans ce cas, le corps de la demande fournit les informations nécessaires à la différence stable dans le format ci-dessous. Largeur, la hauteur doit être divisée en 8 pour spécifier la taille de l'image. Num_images_per_prompt est le nombre d'images générées à la fois, et num_inference_steps fait référence à l'étape de débraillage lors de la création d'une image. GUIDANCE_SCALE exprime la mesure de l'invite.
{
predictions ":[{
" prompt ": "astronaut on a horse" ,
"width" : 768 ,
"height" : 512 ,
"num_images_per_prompt" : 1 ,
"num_inference_steps" : 50 ,
"guidance_scale" : 7.5
}]
}Dans lambda_function.py, nous faisons une demande comme indiqué ci-dessous. En utilisant le boto3 de Python, la demande est livrée au point de terminaison SageMaker, le contenuType est "Application / JSON" et l'en-tête accepte "Accept = 'Application / JSON" ou Vous pouvez utiliser "accepter = '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 l'acceptation est appelée "Application / JSON" pour la requête au point de terminaison SageMaker, les données texte faites de RVB se déroulent. Les données d'image sont extraites du "corps" de JSON et "générée_image", puis se convertissent en données d'image binaires qui peuvent être stockées dans S3 à l'aide de PIL (oreiller) et de la bibliothèque Numpy. Le code dans lambda_function.py est illustré ci-dessous.
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" })Soit dit en passant, en lambda, les bibliothèques de l'oreiller et de Numpy doivent être ajoutées avec "Pip Install -Target = [Folder Lambda] Pillow Numpy" puis compressé et téléchargé. Il vous permet d'utiliser des bibliothèques comme Numpy. L'exemple du dockerfile en ce moment est le suivant.
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 vous définissez l'en-tête d'acceptation sur "Application / JSON; JPEG", SageMaker Endpoint transmet l'image JPEG encodante à la base64. Par conséquent, après le décodage de la base64, passez-le en flux binaire inémoratif et téléchargez-le sur 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 préparation du déploiement CDK, nous décrivons comment déployer S3, Lambda, API Gateway et CloudFront à CDK.
Point de terminaison de diffusion stable Créez un point de terminaison stable Difficine dans SageMaker Jumpstart.
L'infrastructure du raisonnement est API Gateway, S3, Lambda, CloudFront et distribuée à AWS CDK. Pour des informations de distribution détaillées, reportez-vous à CDK-stable-diffusion-stack.ts. Après avoir sélectionné Créer un environnement dans Cloud9 Console pour créer Cloud9, entrez le nom comme indiqué ci-dessous. Ici, je suis entré en "diffusion de stabel". Ensuite, gardez tout le reste et sélectionnez [Créer].

Une fois Cloud9 créé, sélectionnez [Ouvrir] et entrez le terminal comme indiqué ci-dessous.

Après cela, téléchargez le code pertinent comme indiqué ci-dessous.
git clone https : //github.com/kyopark2014/stable-diffusion-api-serverÉtant donné que les informations de point de terminaison du SageMaker sont requises lors de la création de l'infrastructure, sélectionnez "CDK-stable-diffusion / lib / lib / lib / lif / liffusion-diffusion-diffusion-stack.ts" comme indiqué ci-dessous.

Accédez à la diffusion CDK-stable et installez les bibliothèques "AWS-CDK-Lib" et "Path" avec NPM. Ici, "AWS-CDK-lib" signifie la bibliothèque CDK 2.0.
cd cdk - stable - diffusion && npm install aws - cdk - lib pathInstallez toute l'infrastructure avec la commande suivante.
cdk deployLorsque l'infrastructure est terminée avec le CDK, vous pouvez trouver les informations de l'infrastructure installée comme indiqué ci-dessous. Où APPurl est disponible pour appeler l'API à l'aide de l'instruction de requête dans le navigateur, et Curlurl est utilisé pour tester dans Shell.

L'exemple réel est le suivant.
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"}'Comment se connecter à partir du navigateur est le suivant. Entrez la phrase pour interroger dans l'invite.
https : //1r9dqh4f37.execute-api.ap-northeast-2.amazonaws.com/dev/text2image?prompt=astronaut on a horseLes résultats en ce moment sont les suivants.

Vous pouvez s'exécuter comme suit avec la commande 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 exemple du résultat du raisonnement. Le «corps» a une URL de l'image générée à la suite du raisonnement.
{ "statusCode" : 200 , "body" : "https://d283dvdglbetjo.cloudfront.net/img_20230208-014926" }Sélectionnez la méthode Post comme indiqué ci-dessous et entrez l'URL.

Entrez dans JSON dans [Body] - [brut].
{
"text" : "astronaut on a horse"
}Ajoutez l'application / JSON à [les en-têtes] comme le type de contenu comme indiqué ci-dessous.

Sélectionnez [envoyé] et obtenez les résultats suivants.

J'ai changé le texte pour entrer comme indiqué ci-dessous.



Un jeune Jedi masculin blonde aux cheveux courts debout immobilisant au Sunset Concept Art de Doug Chiang Cinematic, Painting réaliste, haute définition, concept Art, image portait, traçage de chemin, paysage serein, haute qualité, très détaillé, 8k, couleurs douces, couleurs chaudes, mer turbulente, haute cohérence, anatomique Correct, hyperréaliste, concept art, visage défini, cinq doigts, symétrique

L'œil de la tempête, atmosphérique, hyper réaliste, 8k, composition épique, cinématographique, rendu d'octane, paysage de paysage art Rowell, Résolution 16K, Paysage Veduta Photo de Dustin Lefevre & Tdraw, Résolution 8K, paysage détaillé Flickr, rendu dans Enscape, Miyazaki, Nausicaa Ghibli, Breath of the Wild, 4K détaillé post-traitement

Générez des images à partir de texte avec le modèle de diffiction stable sur Amazon Sagemaker Jumpstart
Simplifier les modèles et les solutions d'apprentissage automatique pré-construites avec Amazon Sagemaker Jumpstart
Introduction à Jumpstart -Text to Image
Point de terminaison SageMaker (point de terminaison du modèle unique)
Construire et automatiser la gestion de vos utilisateurs de studio Sagemaker CDK
Déploiement de points de terminaison SageMaker avec Cloudformation
Exécution de ML sans serveur sur AWS Lambda
Déployer des modèles de difficulté stable sur Amazon Sagemaker Point de terminaison