기계 학습 (ML) 패러다임 교대의 씨앗은 수십 년 동안 존재 해 왔지만, 사실상 무한한 컴퓨팅 용량의 준비가 가능하고, 데이터의 대규모 확산 및 ML 기술의 빠른 발전으로, 산업 전반의 고객은 ML 기술을 빠르게 채택하고 사용하여 비즈니스를 변화시키고 있습니다.
최근에 생성 AI 응용 프로그램은 모든 사람의 관심과 상상력을 사로 잡았습니다. 우리는 ML의 광범위한 채택에서 흥미 진진한 변곡점에 있으며, 모든 고객 경험과 응용 프로그램이 생성 AI로 재창조 될 것이라고 생각합니다.
생성 AI는 대화, 스토리, 이미지, 비디오 및 음악을 포함하여 새로운 컨텐츠와 아이디어를 만들 수있는 AI 유형입니다. 모든 AI와 마찬가지로 생성 AI는 ML 모델로 구동됩니다. 대규모 데이터는 광범위한 데이터에 미리 훈련되고 일반적으로 기초 모델 (FMS)이라고합니다.
FMS의 규모와 범용 특성은 전통적인 ML 모델과 다르게 만듭니다.이 모델은 일반적으로 감정을위한 텍스트 분석, 이미지 분류 및 예측 추세와 같은 특정 작업을 수행합니다.

전통 ML 모델을 사용하면 각 특정 작업을 달성하려면 라벨이 붙은 데이터를 수집하고 모델을 교육하며 해당 모델을 배포해야합니다. 기초 모델을 사용하면 각 모델에 대한 라벨이 붙은 데이터를 수집하고 여러 모델을 훈련시키는 대신 동일한 사전 훈련 된 FM을 사용하여 다양한 작업을 조정할 수 있습니다. 또한 FMS를 사용자 정의하여 비즈니스와 차별화되는 도메인 별 기능을 수행하여 소량의 데이터 만 사용하고 모델을 처음부터 교육하는 데 필요한 컴퓨팅을 수행 할 수도 있습니다.
생성 AI는 콘텐츠가 생성되고 소비되는 방식에 혁명을 일으켜 많은 산업을 방해 할 가능성이 있습니다. 독창적 인 콘텐츠 제작, 코드 생성, 고객 서비스 향상 및 문서 요약은 생성 AI의 일반적인 사용 사례입니다.
Amazon Sagemaker Jumpstart는 ML을 시작하는 데 도움이되는 광범위한 문제 유형에 미리 훈련 된 오픈 소스 모델을 제공합니다. 배포하기 전에 이러한 모델을 점차 교육하고 조정할 수 있습니다. JumpStart는 또한 일반적인 사용 사례를위한 인프라를 설정하는 솔루션 템플릿과 Amazon Sagemaker와 함께 ML에 대한 실행 가능한 예제 노트북을 제공합니다.
600 개가 넘는 미리 훈련 된 모델을 사용할 수 있고 매일 성장함에 따라 JumpStart를 통해 개발자는 최첨단 ML 기술을 생산 워크 플로우에 빠르고 쉽게 통합 할 수 있습니다. Amazon Sagemaker Studio의 JumpStart 방문 페이지를 통해 미리 훈련 된 모델, 솔루션 템플릿 및 예제에 액세스 할 수 있습니다. Sagemaker Python SDK를 사용하여 JumpStart 모델에 액세스 할 수도 있습니다. 프로그래밍 방식으로 JumpStart 모델을 사용하는 방법에 대한 자세한 내용은 사전 모델이있는 Sagemaker JumpStart 알고리즘 사용을 참조하십시오.
2023 년 4 월 AWS는 AMANON BEDROCK을 공개했는데 AI21 실험실, 인류 및 안정성 AI를 포함한 스타트 업에서 미리 훈련 된 모델을 통해 생성 AI 구동 앱을 구축 할 수있는 방법을 제공했습니다. Amazon Bedrock은 또한 AWS가 교육하는 모델 제품군 인 Titan Foundation Models에 액세스 할 수 있습니다. Amazon Bedrock의 서버리스 경험을 통해 귀하의 요구에 대한 올바른 모델을 쉽게 찾을 수 있고, 빠르게 시작하고, 자체 데이터로 FMS를 개인적으로 개인화하고, 익숙한 AWS 도구 및 기능을 사용하여 응용 프로그램에 쉽게 통합하고 배포 할 수 있습니다 (Sagemaker ML 기능과의 통합 및 Amazon Sagemaker와 같은 Amazon Sagemaker 및 Amazon Sagemaker를 관리하여 Pipelines를 관리합니다.
이 게시물에서는 AWS Cloud Development Kit (AWS CDK)를 사용하여 JumpStart에서 이미지 및 텍스트 생성 AI 모델을 배포하는 방법을 보여줍니다. AWS CDK는 Python과 같은 친숙한 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 정의하는 오픈 소스 소프트웨어 개발 프레임 워크입니다.
우리는 이미지 생성에 대한 안정적인 확산 모델과 NLU (Natural Language Interenory)를위한 FLAN-T5-XL 모델과 JumpStart의 Hugging Face에서 텍스트 생성을 사용합니다.
웹 애플리케이션은 Open-Source Python 라이브러리 인 Streamlit을 기반으로하며 ML 및 데이터 과학을위한 아름답고 맞춤형 웹 앱을 쉽게 만들고 공유 할 수 있습니다. AWS Fargate와 함께 Amazon Elastic Container Service (Amazon ECS)를 사용하여 웹 응용 프로그램을 호스팅하며 응용 프로그램로드 밸런서를 통해 액세스합니다. Fargate는 서버 나 클러스터 또는 가상 머신을 관리하지 않고도 Amazon ECS와 함께 사용할 수있는 기술입니다. 생성 AI 모델 엔드 포인트는 Amazon Elastic Container Registry (Amazon ECR)의 JumpStart 이미지에서 시작됩니다. 모델 데이터는 JumpStart 계정의 Amazon Simple Storage Service (Amazon S3)에 저장됩니다. 웹 애플리케이션은 Amazon API 게이트웨이 및 AWS Lambda 기능을 통해 다음 다이어그램에 표시된 것처럼 모델과 상호 작용합니다.

API Gateway는 웹 응용 프로그램 및 기타 클라이언트에게 표준 편안한 인터페이스를 제공하는 동시에 모델과 인터페이스하는 Lambda 기능을 보호합니다. 이것은 모델을 소비하는 클라이언트 응용 프로그램 코드를 단순화합니다. 이 예제에서 API 게이트웨이 엔드 포인트는 공개적으로 액세스 할 수 있으므로이 아키텍처를 확장하여 다른 API 액세스 컨트롤을 구현하고 다른 응용 프로그램과 통합 할 수 있습니다.
이 게시물에서는 다음 단계를 안내합니다.
이 프로젝트 에서이 게시물의 끝에있는 부록의 코드 개요를 제공합니다.
다음과 같은 전제 조건이 있어야합니다.
이 튜토리얼에서 로컬 컴퓨터에서 인프라를 배포하거나 AWS Cloud9를 배포 워크 스테이션으로 사용할 수 있습니다. AWS Cloud9는 AWS CLI, AWS CDK 및 Docker로 미리로드됩니다. AWS Cloud9를 선택하면 AWS 콘솔에서 환경을 만듭니다.
이 게시물을 완료하는 데 예상되는 비용은 8 시간 동안 실행되는 자원을 떠나고 있다고 가정하면 $ 50입니다. 진행중인 요금을 피하기 위해이 게시물에서 작성한 리소스를 삭제하십시오.
로컬 컴퓨터에 AWS CLI가 아직없는 경우 최신 버전의 AWS CLI를 설치하거나 업데이트하고 AWS CLI를 구성하는 것을 참조하십시오.
다음 노드 패키지 관리자 명령을 사용하여 AWS CDK 툴킷을 전 세계적으로 설치하십시오.
npm install -g aws-cdk-lib@latest
올바른 설치를 확인하고 AWS CDK의 버전 번호를 인쇄하려면 다음 명령을 실행하십시오.
cdk --version
로컬 컴퓨터에 Docker가 설치되어 있는지 확인하십시오. 버전을 확인하려면 다음 명령을 발행하십시오.
docker --version
로컬 컴퓨터에서 다음 명령으로 AWS CDK 응용 프로그램을 복제하십시오.
git clone https://github.com/aws-samples/generative-ai-sagemaker-cdk-demo.git
프로젝트 폴더로 이동하십시오.
cd generative-ai-sagemaker-cdk-demo
응용 프로그램을 배포하기 전에 디렉토리 구조를 검토하겠습니다.
.
├── LICENSE
├── README.md
├── app.py
├── cdk.json
├── code
│ ├── lambda_txt2img
│ │ └── txt2img.py
│ └── lambda_txt2nlu
│ └── txt2nlu.py
├── construct
│ └── sagemaker_endpoint_construct.py
├── images
│ ├── architecture.png
│ ├── ...
├── requirements-dev.txt
├── requirements.txt
├── source.bat
├── stack
│ ├── __init__.py
│ ├── generative_ai_demo_web_stack.py
│ ├── generative_ai_txt2img_sagemaker_stack.py
│ ├── generative_ai_txt2nlu_sagemaker_stack.py
│ └── generative_ai_vpc_network_stack.py
├── tests
│ ├── __init__.py
│ └── ...
└── web-app
├── Dockerfile
├── Home.py
├── configs.py
├── img
│ └── sagemaker.png
├── pages
│ ├── 2_Image_Generation.py
│ └── 3_Text_Generation.py
└── requirements.txt stack 폴더에는 AWS CDK 응용 프로그램의 각 스택에 대한 코드가 포함되어 있습니다. code 폴더에는 Amazon Lambda 기능의 코드가 포함되어 있습니다. 이 저장소에는 폴더 web-app 에 위치한 웹 응용 프로그램도 포함되어 있습니다.
cdk.json 파일은 AWS CDK 툴킷에 응용 프로그램을 실행하는 방법을 알려줍니다.
이 응용 프로그램은 us-east-1 지역에서 테스트되었지만 필요한 서비스 및 추론 인스턴스 유형 ml.g4dn.4xlarge 가있는 모든 지역에서는 App.Py에 지정되어야합니다.
이 프로젝트는 표준 파이썬 프로젝트처럼 설정됩니다. 다음 코드를 사용하여 파이썬 가상 환경을 만듭니다.
python3 -m venv .venv
다음 명령을 사용하여 가상 환경을 활성화하십시오.
source .venv/bin/activate
Windows 플랫폼에있는 경우 다음과 같이 가상 환경을 활성화하십시오.
.venvScriptsactivate.bat
가상 환경이 활성화 된 후 PIP를 최신 버전으로 업그레이드하십시오.
python3 -m pip install --upgrade pip
필요한 종속성 설치 :
pip install -r requirements.txt
AWS CDK 애플리케이션을 배포하기 전에 계정과 배포하는 지역의 공간을 부트 스트랩해야합니다. 기본 영역에 부트 스트랩을 보려면 다음 명령을 발행하십시오.
cdk bootstrap
특정 계정 및 지역에 배포하려면 다음 명령을 발행하십시오.
cdk bootstrap aws://ACCOUNT-NUMBER/REGION
이 설정에 대한 자세한 내용은 AWS CDK를 시작하는 것을 방문하십시오.
AWS CDK 응용 프로그램에는 다음 다이어그램에 표시된대로 여러 스택이 포함되어 있습니다.

다음 명령으로 CDK 응용 프로그램에 스택을 나열 할 수 있습니다.
cdk list다음 출력을 가져와야합니다.
GenerativeAiTxt2imgSagemakerStack
GenerativeAiTxt2nluSagemakerStack
GenerativeAiVpcNetworkStack
GenerativeAiDemoWebStack
기타 유용한 AWS CDK 명령 :
cdk ls 앱에 모든 스택을 나열합니다cdk synth 합성 된 AWS CloudFormation 템플릿을 방출합니다cdk deploy -이 스택을 기본 AWS 계정 및 지역에 배포합니다.cdk diff 배포 된 스택을 현재 상태와 비교cdk docs - AWS CDK 문서를 엽니 다다음 섹션에서는 AWS CDK 응용 프로그램을 배포하는 방법을 보여줍니다.
AWS CDK 응용 프로그램은 워크 스테이션 구성에 따라 기본 영역에 배포됩니다. 특정 지역에서 배포를 강제하려면 AWS_DEFAULT_REGION 환경 변수를 설정하십시오.
이 시점에서 AWS CDK 응용 프로그램을 배포 할 수 있습니다. 먼저 VPC 네트워크 스택을 시작합니다.
cdk deploy GenerativeAiVpcNetworkStack
프롬프트가 있으면 y 입력하여 배포를 진행하십시오. 스택에 프로비저닝되고있는 AWS 리소스 목록이 표시됩니다. 이 단계는 완료하는 데 약 3 분이 걸립니다.
그런 다음 웹 애플리케이션 스택을 시작합니다.
cdk deploy GenerativeAiDemoWebStack
스택을 분석 한 후 AWS CDK는 스택에 리소스 목록을 표시합니다. 배포를 진행하려면 Y를 입력하십시오. 이 단계는 약 5 분이 걸립니다.

나중에 사용할 예정인 WebApplicationServiceURL 을 출력에서 주목하십시오. GenerativeAiDemoWebStack 스택 출력 아래에서 CloudFormation 콘솔에서 나중에 검색 할 수도 있습니다.
이제 이미지 생성 AI 모델 엔드 포인트 스택을 시작하십시오.
cdk deploy GenerativeAiTxt2imgSagemakerStack
이 단계는 약 8 분이 걸립니다. 이미지 생성 모델 엔드 포인트가 배포되었으므로 이제 사용할 수 있습니다.
첫 번째 예는 텍스트 프롬프트에서 고품질 이미지를 생성 할 수있는 강력한 생성 모델링 기술 인 안정적인 확산을 활용하는 방법을 보여줍니다.
GenerativeAiDemoWebStack 의 출력에서 WebApplicationServiceURL 사용하여 웹 응용 프로그램에 액세스하십시오. 
내비게이션 창에서 이미지 생성을 선택하십시오.
Sagemaker Endpoint 이름 및 API GW URL 필드는 사전 인구가 있지만 원하는 경우 이미지 설명의 프롬프트를 변경할 수 있습니다.
이미지 생성을 선택하십시오.

응용 프로그램은 Sagemaker 엔드 포인트를 호출합니다. 몇 초가 걸립니다. 이미지 설명에 Charasteristics가있는 그림이 표시됩니다.

두 번째 예는 기초 또는 대형 언어 모델 (LLM) 인 FLAN-T5-XL 모델을 사용하여 텍스트 생성에 대한 텍스트 내 학습을 달성하면서 광범위한 자연 언어 이해 (NLU) 및 자연 언어 생성 (NLG) 작업을 해결합니다.
일부 환경에서는 한 번에 시작할 수있는 엔드 포인트 수를 제한 할 수 있습니다. 이 경우 한 번에 하나의 Sagemaker 엔드 포인트를 시작할 수 있습니다. AWS CDK 앱에서 Sagemaker 엔드 포인트를 중지하려면 배포 된 엔드 포인트 스택을 파괴하고 다른 엔드 포인트 스택을 시작하기 전에야합니다. 이미지 생성 AI 모델 엔드 포인트를 낮추려면 다음 명령을 발행하십시오.
cdk destroy GenerativeAiTxt2imgSagemakerStack
그런 다음 텍스트 생성 AI 모델 엔드 포인트 스택을 시작합니다.
cdk deploy GenerativeAiTxt2nluSagemakerStack
프롬프트에 y 입력하십시오.
텍스트 생성 모델 엔드 포인트 스택이 시작된 후 다음 단계를 완료하십시오.

컨텍스트 아래에는 드롭 다운 메뉴 옵션에서 일부 전술 한 쿼리가 있습니다.

입력 쿼리 필드에 자체 쿼리를 입력하고 응답 생성을 선택할 수도 있습니다.

AWS CloudFormation 콘솔에서 내비게이션 창에서 스택을 선택하여 배포 된 스택을 볼 수 있습니다.

Amazon ECS 콘솔에서는 클러스터 페이지의 클러스터를 볼 수 있습니다.

AWS Lambda 콘솔에서는 기능 페이지의 기능을 볼 수 있습니다.

API 게이트웨이 콘솔에서 API 페이지의 API 게이트웨이 엔드 포인트를 볼 수 있습니다.

Sagemaker 콘솔에서는 엔드 포인트 페이지에서 배포 된 모델 엔드 포인트를 볼 수 있습니다.

스택이 시작되면 일부 매개 변수가 생성됩니다. 이들은 AWS Systems Manager 매개 변수 저장소에 저장됩니다. 이를 보려면 AWS Systems Manager 콘솔의 내비게이션 창에서 매개 변수 저장소를 선택하십시오.

불필요한 비용을 피하려면 워크 스테이션의 다음 명령으로 생성 된 모든 인프라를 정리하십시오.
cdk destroy --all
프롬프트에서 y 입력하십시오. 이 단계는 약 10 분이 걸립니다. 콘솔에서 모든 자원이 삭제되는지 확인하십시오. 또한 Amazon S3 콘솔의 AWS CDK가 생성 한 자산 S3 버킷과 Amazon ECR의 자산 저장소.
이 게시물에서 알 수 있듯이 AWS CDK를 사용하여 JumpStart에 생성 AI 모델을 배포 할 수 있습니다. Lambda 및 API 게이트웨이로 구동되는 사용자 인터페이스를 사용하여 이미지 생성 예제 및 텍스트 생성 예제를 보여주었습니다.
이제 JumpStart에서 미리 훈련 된 AI 모델을 사용하여 생성 AI 프로젝트를 구축 할 수 있습니다. 또한이 프로젝트를 확장하여 사용 사례의 기초 모델을 미세 조정하고 API 게이트웨이 엔드 포인트에 대한 액세스를 제어 할 수 있습니다.
솔루션을 테스트하고 GitHub의 프로젝트에 기여하도록 초대합니다.
이 샘플 코드는 수정 된 MIT 라이센스로 제공됩니다. 자세한 내용은 라이센스 파일을 참조하십시오. 또한 안정된 확산 및 FLAN-T5-XL 모델에 대한 각 라이센스를 포옹 얼굴에 검토하십시오.
Hantzley Tauckoor 는 싱가포르에 본사를 둔 APJ 파트너 솔루션 아키텍처 리더입니다. 그는 솔루션 아키텍처, 비즈니스 개발, 판매 전략, 컨설팅 및 리더십을 포함하여 여러 기능 분야에 걸친 ICT 산업에서 20 년의 경험을 보유하고 있습니다. 그는 파트너가 공동 솔루션을 개발하고 기술 기능을 구축하며 고객이 애플리케이션을 AWS로 마이그레이션하고 현대화함에 따라 구현 단계를 통해이를 조종 할 수있는 수석 솔루션 아키텍트 팀을 이끌고 있습니다. 외부에서 그는 가족과 함께 시간을 보내고, 영화를보고, 하이킹을 즐깁니다.
Kwonyul Choi 는 서울에 본사를 둔 한국의 뷰티 케어 플랫폼 스타트 업인 Babitalk의 CTO입니다. 이 역할을 수행하기 전에 Kownyul은 AWS CDK 및 Amazon Sagemaker에 중점을 둔 AWS의 소프트웨어 개발 엔지니어로 근무했습니다.
Arunprasath Shankar 는 AWS를 보유한 선임 AI/ML 전문 솔루션 아키텍트로서 글로벌 고객이 클라우드에서 AI 솔루션을 효과적이고 효율적으로 확장 할 수 있도록 도와줍니다. 여가 시간에 Arun은 공상 과학 영화를보고 클래식 음악을 듣는 것을 즐깁니다.
Satish Upreti 는 APJ의 파트너 조직에서 마이그레이션 리드 PSA 및 보안 중소기업입니다. Satish는 온 프레미스 프라이빗 클라우드 및 퍼블릭 클라우드 기술에 걸친 20 년의 경험을 가지고 있습니다. 2020 년 8 월에 이주 전문가로 AWS에 합류 한 이후, 그는 복잡한 마이그레이션을 계획하고 구현하기 위해 AWS 파트너에게 광범위한 기술 조언과 지원을 제공합니다.
이 섹션에서는이 프로젝트에서 코드에 대한 개요를 제공합니다.
AWS CDK 응용 프로그램
기본 AWS CDK 응용 프로그램은 루트 디렉토리의 app.py 파일에 포함되어 있습니다. 이 프로젝트는 여러 스택으로 구성되므로 스택을 가져와야합니다.
#!/usr/bin/env python3
import aws_cdk as cdk
from stack . generative_ai_vpc_network_stack import GenerativeAiVpcNetworkStack
from stack . generative_ai_demo_web_stack import GenerativeAiDemoWebStack
from stack . generative_ai_txt2nlu_sagemaker_stack import GenerativeAiTxt2nluSagemakerStack
from stack . generative_ai_txt2img_sagemaker_stack import GenerativeAiTxt2imgSagemakerStack생성 AI 모델을 정의하고 Sagemaker로부터 관련 URI를 얻습니다.
from script . sagemaker_uri import *
import boto3
region_name = boto3 . Session (). region_name
env = { "region" : region_name }
#Text to Image model parameters
TXT2IMG_MODEL_ID = "model-txt2img-stabilityai-stable-diffusion-v2-1-base"
TXT2IMG_INFERENCE_INSTANCE_TYPE = "ml.g4dn.4xlarge"
TXT2IMG_MODEL_TASK_TYPE = "txt2img"
TXT2IMG_MODEL_INFO = get_sagemaker_uris ( model_id = TXT2IMG_MODEL_ID ,
model_task_type = TXT2IMG_MODEL_TASK_TYPE ,
instance_type = TXT2IMG_INFERENCE_INSTANCE_TYPE ,
region_name = region_name )
#Text to NLU image model parameters
TXT2NLU_MODEL_ID = "huggingface-text2text-flan-t5-xl"
TXT2NLU_INFERENCE_INSTANCE_TYPE = "ml.g4dn.4xlarge"
TXT2NLU_MODEL_TASK_TYPE = "text2text"
TXT2NLU_MODEL_INFO = get_sagemaker_uris ( model_id = TXT2NLU_MODEL_ID ,
model_task_type = TXT2NLU_MODEL_TASK_TYPE ,
instance_type = TXT2NLU_INFERENCE_INSTANCE_TYPE ,
region_name = region_name ) get_sagemaker_uris 함수는 Amazon JumpStart에서 모든 모델 정보를 검색합니다. 스크립트/sagemaker_uri.py를 참조하십시오.
그런 다음 스택을 인스턴스화합니다.
app = cdk . App ()
network_stack = GenerativeAiVpcNetworkStack ( app , "GenerativeAiVpcNetworkStack" , env = env )
GenerativeAiDemoWebStack ( app , "GenerativeAiDemoWebStack" , vpc = network_stack . vpc , env = env )
GenerativeAiTxt2nluSagemakerStack ( app , "GenerativeAiTxt2nluSagemakerStack" , env = env , model_info = TXT2NLU_MODEL_INFO )
GenerativeAiTxt2imgSagemakerStack ( app , "GenerativeAiTxt2imgSagemakerStack" , env = env , model_info = TXT2IMG_MODEL_INFO )
app . synth () 출시 할 첫 번째 스택은 VPC 스택, GenerativeAiVpcNetworkStack 입니다. 웹 애플리케이션 스택 인 GenerativeAiDemoWebStack 은 VPC 스택에 따라 다릅니다. 종속성은 vpc=network_stack.vpc 전달하는 매개 변수를 통해 수행됩니다.
전체 코드는 App.py를 참조하십시오.
VPC 네트워크 스택
GenerativeAiVpcNetworkStack 스택에서 공개 서브넷이있는 VPC와 두 개의 가용성 영역 (AZS)에 걸쳐있는 개인 서브넷이있는 VPC를 만듭니다.
self . output_vpc = ec2 . Vpc ( self , "VPC" ,
nat_gateways = 1 ,
ip_addresses = ec2 . IpAddresses . cidr ( "10.0.0.0/16" ),
max_azs = 2 ,
subnet_configuration = [
ec2 . SubnetConfiguration ( name = "public" , subnet_type = ec2 . SubnetType . PUBLIC , cidr_mask = 24 ),
ec2 . SubnetConfiguration ( name = "private" , subnet_type = ec2 . SubnetType . PRIVATE_WITH_EGRESS , cidr_mask = 24 )
]
)전체 코드는 /stack/generative_ai_vpc_network_stack.py를 참조하십시오.
데모 웹 애플리케이션 스택
GenerativeAiDemoWebStack 스택에서 웹 애플리케이션이 Sagemaker 모델 엔드 포인트와 상호 작용하는 Lambda Functions 및 각 Amazon API Gateway 엔드 포인트를 시작합니다. 다음 코드 스 니펫을 참조하십시오.
# Defines an AWS Lambda function for Image Generation service
lambda_txt2img = _lambda . Function (
self , "lambda_txt2img" ,
runtime = _lambda . Runtime . PYTHON_3_9 ,
code = _lambda . Code . from_asset ( "code/lambda_txt2img" ),
handler = "txt2img.lambda_handler" ,
role = role ,
timeout = Duration . seconds ( 180 ),
memory_size = 512 ,
vpc_subnets = ec2 . SubnetSelection (
subnet_type = ec2 . SubnetType . PRIVATE_WITH_EGRESS
),
vpc = vpc
)
# Defines an Amazon API Gateway endpoint for Image Generation service
txt2img_apigw_endpoint = apigw . LambdaRestApi (
self , "txt2img_apigw_endpoint" ,
handler = lambda_txt2img
)웹 애플리케이션은 컨테이너화되어 Fargate와 함께 Amazon EC에서 호스팅됩니다. 다음 코드 스 니펫을 참조하십시오.
# Create Fargate service
fargate_service = ecs_patterns . ApplicationLoadBalancedFargateService (
self , "WebApplication" ,
cluster = cluster , # Required
cpu = 2048 , # Default is 256 (512 is 0.5 vCPU, 2048 is 2 vCPU)
desired_count = 1 , # Default is 1
task_image_options = ecs_patterns . ApplicationLoadBalancedTaskImageOptions (
image = image ,
container_port = 8501 ,
),
#load_balancer_name="gen-ai-demo",
memory_limit_mib = 4096 , # Default is 512
public_load_balancer = True ) # Default is True전체 코드는 /stack/generative_ai_demo_web_stack.py를 참조하십시오.
이미지 생성 Sagemaker 모델 엔드 포인트 스택
GenerativeAiTxt2imgSagemakerStack 스택은 Sagemaker JumpStart에서 이미지 생성 모델 엔드 포인트를 생성하고 AWS Systems Manager 매개 변수 저장소에 엔드 포인트 이름을 저장합니다. 이 매개 변수는 웹 응용 프로그램에서 사용됩니다. 다음 코드를 참조하십시오.
endpoint = SageMakerEndpointConstruct ( self , "TXT2IMG" ,
project_prefix = "GenerativeAiDemo" ,
role_arn = role . role_arn ,
model_name = "StableDiffusionText2Img" ,
model_bucket_name = model_info [ "model_bucket_name" ],
model_bucket_key = model_info [ "model_bucket_key" ],
model_docker_image = model_info [ "model_docker_image" ],
variant_name = "AllTraffic" ,
variant_weight = 1 ,
instance_count = 1 ,
instance_type = model_info [ "instance_type" ],
environment = {
"MMS_MAX_RESPONSE_SIZE" : "20000000" ,
"SAGEMAKER_CONTAINER_LOG_LEVEL" : "20" ,
"SAGEMAKER_PROGRAM" : "inference.py" ,
"SAGEMAKER_REGION" : model_info [ "region_name" ],
"SAGEMAKER_SUBMIT_DIRECTORY" : "/opt/ml/model/code" ,
},
deploy_enable = True
)
ssm . StringParameter ( self , "txt2img_sm_endpoint" , parameter_name = "txt2img_sm_endpoint" , string_value = endpoint . endpoint_name )전체 코드는 /stack/generative_ai_txt2img_sagemaker_stack.py를 참조하십시오.
NLU 및 텍스트 생성 SAGEMAKER 모델 엔드 포인트 스택
GenerativeAiTxt2nluSagemakerStack 스택은 JumpStart에서 NLU 및 텍스트 생성 모델 엔드 포인트를 생성하고 시스템 관리자 매개 변수 저장소에 엔드 포인트 이름을 저장합니다. 이 매개 변수는 웹 응용 프로그램에서도 사용됩니다. 다음 코드를 참조하십시오.
endpoint = SageMakerEndpointConstruct ( self , "TXT2NLU" ,
project_prefix = "GenerativeAiDemo" ,
role_arn = role . role_arn ,
model_name = "HuggingfaceText2TextFlan" ,
model_bucket_name = model_info [ "model_bucket_name" ],
model_bucket_key = model_info [ "model_bucket_key" ],
model_docker_image = model_info [ "model_docker_image" ],
variant_name = "AllTraffic" ,
variant_weight = 1 ,
instance_count = 1 ,
instance_type = model_info [ "instance_type" ],
environment = {
"MODEL_CACHE_ROOT" : "/opt/ml/model" ,
"SAGEMAKER_ENV" : "1" ,
"SAGEMAKER_MODEL_SERVER_TIMEOUT" : "3600" ,
"SAGEMAKER_MODEL_SERVER_WORKERS" : "1" ,
"SAGEMAKER_PROGRAM" : "inference.py" ,
"SAGEMAKER_SUBMIT_DIRECTORY" : "/opt/ml/model/code/" ,
"TS_DEFAULT_WORKERS_PER_MODEL" : "1"
},
deploy_enable = True
)
ssm . StringParameter ( self , "txt2nlu_sm_endpoint" , parameter_name = "txt2nlu_sm_endpoint" , string_value = endpoint . endpoint_name )전체 코드는 /stack/generative_ai_txt2nlu_sagemaker_stack.py를 참조하십시오.
웹 응용 프로그램
웹 응용 프로그램은 /Web-App 디렉토리에 있습니다. Dockerfile에 따라 컨테이너화되는 유선형 애플리케이션입니다.
FROM --platform=linux/x86_64 python:3.9
EXPOSE 8501
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD streamlit run Home.py
--server.headless true
--browser.serverAddress= "0.0.0.0"
--server.enableCORS false
--browser.gatherUsageStats false간소화에 대한 자세한 내용은 간소화 문서를 참조하십시오.