제퍼넷 로고

Stable Diffusion 모델로 고품질 이미지를 생성하고 Amazon SageMaker로 비용 효율적으로 배포 | 아마존 웹 서비스

시간

Text-to-image 생성은 ML(기계 학습) 모델이 텍스트 설명에서 이미지를 생성하는 작업입니다. 목표는 설명과 거의 일치하는 이미지를 생성하여 텍스트의 세부 사항과 뉘앙스를 캡처하는 것입니다. 이 작업은 모델이 텍스트의 의미와 구문을 이해하고 사실적인 이미지를 생성해야 하기 때문에 까다롭습니다. AI 사진, 컨셉 아트, 건물 건축, 패션, 비디오 게임, 그래픽 디자인 등에서 텍스트를 이미지로 생성하는 실용적인 응용 프로그램이 많이 있습니다.

안정적인 확산 몇 초 안에 고품질 이미지를 만들 수 있는 텍스트-이미지 모델입니다. 이러한 유형의 모델과의 실시간 상호작용이 목표인 경우 원활한 사용자 경험을 보장하는 것은 GPU 또는 AWS 인퍼렌시아2, Amazon의 자체 ML 추론 가속기. GPU 사용과 관련된 막대한 비용은 일반적으로 기본 컴퓨팅의 활용도를 최적화해야 하며, 다른 아키텍처 또는 개인화된(미세 조정된) 모델을 배포해야 하는 경우에는 더욱 그렇습니다. 아마존 세이지 메이커 다중 모델 끝점 (MME)는 수천 개의 모델을 하나의 끝점으로 확장하도록 지원하여 이 문제를 해결하는 데 도움을 줍니다. 공유 서빙 컨테이너를 사용하면 동일한 엔드포인트 및 동일한 GPU 내에서 비용 효율적이고 확장 가능한 방식으로 여러 모델을 호스팅할 수 있습니다.

이 게시물에서는 Stable Diffusion 모델 아키텍처, 다양한 유형의 Stable Diffusion 모델 및 이미지 품질을 향상시키는 기술에 대해 알아봅니다. 또한 SageMaker MME 및 NVIDIA Triton Inference Server를 사용하여 Stable Diffusion 모델을 비용 효율적으로 배포하는 방법을 보여줍니다.

프롬프트: 귀여운 베르네제의 초상화, elke Vogelsang의 예술, 8k 초현실적, artstation에서 유행, 4k 프롬프트: 거실의 건축 설계, 8k 초현실적, 4k, 초현실적, 집중적, 극도의 디테일 프롬프트: 밤의 뉴욕 스카이라인, 8k, 롱샷 사진, 언리얼 엔진 5, ​​시네마틱, 걸작

안정적인 확산 아키텍처

Stable Diffusion은 단순히 텍스트 프롬프트를 제공하여 다양한 스타일과 콘텐츠의 이미지를 만드는 데 사용할 수 있는 텍스트 대 이미지 오픈 소스 모델입니다. 텍스트-이미지 생성의 맥락에서 확산 모델은 텍스트 설명에서 고품질 이미지를 생성하는 데 사용할 수 있는 생성 모델입니다. 확산 모델은 입력 및 출력 양식 텍스트와 이미지 사이의 복잡한 종속성을 캡처할 수 있는 일종의 생성 모델입니다.

다음 다이어그램은 안정적인 확산 모델의 상위 수준 아키텍처를 보여줍니다.

다음과 같은 핵심 요소로 구성됩니다.

  • 텍스트 인코더 – CLIP은 입력 프롬프트 텍스트를 받아 텍스트의 각 단어를 나타내는 토큰 임베딩으로 변환하는 변환기 기반 텍스트 인코더 모델입니다. CLIP은 이미지 인코더와 텍스트 인코더의 조합인 이미지 및 해당 캡션의 데이터 세트에 대해 학습됩니다.
  • 유넷 – U-Net 모델은 노이즈가 많은 입력 배열과 함께 CLIP에서 토큰 임베딩을 가져와 노이즈가 제거된 출력을 생성합니다. 이것은 각 단계가 입력 잠재 텐서를 처리하고 입력 텍스트를 더 잘 나타내는 새로운 잠재 공간 텐서를 생성하는 일련의 반복 단계를 통해 발생합니다.
  • 자동 인코더-디코더 – 이 모델은 최종 이미지를 생성합니다. U-Net 모델에서 노이즈가 제거된 최종 잠재 출력을 가져와 텍스트 입력을 나타내는 이미지로 변환합니다.

안정적인 확산 모델의 유형

이 게시물에서는 Hugging Face 모델 허브에서 Stability AI로 사전 훈련된 다음과 같은 Stable Diffusion 모델을 살펴봅니다.

안정-확산-2-1-베이스

이 모델을 사용하여 텍스트 프롬프트를 기반으로 이미지를 생성합니다. 학습된 모델의 기본 버전입니다. 라이온-5B. 모델은 대규모 데이터 세트의 하위 집합에서 훈련되었습니다. 라이온-5B, 그리고 주로 영어 자막이 있습니다. 우리는 사용 StableDiffusionPipeline 인사말 diffusers 텍스트 프롬프트에서 이미지를 생성하는 라이브러리. 이 모델은 512 x 512 크기의 이미지를 생성할 수 있습니다. 다음 매개변수를 사용합니다.

  • 신속한 – 프롬프트는 텍스트 단어, 구, 문장 또는 단락일 수 있습니다.
  • 네거티브_프롬프트 – 이미지 생성 프로세스에서 지정된 요소를 제외하고 생성된 이미지의 품질을 향상시키기 위해 부정적인 프롬프트를 전달할 수도 있습니다.
  • 가이던스_스케일 – 안내 척도가 높을수록 이미지 품질이 저하되는 대신 프롬프트와 더 밀접하게 관련된 이미지가 생성됩니다. 지정된 경우 부동 소수점이어야 합니다.

안정-확산-2-깊이

이 모델은 원본 이미지에서 개체의 모양과 깊이를 유지하면서 기존 이미지에서 새 이미지를 생성하는 데 사용됩니다. 이것 stable-diffusion-2-depth model 에서 미세 조정됩니다. 안정-확산-2-베이스, (상대적) 깊이 예측을 처리하기 위한 추가 입력 채널. 우리는 사용 StableDiffusionDepth2ImgPipeline 인사말 diffusers 파이프라인을 로드하고 깊이 이미지를 생성하는 라이브러리. 다음은 깊이 모델에 특정한 추가 매개변수입니다.

  • 영상 – 새 이미지 생성을 조건으로 하는 초기 이미지.
  • num_inference_steps (선택 사항) – 노이즈 제거 단계의 수. 노이즈 제거 단계가 많을수록 일반적으로 추론 속도가 느려지는 대신 이미지 품질이 높아집니다. 이 매개변수는 strength.
  • 강도(선택 사항) – 개념적으로 이것은 참조 이미지를 얼마나 변환해야 하는지를 나타냅니다. 값은 0-1 사이여야 합니다. image 강도가 클수록 더 많은 노이즈를 추가하는 시작점으로 사용됩니다. 잡음 제거 단계의 수는 처음에 추가된 잡음의 양에 따라 다릅니다. 언제 strength 가 1이면 추가된 노이즈가 최대가 되고 노이즈 제거 프로세스가 다음에 지정된 전체 반복 횟수 동안 실행됩니다. num_inference_steps. 따라서 값 1은 본질적으로 무시합니다. image. 자세한 내용은 다음을 참조하십시오. 암호.

안정-확산-2-인페인팅

AI 이미지 복원 사용 사례에 이 모델을 사용할 수 있습니다. 프롬프트와 추가 인수에서 새로운 디자인과 이미지를 만드는 데 사용할 수도 있습니다. 이 모델도 기본 모델에서 파생되었으며 마스크 생성 전략이 있습니다. 변경할 세그먼트와 변경하지 않은 세그먼트를 나타내는 원본 이미지의 마스크를 지정합니다. 우리는 사용 StableDiffusionUpscalePipeline 인사말 diffusers 원본 이미지에 inpaint 변경 사항을 적용하는 라이브러리입니다. 다음 추가 매개변수는 깊이 모델에 따라 다릅니다.

  • 마스크_입력 – 이미지 생성 시 검게 칠해진 부분이 그대로 유지되고 흰색 부분이 교체된 이미지

안정적인 확산 x4-업스케일러

이 모델은 또한 기본 모델에서 파생되었으며 10 x 2048 이미지를 포함하는 LAION의 2048M 하위 집합에서 추가로 훈련되었습니다. 이름에서 알 수 있듯이 저해상도 이미지를 고해상도로 업스케일링하는 데 사용할 수 있습니다.

사용 사례 개요

이 게시물에서는 텍스트에서 새로운 이미지 생성, 기존 이미지의 스타일 변경, 이미지에서 원치 않는 개체 제거, 저해상도 이미지를 고해상도로 업스케일링 등 여러 기능을 갖춘 AI 이미지 서비스를 배포합니다. Stable Diffusion 모델의 여러 변형을 사용하여 단일 SageMaker 엔드포인트 내에서 이러한 모든 사용 사례를 처리할 수 있습니다. 즉, 성능이 뛰어나고 확장 가능하며 비용 효율적인 방식으로 많은 수의 모델을 호스팅해야 합니다. 이 게시물에서는 SageMaker MME 및 NVIDIA Triton Inference Server를 사용하여 여러 Stable Diffusion 모델을 비용 효율적으로 배포하는 방법을 보여줍니다. 구현 세부 정보, 최적화 기술 및 텍스트-이미지 모델 작업을 위한 모범 사례에 대해 배웁니다.

다음 표에는 SageMaker MME에 배포하는 안정적인 확산 모델이 요약되어 있습니다.

모델 이름 모델 크기(GB)
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

솔루션 개요

다음 단계는 Stable Diffusion 모델을 SageMaker MME에 배포하는 것과 관련됩니다.

  1. Hugging Face 허브를 사용하여 Stable Diffusion 모델을 로컬 디렉터리에 다운로드합니다. 이것은 다운로드됩니다 scheduler, text_encoder, tokenizer, unet, and vae 각 Stable Diffusion 모델에 대해 해당 로컬 디렉토리로 이동합니다. 우리는 revision="fp16" 모델 버전.
  2. NVIDIA Triton 모델 리포지토리, 모델 구성 및 모델 제공 로직 설정 model.py. Triton은 이러한 아티팩트를 사용하여 예측을 제공합니다.
  3. 추가 종속성과 SageMaker MME에 배포할 패키지 모델 리포지토리로 conda 환경을 패키징합니다.
  4. 모델 아티팩트를 NVIDIA Triton 관련 형식으로 패키징하고 업로드합니다. model.tar.gz아마존 단순 스토리지 서비스 (아마존 S3). 모델은 이미지 생성에 사용됩니다.
  5. SageMaker 모델, 엔드포인트 구성을 구성하고 SageMaker MME를 배포합니다.
  6. 추론을 실행하고 프롬프트를 SageMaker 엔드포인트로 전송하여 Stable Diffusion 모델을 사용하여 이미지를 생성합니다. 우리는 TargetModel 다양한 Stable Diffusion 모델을 호출하여 결과를 시각적으로 비교합니다.

우리는 이 솔루션 아키텍처를 구현하기 위한 코드를 GitHub 레포. 시작하려면 README 지침을 따르십시오.

NVIDIA Triton Inference Server Python 백엔드로 모델 제공

우리는 Triton Python 백엔드를 사용하여 Stable Diffusion 파이프라인 모델을 SageMaker MME에 배포합니다. Python 백엔드를 사용하면 Triton Inference Server에서 Python으로 작성된 모델을 제공할 수 있습니다. Python 백엔드를 사용하려면 Python 파일을 만들어야 합니다. model.py 다음과 같은 구조를 가지고 있습니다: 모든 Python 백엔드는 TritonPythonModel 수업:

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):

모든 Python 백엔드는 다음에서 네 가지 주요 기능을 구현할 수 있습니다. TritonPythonModel 수업: auto_complete_config, initialize, executefinalize.

initialize 모델이 로드될 때 호출됩니다. 구현 initialize 선택 사항입니다. initialize 추론을 실행하기 전에 필요한 초기화를 수행할 수 있습니다. 에서 initialize 함수를 사용하여 파이프라인을 생성하고 다음을 사용하여 파이프라인을 로드합니다. from_pretrained 검문소. 파이프라인 스케줄러 구성에서 스케줄러를 구성합니다. pipe.scheduler.config. 마지막으로 지정합니다. xformers 활성화하기 위한 최적화 xformer 메모리 효율적인 매개변수 enable_xformers_memory_efficient_attention. 우리는에 대한 자세한 내용을 제공합니다 xformers 이 게시물의 뒷부분에서. 각 모델의 model.py를 참조하여 다양한 파이프라인 세부 정보를 이해할 수 있습니다. 이 파일은 모델 리포지토리에서 찾을 수 있습니다.

XNUMXD덴탈의 execute 함수는 추론 요청이 있을 때마다 호출됩니다. 모든 Python 모델은 다음을 구현해야 합니다. execute 함수. 에서 execute 함수의 목록이 제공됩니다. InferenceRequest 사물. 입력 텍스트 프롬프트를 파이프라인에 전달하여 모델에서 이미지를 가져옵니다. 이미지가 디코딩되고 생성된 이미지가 이 함수 호출에서 반환됩니다.

모델 구성에 정의된 이름에서 입력 텐서를 얻습니다. config.pbtxt 파일. 추론 요청에서 우리는 prompt, negative_promptgen_args, 그리고 그들을 디코딩합니다. 모델 파이프라인 개체에 모든 인수를 전달합니다. 이미지를 인코딩하여 생성된 이미지 예측을 반환합니다. 다음을 참조할 수 있습니다. config.pbtxt 서로 다른 파이프라인 세부 정보를 이해하기 위해 각 모델의 파일을 참조하십시오. 이 파일은 모델 리포지토리에서 찾을 수 있습니다. 마지막으로 생성된 이미지를 InferenceResponse 응답을 반환합니다.

구현 finalize 선택적입니다. 이 기능을 사용하면 모델이 Triton Inference Server에서 언로드되기 전에 필요한 정리 작업을 수행할 수 있습니다.

Python 백엔드로 작업할 때 입력이 배치 방식으로 처리되고 그에 따라 응답이 다시 전송되는지 확인하는 것은 사용자의 책임입니다. 이를 달성하려면 다음 단계를 따르는 것이 좋습니다.

  1. 모든 요청을 반복합니다. requests 를 형성하는 객체 batched_input.
  2. 다음에 대한 추론 실행 batched_input.
  3. 결과를 여러 개로 나누기 InferenceResponse 개체를 응답으로 연결합니다.

자세한 내용은 Triton Python 백엔드 문서 or Triton을 사용하여 Amazon SageMaker에서 ML 모델 호스팅: Python 백엔드 자세한 내용은.

NVIDIA Triton 모델 저장소 및 구성

모델 리포지토리에는 모델 제공 스크립트, 모델 아티팩트 및 토크나이저 아티팩트, 패키지화된 conda 환경(추론에 필요한 종속성 포함), Triton 구성 파일 및 추론에 사용되는 Python 스크립트가 포함되어 있습니다. 후자는 Python 백엔드를 사용할 때 필수이며 Python 파일을 사용해야 합니다. model.py. inpaint Stable Diffusion 모델의 구성 파일을 살펴보고 지정된 다양한 옵션을 이해해 보겠습니다.

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" }
}

다음 표에서는 다양한 매개변수와 값을 설명합니다.

세부 정보
name 모델 구성 이름 속성을 포함할 필요는 없습니다. 구성에서 모델 이름을 지정하지 않은 경우 모델이 저장된 모델 리포지토리 디렉터리의 이름과 동일한 것으로 간주됩니다. 그러나 이름이 제공된 경우 모델이 저장된 모델 리포지토리 디렉터리의 이름과 일치해야 합니다. sd_inpaint 구성 속성 이름입니다.
backend 이것은 모델 예측을 제공하는 Triton 프레임워크를 지정합니다. 필수 매개변수입니다. 우리는 지정 python, Stable Diffusion 모델을 호스팅하기 위해 Triton Python 백엔드를 사용할 것이기 때문입니다.
max_batch_size 이것은 모델이 다음에 대해 지원하는 최대 배치 크기를 나타냅니다. 일괄 처리 유형 Triton에 의해 악용될 수 있습니다.
input→ prompt 문자열 유형의 텍스트 프롬프트. 동적 텐서 모양을 허용하려면 -1을 지정하십시오.
input→ negative_prompt 문자열 유형의 부정 텍스트 프롬프트. 동적 텐서 모양을 허용하려면 -1을 지정하십시오.
input→ mask_image 문자열 유형의 Base64로 인코딩된 마스크 이미지입니다. 동적 텐서 모양을 허용하려면 -1을 지정하십시오.
input→ image 문자열 유형의 Base64 인코딩 이미지입니다. 동적 텐서 모양을 허용하려면 -1을 지정하십시오.
input→ gen_args 문자열 유형의 JSON 인코딩 추가 인수. 동적 텐서 모양을 허용하려면 -1을 지정하십시오.
output→ generated_image 유형 문자열의 생성된 이미지입니다. 동적 텐서 모양을 허용하려면 -1을 지정하십시오.
instance_group 이 설정을 사용하여 모든 GPU 또는 특정 GPU에만 모델의 여러 실행 인스턴스를 배치할 수 있습니다. 우리는 지정 KIND_GPU 사용 가능한 GPU에서 모델의 복사본을 만듭니다.
parameters conda 환경 경로를 다음으로 설정했습니다. EXECUTION_ENV_PATH.

다른 Stable Diffusion 모델의 모델 리포지토리 및 구성에 대한 자세한 내용은 GitHub 레포. 각 디렉토리에는 특정 Stable Diffusion 모델에 대한 아티팩트가 포함되어 있습니다.

conda 환경 패키징 및 SageMaker Triton 컨테이너 확장

SageMaker NVIDIA Triton 컨테이너 이미지에는 다음과 같은 라이브러리가 포함되어 있지 않습니다. transformer, accelerate, and diffusers 안정적인 확산 모델을 배포하고 제공합니다. 그러나 Triton을 사용하면 다음을 사용하여 추가 종속성을 가져올 수 있습니다. 콘다 팩. 에 설명된 필수 종속성을 사용하여 conda 환경을 만드는 것으로 시작하겠습니다. environment.yml 파일을 만들고 tar 모델 아티팩트를 만듭니다. sd_env.tar.gz 종속성이 설치된 conda 환경을 포함하는 파일입니다. 다음 YML 파일을 실행하여 conda-pack Amazon S3에 업로드될 로컬 디렉터리에 아티팩트를 복사합니다. MME의 모델 중 하나로 conda 아티팩트를 업로드하고 이 모델을 호출하여 SageMaker 호스팅 ML 인스턴스에서 conda 환경을 설정합니다.

%%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

Amazon S3에 모델 아티팩트 업로드

SageMaker는 각 Triton 모델 리포지토리가 포함된 .tar.gz 파일이 다중 모델 엔드포인트에서 호스팅될 것으로 예상합니다. 따라서 Triton 모델 리포지토리의 콘텐츠로 tar 아티팩트를 생성합니다. 이 S3 버킷을 사용하여 수천 개의 모델 아티팩트를 호스팅할 수 있으며 SageMaker MME는 이 위치의 모델을 사용하여 많은 수의 모델을 동적으로 로드하고 제공합니다. 모든 Stable Diffusion 모델을 이 Amazon S3 위치에 저장합니다.

SageMaker MME 배포

이 섹션에서는 컨테이너 사양, SageMaker 모델 및 엔드포인트 구성을 정의하여 SageMaker MME를 배포하는 단계를 안내합니다.

서빙 컨테이너 정의

컨테이너 정의에서 다음을 정의합니다. ModelDataUrl SageMaker MME가 예측을 로드하고 제공하는 데 사용할 모든 모델이 포함된 S3 디렉터리를 지정합니다. 세트 ModeMultiModel SageMaker가 MME 컨테이너 사양으로 엔드포인트를 생성함을 나타냅니다. GPU로 MME 배포를 지원하는 이미지로 컨테이너를 설정합니다. 보다 지원되는 알고리즘, 프레임워크 및 인스턴스 자세한 내용은.

다음 Amazon S3에서 세 가지 모델 아티팩트를 모두 볼 수 있습니다. ModelDataUrl 위치 :

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

MME 객체 생성

SageMaker Boto3 클라이언트를 사용하여 다음을 사용하여 모델을 생성합니다. create_model API. 컨테이너 정의를 모델 API 생성에 전달합니다. ModelNameExecutionRoleArn:

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

MME에 대한 구성 정의

다음을 사용하여 MME 구성을 만듭니다. create_endpoint_config 보토3 API. 가속 GPU 컴퓨팅 인스턴스 지정 InstanceType (SageMaker 노트북을 호스팅하는 데 사용하는 것과 동일한 인스턴스 유형을 사용합니다). 실제 사용 사례가 포함된 최소 XNUMX개의 인스턴스로 엔드포인트를 구성하는 것이 좋습니다. 이를 통해 SageMaker는 모델의 여러 가용 영역에서 고가용성 예측 세트를 제공할 수 있습니다.

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", } ],
)

MME 만들기

앞의 엔드포인트 구성을 사용하여 새 SageMaker 엔드포인트를 생성하고 배포가 완료될 때까지 기다립니다.

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

상태가 다음으로 변경됩니다. InService 배포가 성공했을 때.

다양한 버전의 Stable Diffusion 모델을 사용하여 이미지 생성

프롬프트로 기본 모델을 호출하고 생성된 이미지를 가져오는 것으로 시작하겠습니다. 다음을 사용하여 입력을 기본 모델에 전달합니다. prompt, negative_prompt, and gen_args 사전으로. 각 입력 항목의 데이터 유형과 모양을 사전에 설정하고 모델에 대한 입력으로 전달합니다.

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])

프롬프트: 고층 인피니티 풀 센트럴파크가 내려다보이는

이 이미지로 작업하면서 다재다능한 Stable Diffusion 깊이 모델로 수정할 수 있습니다. 예를 들어 원본 이미지를 보고 싶은 변경 사항을 설명하는 프롬프트와 함께 전달하여 이미지 스타일을 유화로 변경하거나 설정을 Central Park에서 Yellowstone National Park로 변경할 수 있습니다.

다음을 지정하여 깊이 모델을 호출합니다. sd_depth.tar.gz FBI 증오 범죄 보고서 TargetModelinvoke_endpoint 함수 호출. 출력에서 원본 이미지의 방향이 어떻게 유지되는지 확인하십시오. 하지만 한 예로 NYC 건물이 동일한 모양의 암석으로 변형되었습니다.

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]))

원본 이미지 오일 페인팅 옐로스톤 공원

또 다른 유용한 모델은 이미지의 특정 부분을 제거하는 데 사용할 수 있는 Stable Diffusion 인페인팅입니다. 다음 예제 이미지에서 트리를 제거한다고 가정해 보겠습니다. inpaint 모델을 호출하여 그렇게 할 수 있습니다. sd_inpaint.tar.gz. 트리를 제거하려면 다음을 전달해야 합니다. mask_image, 이미지의 어느 영역을 유지해야 하고 어떤 영역을 채워야 하는지 나타냅니다. 마스크 이미지의 검은색 픽셀 부분은 변경되지 않은 상태로 유지되어야 하는 영역을 나타내고 흰색 픽셀은 대체해야 하는 영역을 나타냅니다.

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])

원본 이미지 마스크 이미지 인페인트 이미지

마지막 예에서는 이전에 생성된 원본 이미지의 크기를 512 x 512 해상도에서 128 x 128로 축소합니다. 그런 다음 Stable Diffusion 업스케일러 모델을 호출하여 이미지를 다시 512 x 512로 업스케일링합니다. 동일한 프롬프트를 사용하여 업스케일링합니다. 이미지는 초기 이미지를 생성하는 데 사용한 이미지입니다. 필수는 아니지만 이미지를 설명하는 프롬프트를 제공하면 업스케일링 프로세스를 안내하는 데 도움이 되며 더 나은 결과를 얻을 수 있습니다.

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])

저해상도 이미지 확대된 이미지

확대된 이미지는 원본만큼 상세하지는 않지만 저해상도 이미지에 비해 눈에 띄게 개선되었습니다.

메모리 및 속도 최적화

XNUMXD덴탈의 xformers 라이브러리는 이미지 생성 속도를 높이는 방법입니다. 이 최적화는 NVIDIA GPU에서만 사용할 수 있습니다. 이미지 생성 속도를 높이고 VRAM 사용량을 낮춥니다. 우리는 xformers 메모리 효율적인 관심과 속도를 위한 라이브러리. 때 enable_xformers_memory_efficient_attention 옵션이 활성화되면 GPU 메모리 사용량이 낮아지고 추론 시 속도가 빨라지는 것을 관찰해야 합니다.

정리

노트북의 정리 섹션에 있는 지침에 따라 이 블로그의 프로비저닝된 리소스 부분을 삭제하여 불필요한 비용 청구를 방지하십시오. 나타내다 Amazon SageMaker 요금 자세한 내용은 추론 인스턴스의 비용을 참조하십시오.

결론

이 게시물에서는 Stable Diffusion 모델과 SageMaker 다중 모델 엔드포인트를 사용하여 다양한 버전의 Stable Diffusion 모델을 비용 효율적으로 배포하는 방법에 대해 논의했습니다. 이 접근 방식을 사용하여 제작자 이미지 생성 및 편집 도구를 구축할 수 있습니다. 에서 코드 샘플을 확인하십시오. GitHub 레포 시작하고 귀하가 구축한 멋진 생성 AI 도구에 대해 알려주십시오.


저자에 관하여

사이먼 자 마린 고객이 데이터 자산에서 가치를 추출하도록 돕는 데 주력하는 AI / ML 솔루션 설계자입니다. 여가 시간에 Simon은 가족과 함께 시간을 보내고, SF를 읽고, 다양한 DIY 하우스 프로젝트 작업을 즐깁니다.

비크람 엘랑고 미국 버지니아에 본사를 둔 AWS의 수석 AI/ML 전문가 솔루션 아키텍트입니다. 그는 현재 생성 AI, LLM, 신속한 엔지니어링, 대규모 모델 추론 최적화 및 엔터프라이즈 전반의 ML 확장에 주력하고 있습니다. Vikram은 설계 및 아키텍처를 통해 금융 및 보험 업계 고객이 ML 애플리케이션을 대규모로 구축하고 배포할 수 있도록 지원합니다. 여가 시간에는 가족과 함께 여행, 하이킹, 요리, 캠핑을 즐깁니다.

주앙 모 우라 스페인에 본사를 둔 AWS의 AI/ML 전문 솔루션 아키텍트입니다. 그는 심층 학습 모델 교육 및 추론 최적화를 통해 고객을 돕고 AWS에서 대규모 ML 플랫폼을 보다 광범위하게 구축하도록 돕습니다. 그는 또한 ML 전문 하드웨어 및 로우 코드 ML 솔루션의 적극적인 지지자이기도 합니다.

사우라브 트리칸데 Amazon SageMaker Inference의 수석 제품 관리자입니다. 그는 고객과 함께 일하는 데 열정적이며 기계 학습의 민주화라는 목표에 동기를 부여합니다. 그는 복잡한 ML 애플리케이션, 다중 테넌트 ML 모델 배포, 비용 최적화 및 딥 러닝 모델 배포의 접근성 향상과 관련된 핵심 과제에 중점을 둡니다. 여가 시간에 Saurabh는 하이킹, 혁신적인 기술 학습, TechCrunch 팔로우, 가족과 함께 시간 보내기를 즐깁니다.

spot_img

최신 인텔리전스

spot_img