รูปแบบการแพร่กระจายที่เสถียรช่วยให้คุณสร้างภาพที่สร้างสรรค์โดยใช้ข้อความ Amazon เสนอรุ่นที่ผ่านการฝึกอบรมมาก่อนเพื่อใช้งานการเรียนรู้ของเครื่องจักร (ML) โดยใช้ Sagemaker JumpStart ซึ่งได้รับการจัดทำโมเดล Diffness เพิ่มเติมตั้งแต่เดือนตุลาคม 2565 สิ่งนี้ช่วยให้คุณสร้างภาพความแตกต่างที่เสถียรได้อย่างง่ายดายและยังมีจุดสิ้นสุดของ Sagemaker สำหรับบริการทันที จุดสิ้นสุดของ Sagemaker จะขยายขนาดโดยอัตโนมัติเมื่อการจราจรเพิ่มขึ้นดังนั้นจึงสามารถรักษาโครงสร้างพื้นฐานได้อย่างมีประสิทธิภาพแม้ว่าความผันผวนของการจราจรจะรุนแรงและให้ความปลอดภัยที่เพิ่มขึ้นบน IAM
ในคำหลักความแตกต่างที่เสถียรคุณสามารถเห็นผลลัพธ์ของความแตกต่างที่เสถียรตามคำหลัก
"ตำนานของบรรยากาศภูมิทัศน์ของ Zelda, Hyper Fenalist, 8K, องค์ประกอบมหากาพย์, ภาพยนตร์, การเรนเดอร์ออกเทน, ภูมิทัศน์ศิลปะ Clifton & Galen Rowell, ความละเอียด 16k, Landscape Veduta Photo โดย Dustin Lefevre & Tdraw, 8K ความละเอียด Deviantart, Flickr, แสดงใน Enscape, Miyazaki, Nausicaa Ghibli, Breath of the Wild, การประมวลผลโพสต์รายละเอียด 4K, ArtStation, การแสดงผลโดย เครื่องยนต์ Unreal "

การตอบสนองที่ได้รับเมื่อขอภาพการแพร่กระจายที่เสถียรโดย JumpStart พร้อมจุดสิ้นสุดของ Sagemaker มีดังนี้ ในการตอบสนอง JSON ข้อมูล RGB ของภาพจะถูกส่งไปยังฟิลด์ "สร้าง _image" ในการใช้สิ่งนี้ในไคลเอนต์คุณต้องเปลี่ยนเป็นรูปแบบภาพ นอกจากนี้เนื่องจากการรับรอง IAM จะต้องได้รับการรับรองความถูกต้องเมื่อขอการสร้างภาพที่แตกต่างกันอย่างเสถียรด้วยจุดสิ้นสุดของ Sagemaker ลูกค้าจะต้องมีข้อมูลรับรอง IAM ข้อมูลที่ละเอียดอ่อนและคำขอ API ผ่าน AWS SDK ดังนั้นเว็บเบราว์เซอร์หรือแอพมือถือจึงเป็นเรื่องยากที่จะให้บริการที่ใช้ IAM ด้วยเหตุผลนี้โพสต์นี้ใช้ API Gateway และ 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 เพื่อสร้างภาพจากข้อความอินพุต แลมบ์ดาส่งข้อมูลข้อความที่ผู้ใช้ส่งไปยังจุดสิ้นสุดของ Sagemaker ผ่านการรับรองความถูกต้องของ IAM และได้รับข้อมูลของภาพผลลัพธ์ในรูปแบบของแผนที่ภาพ แผนที่รูปภาพจะถูกเก็บไว้ใน S3 เป็นรูปแบบ JPEG เพื่อให้ผู้ใช้สามารถใช้งานได้อย่างง่ายดายสร้าง URL สำหรับรูปภาพโดยใช้ข้อมูลโดเมน CloudFront API Gateway ได้รับคำขอของผู้ใช้เป็น API ที่พักผ่อนและส่งคำขอของผู้ใช้ไปยังแลมบ์ดาและข้อมูลภาพ URL ที่สร้างโดยแลมบ์ดาถูกส่งไปยังผู้ใช้ บริการทั้งหมดมีการแจกจ่ายโดยใช้ AWS CDK และรูปภาพคอนเทนเนอร์ Docker ได้รับการจัดการด้วย ECR

ในแลมบ์ดาคุณต้องระบุ "ContentType" และ "ยอมรับ" ดังที่แสดงด้านล่างเมื่อขออนุมานกับจุดสิ้นสุดของ Sagemaker
"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 เราทำการร้องขอตามที่แสดงด้านล่าง การใช้ boto3 ของ Python คำขอจะถูกส่งไปยังจุดสิ้นสุดของ Sagemaker, ContentType คือ "Application/JSON" และส่วนหัวที่ยอมรับคือ "ACCEPT = 'Application/JSON" หรือ คุณสามารถใช้ "accept = 'แอปพลิเคชัน/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 ))หากการยอมรับเรียกว่า "แอปพลิเคชัน/JSON" สำหรับการสืบค้นที่จุดสิ้นสุดของ Sagemaker ข้อมูลข้อความที่ทำจาก RGB จะลงมา ข้อมูลภาพถูกสกัดจาก "ร่างกาย" ของ JSON และ "สร้าง _Image" จากนั้นแปลงเป็นข้อมูลภาพไบนารีที่สามารถเก็บไว้ใน S3 โดยใช้ PIL (หมอน) และห้องสมุด NumPy รหัสใน 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 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" ]หากคุณตั้งค่าส่วนหัวที่ยอมรับไว้เป็น "แอปพลิเคชัน/json; jpeg", Sagemaker Endpoint ส่งภาพ JPEG ที่เข้ารหัสไปยัง Base64 ดังนั้นหลังจากการถอดรหัส Base64 ให้เปลี่ยนเป็นกระแสไบนารีใน -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
โครงสร้างพื้นฐานสำหรับการใช้เหตุผลคือ API Gateway, S3, Lambda, Cloudfront และแจกจ่ายให้กับ AWS CDK สำหรับข้อมูลการแจกจ่ายโดยละเอียดโปรดดูที่ CDK-Stable-Diffusion-Stack.TS หลังจากเลือกสร้างสภาพแวดล้อมในคอนโซล Cloud9 เพื่อสร้าง Cloud9 ให้ป้อนชื่อดังที่แสดงด้านล่าง ที่นี่ฉันป้อน "Stabel Diffusion" หลังจากนั้นให้ส่วนที่เหลือทั้งหมดและเลือก [สร้าง]

หลังจากสร้างคลาวด์ 9 ให้เลือก [เปิด] และป้อนเทอร์มินัลตามที่แสดงด้านล่าง

หลังจากนั้นให้ดาวน์โหลดรหัสที่เกี่ยวข้องดังที่แสดงด้านล่าง
git clone https : //github.com/kyopark2014/stable-diffusion-api-serverเนื่องจากข้อมูลปลายทางของ SAGEMAKER เป็นสิ่งจำเป็นเมื่อสร้างโครงสร้างพื้นฐานให้เลือก "CDK-STABLE-DIFFUSION/LIB/LIB/LIB/LIF/LIFFUSION-DIFFUSION-DIFFUSION-STACK.TS" ดังที่แสดงด้านล่าง

ไปที่ CDK-STABLE-DIFFUSION และติดตั้ง "AWS-CDK-LIB" และ "PATH" ไลบรารีด้วย NPM ที่นี่ "AWS-CDK-LIB" หมายถึงไลบรารี CDK 2.0
cd cdk - stable - diffusion && npm install aws - cdk - lib pathติดตั้งโครงสร้างพื้นฐานทั้งหมดด้วยคำสั่งต่อไปนี้
cdk deployเมื่อโครงสร้างพื้นฐานเสร็จสมบูรณ์ด้วย CDK คุณสามารถค้นหาข้อมูลของโครงสร้างพื้นฐานที่ติดตั้งดังที่แสดงด้านล่าง ที่ Appurl พร้อมใช้งานสำหรับการโทร API โดยใช้คำสั่ง Query ในเบราว์เซอร์และ 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" }เลือกวิธีการโพสต์ตามที่แสดงด้านล่างและป้อน URL

เข้าสู่ JSON ใน [Body] - [RAW]
{
"text" : "astronaut on a horse"
}เพิ่มแอปพลิเคชัน/JSON ใน [ส่วนหัว] เป็นประเภท conten ดังที่แสดงด้านล่าง

เลือก [ส่ง] และรับผลลัพธ์ต่อไปนี้

ฉันเปลี่ยนข้อความเพื่อป้อนตามที่แสดงด้านล่าง



เจไดชายผมบลอนด์หนุ่มที่มีผมสั้นยืนนิ่งอยู่ที่งานศิลปะแนวความคิดของ Sunset โดย Doug Chiang Cinematic, ภาพวาดที่สมจริง, ความละเอียดสูง, แนวคิด ศิลปะ, ภาพ Portait, การติดตามเส้นทาง, ภูมิทัศน์อันเงียบสงบ, คุณภาพสูง, รายละเอียดสูง, 8K, สีอ่อน, สีอบอุ่น, ทะเลปั่นป่วน, การเชื่อมโยงกันสูง, กายวิภาค ถูกต้อง, hyperrealistic, แนวคิดศิลปะ, ใบหน้าที่กำหนด, ห้านิ้ว, สมมาตร

The Eye of the Storm, บรรยากาศ, Hyper Reaming, 8K, องค์ประกอบมหากาพย์, ภาพยนตร์, การเรนเดอร์ออกเทน, ภูมิทัศน์ศิลปะ Rowell, ความละเอียด 16K, Landscape Veduta Photo โดย Dustin Lefevre & Tdraw, ความละเอียด 8K, ภูมิทัศน์โดยละเอียด Flickr, แสดงใน Enscape, Miyazaki, Nausicaa Ghibli, Breath of the Wild, 4K โดยละเอียดการประมวลผลโพสต์

สร้างภาพจากข้อความด้วยโมเดล Diffness ที่เสถียรใน Amazon Sagemaker Jumpstart
การทำให้โมเดลและโซลูชันการเรียนรู้ของเครื่องง่ายขึ้นก่อนที่จะสร้างด้วย Amazon Sagemaker JumpStart
รู้เบื้องต้นเกี่ยวกับ jumpstart -text to image
Sagemaker Endpoint (จุดสิ้นสุดรุ่นเดียว)
สร้างและปรับการจัดการของผู้ใช้ Sagemaker Studio ของคุณ CDK
การปรับใช้จุดสิ้นสุดของ Sagemaker ด้วย CloudFormation
เรียกใช้ ML Serverless บน AWS Lambda
ปรับใช้โมเดล Diffness ที่เสถียรในจุดสิ้นสุดของ Amazon Sagemaker