Zephyrnet Logosu

Stable Diffusion modelleriyle yüksek kaliteli görüntüler oluşturun ve bunları Amazon SageMaker | Amazon Web Hizmetleri

Tarih:

Metinden resme oluşturma, bir makine öğrenimi (ML) modelinin metinsel bir açıklamadan bir görüntü oluşturduğu bir görevdir. Amaç, metnin ayrıntılarını ve nüanslarını yakalayan, açıklamaya yakından uyan bir görüntü oluşturmaktır. Bu görev zordur, çünkü modelin metnin semantiğini ve söz dizimini anlamasını ve fotogerçekçi görüntüler oluşturmasını gerektirir. AI fotoğrafçılığı, konsept sanatı, bina mimarisi, moda, video oyunları, grafik tasarım ve çok daha fazlasında metinden görüntüye oluşturmanın birçok pratik uygulaması vardır.

Kararlı Difüzyon saniyeler içinde yüksek kaliteli görüntüler oluşturmanızı sağlayan bir metinden görüntüye modelidir. Bu tür bir modelle gerçek zamanlı etkileşim hedef olduğunda, sorunsuz bir kullanıcı deneyiminin sağlanması, GPU'lar veya GPU'lar gibi çıkarım için hızlandırılmış donanımların kullanımına bağlıdır. AWS Çıkarımı2, Amazon'un kendi makine öğrenimi çıkarım hızlandırıcısı. GPU'ların kullanımıyla ilgili yüksek maliyetler, tipik olarak, farklı mimarileri veya kişiselleştirilmiş (ince ayarlı) modelleri dağıtmanız gerektiğinde daha da fazla olmak üzere, temel bilgi işlemin kullanımının optimize edilmesini gerektirir. Amazon Adaçayı Yapıcı çok modelli uç noktalar (MME'ler), binlerce modeli tek bir uç noktaya ölçeklendirmenize yardımcı olarak bu sorunu çözmenize yardımcı olur. Paylaşılan bir sunum kapsayıcısı kullanarak birden çok modeli aynı uç nokta ve hatta aynı GPU içinde uygun maliyetli, ölçeklenebilir bir şekilde barındırabilirsiniz.

Bu yazıda, Stable Difüzyon model mimarileri, farklı Stable Difüzyon modelleri türleri ve görüntü kalitesini artırma teknikleri hakkında bilgi edineceksiniz. Ayrıca, SageMaker MME'leri ve NVIDIA Triton Inference Server'ı kullanarak Stable Difüzyon modellerini uygun maliyetli bir şekilde nasıl kuracağınızı da gösteriyoruz.

Komut istemi: sevimli bir bernese köpeğinin portresi, elke Vogelsang'ın sanatı, 8k ultra gerçekçi, artstation'da trend oluyor, 4k Komut istemi: oturma odasının mimari tasarımı, 8 k ultra gerçekçi, 4 k, hiper gerçekçi, odaklanmış, aşırı ayrıntılar İstem: Geceleri New York silüeti, 8k, uzun çekim fotoğrafçılığı, gerçek dışı motor 5, sinematik, başyapıt

Kararlı Difüzyon mimarisi

Stable Diffusion, yalnızca bir metin istemi sağlayarak farklı stil ve içeriklere sahip görüntüler oluşturmak için kullanabileceğiniz, metinden görüntüye açık kaynaklı bir modeldir. Metinden görüntüye oluşturma bağlamında, bir difüzyon modeli, metinsel açıklamalardan yüksek kaliteli görüntüler oluşturmak için kullanabileceğiniz üretken bir modeldir. Difüzyon modelleri, girdi ve çıktı modaliteleri, metin ve resimler arasındaki karmaşık bağımlılıkları yakalayabilen bir üretken model türüdür.

Aşağıdaki diyagram, bir Kararlı Difüzyon modelinin üst düzey mimarisini göstermektedir.

Aşağıdaki temel unsurlardan oluşur:

  • metin kodlayıcı – CLIP, giriş istemi metnini alan ve metindeki her bir kelimeyi temsil eden belirteç katıştırmalarına dönüştüren dönüştürücü tabanlı bir metin kodlayıcı modelidir. CLIP, görüntü kodlayıcı ve metin kodlayıcının bir kombinasyonu olan bir görüntü veri kümesi ve altyazıları üzerinde eğitilmiştir.
  • U-Net – Bir U-Net modeli, bir dizi gürültülü girişle birlikte CLIP'ten belirteç yerleştirmelerini alır ve gürültüsü giderilmiş bir çıktı üretir. Bu, her adımın bir girdi gizli tensörünü işlediği ve girdi metnini daha iyi temsil eden yeni bir gizli uzay tensörü ürettiği bir dizi yinelemeli adım olsa gerçekleşir.
  • Otomatik kodlayıcı-kod çözücü – Bu model nihai görüntüleri oluşturur. U-Net modelinden gürültüden arındırılmış nihai gizli çıktıyı alır ve onu metin girişini temsil eden görüntülere dönüştürür.

Kararlı Difüzyon modellerinin türleri

Bu gönderide, Hugging Face model merkezinden Stability AI tarafından önceden eğitilmiş aşağıdaki Stable Difusion modellerini keşfediyoruz.

kararlı difüzyon-2-1-baz

Bir metin istemine dayalı görüntüler oluşturmak için bu modeli kullanın. Bu, üzerinde eğitilen modelin temel bir sürümüdür. LAION-5B. Model, büyük ölçekli veri setinin bir alt kümesi üzerinde eğitilmiştir. LAION-5Bve çoğunlukla İngilizce altyazılı. Kullanırız StableDiffusionPipeline itibaren diffusers metin istemlerinden görüntüler oluşturmak için kitaplık. Bu model, 512 x 512 boyutunda görüntüler oluşturabilir. Aşağıdaki parametreleri kullanır:

  • istemi – Bilgi istemi bir metin sözcüğü, deyim, cümleler veya paragraflar olabilir.
  • negatif_bilgi istemi – Ayrıca, belirtilen öğeleri görüntü oluşturma sürecinden çıkarmak ve oluşturulan görüntülerin kalitesini artırmak için olumsuz bir bilgi istemi iletebilirsiniz.
  • rehberlik_ölçeği – Daha yüksek bir yönlendirme ölçeği, görüntü kalitesi pahasına istemle daha yakından ilişkili bir görüntüyle sonuçlanır. Belirtilmişse, bir kayan nokta olmalıdır.

kararlı difüzyon-2-derinlik

Bu model, orijinal görüntüdeki nesnelerin şeklini ve derinliğini korurken mevcut olanlardan yeni görüntüler oluşturmak için kullanılır. Bu stable-diffusion-2-depth model ince ayarlıdır kararlı difüzyon-2-baz, (bağıl) derinlik tahminini işlemek için ekstra bir giriş kanalı. Kullanırız StableDiffusionDepth2ImgPipeline itibaren diffusers işlem hattını yüklemek ve derinlik görüntüleri oluşturmak için kitaplık. Aşağıdakiler, derinlik modeline özgü ek parametrelerdir:

  • görüntü – Yeni görüntülerin oluşturulmasını koşullandırmak için ilk görüntü.
  • sayı_çıkarım_adımları (opsiyonel) – Gürültü giderme adımlarının sayısı. Daha fazla gürültü giderici adım, genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir görüntüye yol açar. Bu parametre tarafından modüle edilir strength.
  • güç (isteğe bağlı) – Kavramsal olarak bu, referans görüntünün ne kadar dönüştürüleceğini gösterir. Değer 0–1 arasında olmalıdır. image başlangıç ​​noktası olarak kullanılır ve güç arttıkça ona daha fazla gürültü eklenir. Gürültü giderme adımlarının sayısı, başlangıçta eklenen gürültü miktarına bağlıdır. Ne zaman strength 1'dir, eklenen gürültü maksimum olur ve gürültü giderme işlemi, içinde belirtilen tam yineleme sayısı boyunca çalışır. num_inference_steps. 1 değeri, bu nedenle, esasen yok sayar image. Daha fazla ayrıntı için aşağıdakilere bakın kod.

kararlı difüzyon-2-iç boyama

Bu modeli yapay zeka görüntü geri yükleme kullanım durumları için kullanabilirsiniz. Bilgi istemlerinden ve ek bağımsız değişkenlerden yeni tasarımlar ve görüntüler oluşturmak için de kullanabilirsiniz. Bu model de temel modelden türetilmiştir ve bir maske oluşturma stratejisine sahiptir. Değiştirilecek bölümleri ve değişmeden bırakılacak bölümleri temsil etmek için orijinal görüntünün maskesini belirtir. Kullanırız StableDiffusionUpscalePipeline itibaren diffusers orijinal görüntü üzerinde boyama değişikliklerini uygulamak için kitaplık. Aşağıdaki ek parametre derinlik modeline özeldir:

  • maske_girişi – Görüntü oluşturulurken karartılan bölümün değişmeden kaldığı ve beyaz bölümün değiştirildiği bir görüntü

kararlı difüzyon-x4-yukarı ölçekleyici

Bu model ayrıca LAION'un 10 x 2048 görüntü içeren 2048M alt kümesinde ek olarak eğitilmiş temel modelden türetilmiştir. Adından da anlaşılacağı gibi, daha düşük çözünürlüklü görüntüleri daha yüksek çözünürlüklere yükseltmek için kullanılabilir.

Kullanım örneğine genel bakış

Bu gönderi için, metinden yeni görüntüler oluşturma, mevcut görüntülerin stillerini değiştirme, görüntülerden istenmeyen nesneleri kaldırma ve düşük çözünürlüklü görüntüleri daha yüksek çözünürlüğe yükseltme dahil olmak üzere birden çok yeteneğe sahip bir AI görüntü hizmeti kullanıyoruz. Stabil Difüzyon modellerinin çeşitli varyasyonlarını kullanarak, bu kullanım durumlarının tümünü tek bir SageMaker uç noktasında ele alabilirsiniz. Bu, çok sayıda modeli yüksek performanslı, ölçeklenebilir ve uygun maliyetli bir şekilde barındırmanız gerekeceği anlamına gelir. Bu gönderide, SageMaker MME'leri ve NVIDIA Triton Inference Sunucusunu kullanarak birden çok Kararlı Difüzyon modelinin uygun maliyetli bir şekilde nasıl dağıtılacağını gösteriyoruz. Metinden resme modellerle çalışmak için uygulama ayrıntılarını, optimizasyon tekniklerini ve en iyi uygulamaları öğreneceksiniz.

Aşağıdaki tablo, bir SageMaker MME'ye dağıttığımız Kararlı Yayılma modellerini özetlemektedir.

Model adı GB cinsinden Model Boyutu
stabilityai/stable-diffusion-2-1-base 2.5
stabilityai/stable-diffusion-2-depth 2.7
stabilityai/stable-diffusion-2-inpainting 2.5
stabilityai/stable-diffusion-x4-upscaler 7

Çözüme genel bakış

Aşağıdaki adımlar, Stable Difüzyon modellerini SageMaker MME'lerine dağıtmakla ilgilidir:

  1. Stable Difüzyon modellerini yerel bir dizine indirmek için Hugging Face hub'ını kullanın. Bu indirecek scheduler, text_encoder, tokenizer, unet, and vae her Kararlı Difüzyon modeli için karşılık gelen yerel dizine. biz kullanıyoruz revision="fp16" modelin versiyonu.
  2. NVIDIA Triton model deposunu, model yapılandırmalarını ve model sunma mantığını kurun model.py. Triton, tahminlere hizmet etmek için bu yapıları kullanır.
  3. Conda ortamını ek bağımlılıklarla ve SageMaker MME'ye dağıtılacak paket modeli havuzuyla paketleyin.
  4. Model eserlerini NVIDIA Triton'a özgü bir biçimde paketleyin ve yükleyin model.tar.gz için Amazon Basit Depolama Hizmeti (Amazon S3). Model, görüntü oluşturmak için kullanılacaktır.
  5. Bir SageMaker modeli, uç nokta yapılandırması yapılandırın ve SageMaker MME'yi konuşlandırın.
  6. Kararlı Difüzyon modelini kullanarak görüntüler oluşturmak için çıkarım çalıştırın ve SageMaker uç noktasına bilgi istemleri gönderin. Biz belirtiyoruz TargetModel değişken ve sonuçları görsel olarak karşılaştırmak için farklı Kararlı Difüzyon modellerini çağırın.

Bu çözüm mimarisini uygulamak için kodu yayınladık. GitHub repo. Başlamak için BENİOKU yönergelerini izleyin.

Modelleri NVIDIA Triton Inference Server Python arka ucuyla sunun

Stable Diffusion ardışık düzen modelini bir SageMaker MME'ye dağıtmak için bir Triton Python arka ucu kullanıyoruz. Python arka ucu, Python'da Triton Inference Server tarafından yazılan modelleri sunmanıza olanak tanır. Python arka ucunu kullanmak için bir Python dosyası oluşturmanız gerekir. model.py aşağıdaki yapıya sahiptir: Her Python arka ucu, TritonPythonModel sınıf:

import triton_python_backend_utils as pb_utils
class TritonPythonModel: """Your Python model must use the same class name. Every Python model
that is created must have "TritonPythonModel" as the class name. """
def auto_complete_config(auto_complete_model_config):
def initialize(self, args):
def execute(self, requests):
def finalize(self):

Her Python arka ucu, dört ana işlevi uygulayabilir. TritonPythonModel sınıf: auto_complete_config, initialize, execute, ve finalize.

initialize model yüklenirken çağrılır. uygulama initialize İsteğe bağlı. initialize çıkarımı çalıştırmadan önce gerekli tüm başlatmaları yapmanızı sağlar. İçinde initialize işlevi, bir boru hattı oluşturuyoruz ve kullanarak boru hatlarını yüklüyoruz. from_pretrained kontrol noktaları. Zamanlayıcıları işlem hattı zamanlayıcı yapılandırmasından yapılandırıyoruz pipe.scheduler.config. Son olarak belirtiyoruz xformers etkinleştirmek için optimizasyonlar xformer bellek verimli parametre enable_xformers_memory_efficient_attention. hakkında daha fazla ayrıntı sunuyoruz xformers bu yazının devamında. Farklı işlem hattı ayrıntılarını anlamak için her modelin model.py dosyasına başvurabilirsiniz. Bu dosya model deposunda bulunabilir.

The execute bir çıkarım isteği yapıldığında işlev çağrılır. Her Python modeli aşağıdakileri uygulamalıdır: execute işlevi. İçinde execute işlevi, size bir liste verilir InferenceRequest nesneler. Modelden bir görüntü almak için giriş metni istemini boru hattına iletiyoruz. Görüntülerin kodu çözülür ve oluşturulan görüntü bu işlev çağrısından döndürülür.

Giriş tensörünü model konfigürasyonunda tanımlanan addan alıyoruz. config.pbtxt dosya. Çıkarım isteğinden şunu elde ederiz: prompt, negative_prompt, ve gen_argsve bunları deşifre edin. Tüm argümanları model boru hattı nesnesine iletiyoruz. Oluşturulan görüntü tahminlerini döndürmek için görüntüyü kodlayın. başvurabilirsiniz config.pbtxt Farklı işlem hattı ayrıntılarını anlamak için her modelin dosyası. Bu dosya model deposunda bulunabilir. Son olarak, oluşturulan görüntüyü içine sarıyoruz InferenceResponse ve yanıtı döndürün.

Uygulama finalize İsteğe bağlı. Bu işlev, model Triton Inference Server'dan kaldırılmadan önce gerekli tüm temizlikleri yapmanızı sağlar.

Python arka ucuyla çalışırken, girdilerin toplu olarak işlenmesini ve yanıtların buna göre geri gönderilmesini sağlamak kullanıcının sorumluluğundadır. Bunu başarmak için aşağıdaki adımları izlemenizi öneririz:

  1. içindeki tüm istekler arasında döngü requests oluşturmak için nesne batched_input.
  2. Üzerinde çıkarım çalıştır batched_input.
  3. Sonuçları çoklu olarak bölün InferenceResponse nesneleri ve bunları yanıtlar olarak birleştirin.

Bakın Triton Python arka uç belgeleri or Triton kullanarak Amazon SageMaker'da makine öğrenimi modelleri barındırın: Python arka ucu daha fazla ayrıntı için.

NVIDIA Triton model deposu ve yapılandırması

Model deposu, model sunan betiği, model yapıtlarını ve belirteç yapıtlarını, paketlenmiş bir conda ortamını (çıkarım için gerekli bağımlılıklarla birlikte), Triton yapılandırma dosyasını ve çıkarım için kullanılan Python betiğini içerir. İkincisi, Python arka ucunu kullandığınızda zorunludur ve Python dosyasını kullanmalısınız. model.py. inpaint Stable Difüzyon modelinin yapılandırma dosyasını inceleyelim ve belirtilen farklı seçenekleri anlayalım:

name: "sd_inpaint"
backend: "python"
max_batch_size: 8
input [ { name: "prompt" data_type: TYPE_STRING dims: [ -1 ] }, { name: "negative_prompt" data_type: TYPE_STRING dims: [ -1 ] optional: true }, { name: "image" data_type: TYPE_STRING dims: [ -1 ] }, { name: "mask_image" data_type: TYPE_STRING dims: [ -1 ] }, { name: "gen_args" data_type: TYPE_STRING dims: [ -1 ] optional: true }
]
output [ { name: "generated_image" data_type: TYPE_STRING dims: [ -1 ] }
]
instance_group [ { kind: KIND_GPU }
]
parameters: { key: "EXECUTION_ENV_PATH", value: {string_value: "/tmp/conda/sd_env.tar.gz" }
}

Aşağıdaki tabloda çeşitli parametreler ve değerler açıklanmaktadır:

anahtar - Detaylar
name Model yapılandırma adı özelliğinin dahil edilmesi gerekli değildir. Konfigürasyonun model adını belirtmemesi durumunda, modelin depolandığı model deposu dizininin adıyla aynı olduğu varsayılır. Ancak, bir ad verilirse, modelin saklandığı model deposu dizininin adıyla eşleşmelidir. sd_inpaint yapılandırma özelliği adıdır.
backend Bu, model tahminlerine hizmet edecek Triton çerçevesini belirtir. Bu zorunlu bir parametredir. belirtiyoruz python, çünkü Stable Diffusion modellerini barındırmak için Triton Python arka ucunu kullanacağız.
max_batch_size Bu, modelin aşağıdakiler için desteklediği maksimum parti boyutunu gösterir: harmanlama türleri bu Triton tarafından istismar edilebilir.
input→ prompt Dize türünde metin istemi. Dinamik tensör şeklini kabul etmek için -1'i belirtin.
input→ negative_prompt Dize türünde negatif metin istemi. Dinamik tensör şeklini kabul etmek için -1'i belirtin.
input→ mask_image Dize türündeki Base64 kodlu maske görüntüsü. Dinamik tensör şeklini kabul etmek için -1'i belirtin.
input→ image Dize türünde Base64 kodlu görüntü. Dinamik tensör şeklini kabul etmek için -1'i belirtin.
input→ gen_args JSON, string türünde ek bağımsız değişkenleri kodladı. Dinamik tensör şeklini kabul etmek için -1'i belirtin.
output→ generated_image Dize türünde oluşturulan görüntü. Dinamik tensör şeklini kabul etmek için -1'i belirtin.
instance_group Bir modelin birden çok çalıştırma örneğini her GPU'ya veya yalnızca belirli GPU'lara yerleştirmek için bu ayarı kullanabilirsiniz. belirtiyoruz KIND_GPU mevcut GPU'larda modelin kopyalarını oluşturmak için.
parameters Conda ortam yolunu şu şekilde ayarladık: EXECUTION_ENV_PATH.

Model deposu ve diğer Kararlı Difüzyon modellerinin yapılandırmaları hakkında ayrıntılar için, aşağıdaki koda bakın: GitHub repo. Her dizin, belirli Kararlı Difüzyon modelleri için yapıtlar içerir.

Conda ortamını paketleyin ve SageMaker Triton kapsayıcısını genişletin

SageMaker NVIDIA Triton kapsayıcı görüntüleri aşağıdaki gibi kitaplıklar içermez transformer, accelerate, and diffusers Kararlı Yayılma modellerini dağıtmak ve sunmak için. Ancak Triton, kullanarak ek bağımlılıklar getirmenize izin verir. conda paketi. Şimdi ana hatlarıyla belirtilen gerekli bağımlılıklarla birlikte conda ortamını oluşturarak başlayalım. environment.yml dosyasını açın ve bir tar modeli yapıtı oluşturun sd_env.tar.gz içinde yüklü bağımlılıklarla birlikte conda ortamını içeren dosya. oluşturmak için aşağıdaki YML dosyasını çalıştırın. conda-pack yapıtı seçin ve yapıtı Amazon S3'e yükleneceği yerel dizine kopyalayın. Conda eserlerini MME'deki modellerden biri olarak yükleyeceğimizi ve SageMaker barındırma ML örneğinde conda ortamını ayarlamak için bu modeli çalıştıracağımızı unutmayın.

%%writefile environment.yml
name: mme_env
dependencies: - python=3.8 - pip - pip: - numpy - torch --extra-index-url https://download.pytorch.org/whl/cu118 - accelerate - transformers - diffusers - xformers - conda-pack !conda env create -f environment.yml –force

Model yapılarını Amazon S3'e yükleyin

SageMaker, her bir Triton model deposunu içeren .tar.gz dosyasının çoklu model uç noktasında barındırılmasını bekler. Bu nedenle, Triton model deposundan içerikle bir tar yapısı oluşturuyoruz. Binlerce model yapısını barındırmak için bu S3 kovasını kullanabiliriz ve SageMaker MME, çok sayıda modeli dinamik olarak yüklemek ve sunmak için bu konumdaki modelleri kullanır. Tüm Stabil Difüzyon modellerini bu Amazon S3 konumunda depolarız.

SageMaker MME'yi dağıtın

Bu bölümde, konteyner belirtimini, SageMaker modelini ve uç nokta yapılandırmalarını tanımlayarak SageMaker MME'yi dağıtma adımlarını inceliyoruz.

Servis kapsayıcısını tanımlayın

Kapsayıcı tanımında şunları tanımlayın: ModelDataUrl SageMaker MME'nin tahminleri yüklemek ve sunmak için kullanacağı tüm modelleri içeren S3 dizinini belirtmek için. Ayarlamak Mode için MultiModel SageMaker'ın uç noktayı MME konteyner belirtimleriyle oluşturacağını belirtmek için. Kapsayıcıyı, MME'lerin GPU ile dağıtılmasını destekleyen bir görüntüyle ayarladık. Görmek Desteklenen algoritmalar, çerçeveler ve örnekler daha fazla ayrıntı için.

Aşağıdaki Amazon S3'te üç model yapısını da görüyoruz ModelDataUrl Konumu:

container = {"Image": mme_triton_image_uri, "ModelDataUrl": model_data_url, "Mode": "MultiModel"}

Bir MME nesnesi oluşturun

Modeli oluşturmak için SageMaker Boto3 istemcisini kullanıyoruz. model_oluştur API. Container tanımını, create model API'sine ile birlikte iletiyoruz. ModelName ve ExecutionRoleArn:

create_model_response = sm_client.create_model( ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

MME için yapılandırmaları tanımlayın

kullanarak bir MME konfigürasyonu oluşturun. create_endpoint_config Boto3 API'si. Şurada hızlandırılmış bir GPU bilgi işlem örneği belirtin: InstanceType (SageMaker not defterimizi barındırmak için kullandığımız bulut sunucusu tipinin aynısını kullanıyoruz). Uç noktalarınızı gerçek hayattaki kullanım durumlarıyla en az iki örnekle yapılandırmanızı öneririz. Bu, SageMaker'ın modeller için birden çok Erişilebilirlik Alanında yüksek düzeyde kullanılabilir bir tahmin seti sağlamasına olanak tanır.

create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "InstanceType": instance_type, "InitialVariantWeight": 1, "InitialInstanceCount": 1, "ModelName": sm_model_name, "VariantName": "AllTraffic", } ],
)

Bir MME oluşturun

Yeni bir SageMaker uç noktası oluşturmak için önceki uç nokta yapılandırmasını kullanın ve konuşlandırmanın bitmesini bekleyin:

create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)

Durum şu şekilde değişecektir: InService dağıtım başarılı olduğunda.

Kararlı Difüzyon modellerinin farklı sürümlerini kullanarak görüntüler oluşturun

Temel modeli bir bilgi istemi ile çağırarak ve oluşturulan görüntüyü alarak başlayalım. Girdileri ile temel modele aktarıyoruz prompt, negative_prompt, and gen_args sözlük olarak. Sözlükteki her girdi öğesinin veri tipini ve şeklini ayarlayıp modele girdi olarak iletiyoruz.

inputs = dict(prompt = "Infinity pool on top of a high rise overlooking Central Park", negative_prompt = "blur,low detail, low quality", gen_args = json.dumps(dict(num_inference_steps=50, guidance_scale=8))
)
payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
}
response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_base.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
decode_image(output[0]["data"][0])

Komut istemi: Yüksek bir binanın tepesindeki sonsuzluk havuzu Central Park'a bakan

Bu görüntüyle çalışarak, onu çok yönlü Kararlı Difüzyon derinlik modeliyle değiştirebiliriz. Örneğin, orijinal görüntüyü görmek istediğimiz değişiklikleri açıklayan bir istemle birlikte ileterek görüntünün stilini bir yağlı boya tabloya değiştirebilir veya Central Park'tan Yellowstone Ulusal Parkı'na değiştirebiliriz.

Derinlik modelini belirterek çağırıyoruz sd_depth.tar.gz içinde TargetModel arasında invoke_endpoint fonksiyon çağrısı Çıktılarda, orijinal görüntünün yönünün nasıl korunduğuna dikkat edin, ancak bir örnek için, NYC binaları aynı şekle sahip kaya oluşumlarına dönüştürülmüştür.

inputs = dict(prompt = "highly detailed oil painting of an inifinity pool overlooking central park", image=image, gen_args = json.dumps(dict(num_inference_steps=50, strength=0.9)) )
payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
}
response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_depth.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
print("original image")
display(original_image)
print("generated image")
display(decode_image(output[0]["data"][0]))

Orijinal görüntü Yağlı boya Yellowstone Parkı

Bir başka kullanışlı model de, görüntünün belirli kısımlarını kaldırmak için kullanabileceğimiz Stable Difusion iç boyamadır. Diyelim ki aşağıdaki örnek görseldeki ağacı kaldırmak istiyorsunuz. Bunu inpaint modelini çağırarak yapabiliriz. sd_inpaint.tar.gz. Ağacı kaldırmak için bir mask_image, görüntünün hangi bölgelerinin tutulması ve hangilerinin doldurulması gerektiğini belirtir. Maske görüntüsünün siyah piksel kısmı değişmeden kalması gereken bölgeleri, beyaz pikseller ise değiştirilmesi gereken bölgeleri gösterir.

image = encode_image(original_image).decode("utf8")
mask_image = encode_image(Image.open("sample_images/bertrand-gabioud-mask.png")).decode("utf8")
inputs = dict(prompt = "building, facade, paint, windows", image=image, mask_image=mask_image, negative_prompt = "tree, obstruction, sky, clouds", gen_args = json.dumps(dict(num_inference_steps=50, guidance_scale=10)) )
payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
}
response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_inpaint.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
decode_image(output[0]["data"][0])

Orijinal görüntü Maske resmi Resmi boya

Son örneğimizde, daha önce 512 x 512 çözünürlüğünden oluşturulan orijinal görüntünün boyutunu 128 x 128'e indiriyoruz. görüntü, ilk görüntüyü oluşturmak için kullandığımız gibi. Gerekli olmamakla birlikte, görüntüyü açıklayan bir bilgi istemi sağlamak, yükseltme sürecini yönlendirmeye yardımcı olur ve daha iyi sonuçlara yol açmalıdır.

low_res_image = output_image.resize((128, 128))
inputs = dict(prompt = "Infinity pool on top of a high rise overlooking Central Park", image=encode_image(low_res_image).decode("utf8")
) payload = { "inputs": [{"name": name, "shape": [1,1], "datatype": "BYTES", "data": [data]} for name, data in inputs.items()]
} response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload), TargetModel="sd_upscale.tar.gz", )
output = json.loads(response["Body"].read().decode("utf8"))["outputs"]
upscaled_image = decode_image(output[0]["data"][0])

Düşük çözünürlüklü görüntü Yükseltilmiş görüntü

Büyütülmüş görüntü, orijinal kadar ayrıntılı olmasa da, düşük çözünürlüklü olana göre belirgin bir gelişmedir.

Bellek ve hız için optimize edin

The xformers kitaplığı, görüntü oluşturmayı hızlandırmanın bir yoludur. Bu optimizasyon yalnızca NVIDIA GPU'lar için kullanılabilir. Görüntü oluşturmayı hızlandırır ve VRAM kullanımını azaltır. biz kullandık xformers bellek verimli dikkat ve hız için kitaplık. Ne zaman enable_xformers_memory_efficient_attention seçeneği etkinleştirildiğinde, daha düşük GPU bellek kullanımı ve çıkarım zamanında potansiyel bir hızlanma gözlemlemelisiniz.

Temizlemek

Gereksiz masraflardan kaçınmak için bu blogun kaynak sağlanan bölümünü silmek için not defterinin temizleme bölümündeki talimatları izleyin. Bahsetmek Amazon SageMaker Fiyatlandırması ayrıntılar için çıkarım örneklerinin maliyeti.

Sonuç

Bu yazıda, Stable Diffusion modellerini ve SageMaker çoklu model uç noktalarını kullanarak Stable Diffusion modellerinin farklı sürümlerini uygun maliyetli bir şekilde nasıl dağıtabileceğinizi tartıştık. Bir içerik oluşturucu görüntü oluşturma ve düzenleme aracı oluşturmak için bu yaklaşımı kullanabilirsiniz. içindeki kod örneklerine göz atın. GitHub repo başlamak ve oluşturduğunuz harika üretken yapay zeka aracı hakkında bize bilgi vermek için.


Yazarlar Hakkında

Simon Zamarin ana odak noktası müşterilerin veri varlıklarından değer elde etmelerine yardımcı olan bir AI / ML Çözümleri Mimarıdır. Simon boş zamanlarında aileyle vakit geçirmekten, bilim kurgu okumaktan ve çeşitli DIY ev projeleri üzerinde çalışmaktan hoşlanıyor.

vikram elango Virginia, ABD merkezli AWS'de Kıdemli Yapay Zeka/ML Çözümleri Mimarıdır. Şu anda üretken yapay zeka, LLM'ler, hızlı mühendislik, büyük model çıkarım optimizasyonu ve işletmeler genelinde makine öğrenimini ölçeklendirmeye odaklanmıştır. Vikram, finans ve sigorta sektörü müşterilerine, ML uygulamalarını uygun ölçekte oluşturmak ve dağıtmak için tasarım ve mimari konusunda yardımcı olur. Boş zamanlarında ailesiyle birlikte seyahat etmeyi, yürüyüş yapmayı, yemek yapmayı ve kamp yapmayı seviyor.

Joao Moura İspanya merkezli AWS'de Yapay Zeka/ML Çözümleri Uzmanı Mimardır. Müşterilere derin öğrenme modeli eğitimi ve çıkarım optimizasyonu ve AWS'de daha geniş kapsamlı büyük ölçekli makine öğrenimi platformları oluşturma konusunda yardımcı olur. Ayrıca makine öğrenimi konusunda uzmanlaşmış donanım ve düşük kodlu makine öğrenimi çözümlerinin aktif bir savunucusudur.

Saurabh Trikande Amazon SageMaker Inference için Kıdemli Ürün Yöneticisidir. Müşterilerle çalışma konusunda tutkulu ve makine öğrenimini demokratikleştirme hedefiyle motive oluyor. Karmaşık makine öğrenimi uygulamaları, çok kiracılı makine öğrenimi modelleri, maliyet optimizasyonları ve derin öğrenme modellerinin dağıtımını daha erişilebilir hale getirmeyle ilgili temel zorluklara odaklanıyor. Saurabh boş zamanlarında yürüyüş yapmaktan, yenilikçi teknolojiler hakkında bilgi edinmekten, TechCrunch'ı takip etmekten ve ailesiyle vakit geçirmekten hoşlanıyor.

spot_img

En Son İstihbarat

spot_img