딥 러닝 모델을 대규모로 배포할 때 기본 하드웨어를 효과적으로 활용하여 성능 및 비용 이점을 극대화하는 것이 중요합니다. 높은 처리량과 짧은 대기 시간이 필요한 프로덕션 워크로드의 경우 아마존 엘라스틱 컴퓨트 클라우드 (EC2) 인스턴스, 모델 서빙 스택 및 배포 아키텍처는 매우 중요합니다. 비효율적인 아키텍처는 가속기의 활용도가 최적화되지 않고 불필요하게 높은 생산 비용을 초래할 수 있습니다.
이 게시물에서는 AWS Inferentia 장치(Amazon EC2에서 찾을 수 있음)에 FastAPI 모델 서버를 배포하는 과정을 안내합니다. 정보1 및 아마존 EC 정보2 인스턴스). 또한 하드웨어 활용도를 최대화하기 위해 모든 NeuronCore에 병렬로 배포되는 샘플 모델 호스팅을 시연합니다.
솔루션 개요
FastAPI는 Flask 및 Django와 같은 기존 프레임워크보다 훨씬 빠른 Python 애플리케이션을 제공하기 위한 오픈 소스 웹 프레임워크입니다. 그것은 비동기식 서버 게이트웨이 인터페이스 (ASGI) 대신 널리 사용되는 웹 서버 게이트웨이 인터페이스 (WSGI). ASGI는 요청을 순차적으로 처리하는 WSGI와 달리 들어오는 요청을 비동기적으로 처리합니다. 이로 인해 FastAPI는 대기 시간에 민감한 요청을 처리하는 데 이상적인 선택입니다. FastAPI를 사용하여 지정된 포트를 통해 클라이언트 요청을 수신하는 Inferentia(Inf1/Inf2) 인스턴스에서 엔드포인트를 호스팅하는 서버를 배포할 수 있습니다.
우리의 목표는 하드웨어의 최대 활용을 통해 최저 비용으로 최고의 성능을 달성하는 것입니다. 이를 통해 더 적은 액셀러레이터로 더 많은 추론 요청을 처리할 수 있습니다. 각 AWS Inferentia1 장치에는 1개의 NeuronCores-v2이 포함되어 있고 각 AWS Inferentia2 장치에는 XNUMX개의 NeuronCores-vXNUMX가 포함되어 있습니다. 그만큼 AWS 뉴런 SDK를 사용하면 각 NeuronCore를 병렬로 활용할 수 있으므로 처리량을 희생하지 않고도 병렬로 XNUMX개 이상의 모델을 로드하고 추론할 수 있습니다.
FastAPI를 사용하면 Python 웹 서버(구니콘, 유비콘, 하이퍼콘, 다프네). 이러한 웹 서버는 기본 기계 학습(ML) 모델 위에 계층을 제공하고 추상화합니다. 요청하는 클라이언트는 호스팅된 모델을 인식하지 못하는 이점이 있습니다. 클라이언트는 서버에 배포된 모델의 이름이나 버전을 알 필요가 없습니다. 엔드포인트 이름은 이제 모델을 로드하고 실행하는 함수에 대한 프록시일 뿐입니다. 반대로 TensorFlow Serving과 같은 프레임워크별 제공 도구에서는 모델의 이름과 버전이 엔드포인트 이름의 일부입니다. 서버 측에서 모델이 변경되면 클라이언트는 이에 따라 API 호출을 새 끝점으로 변경해야 합니다. 따라서 A/B 테스트의 경우와 같이 버전 모델을 지속적으로 발전시키는 경우 FastAPI와 함께 일반 Python 웹 서버를 사용하는 것이 엔드포인트 이름이 정적이기 때문에 모델을 제공하는 편리한 방법입니다.
ASGI 서버의 역할은 클라이언트 요청을 수신하고 추론 코드를 실행하는 지정된 수의 작업자를 생성하는 것입니다. 서버의 중요한 기능은 요청한 수의 작업자가 사용 가능하고 활성화되어 있는지 확인하는 것입니다. 작업자가 종료된 경우 서버는 새 작업자를 시작해야 합니다. 이 컨텍스트에서 서버와 작업자는 Unix 프로세스 ID(PID)로 식별할 수 있습니다. 이 게시물에서는 다음을 사용합니다. 하이퍼콘 Python 웹 서버에 널리 사용되는 서버입니다.
이 게시물에서는 AWS Inferentia NeuronCores에서 FastAPI를 사용하여 딥 러닝 모델을 배포하는 모범 사례를 공유합니다. 동시에 호출할 수 있는 별도의 NeuronCore에 여러 모델을 배포할 수 있음을 보여줍니다. 이 설정은 여러 모델을 동시에 추론할 수 있고 NeuronCore 활용이 완전히 최적화되기 때문에 처리량을 증가시킵니다. 코드는 다음에서 찾을 수 있습니다. GitHub 레포. 다음 그림은 EC2 Inf2 인스턴스에서 솔루션을 설정하는 방법의 아키텍처를 보여줍니다.
코어가 2개라는 점을 제외하면 동일한 아키텍처가 EC1 InfXNUMX 인스턴스 유형에 적용됩니다. 따라서 아키텍처 다이어그램이 약간 변경됩니다.
AWS Inferentia NeuronCore
NeuronCore와 연결하기 위해 AWS Neuron에서 제공하는 도구에 대해 좀 더 자세히 살펴보겠습니다. 다음 표는 각 Inf1 및 Inf2 인스턴스 유형의 NeuronCore 수를 보여줍니다. 호스트 vCPU와 시스템 메모리는 사용 가능한 모든 NeuronCore에서 공유됩니다.
인스턴스 크기 | # Inferentia 가속기 | # 뉴런코어-v1 | vCPU | 메모리(GiB) |
Inf1.xlarge | 1 | 4 | 4 | 8 |
Inf1.2xlarge | 1 | 4 | 8 | 16 |
Inf1.6xlarge | 4 | 16 | 24 | 48 |
Inf1.24xlarge | 16 | 64 | 96 | 192 |
인스턴스 크기 | # Inferentia 가속기 | # 뉴런코어-v2 | vCPU | 메모리(GiB) |
Inf2.xlarge | 1 | 2 | 4 | 32 |
Inf2.8xlarge | 1 | 2 | 32 | 32 |
Inf2.24xlarge | 6 | 12 | 96 | 192 |
Inf2.48xlarge | 12 | 24 | 192 | 384 |
Inf2 인스턴스에는 Inf2 인스턴스의 NeuronCore-v1과 비교하여 새로운 NeuronCore-v1가 포함되어 있습니다. 더 적은 수의 코어에도 불구하고 Inf4 인스턴스보다 10배 더 높은 처리량과 1배 더 짧은 대기 시간을 제공할 수 있습니다. Inf2 인스턴스는 Generative AI, OPT/GPT 제품군의 LLM(대형 언어 모델), Stable Diffusion과 같은 비전 변환기와 같은 딥 러닝 워크로드에 이상적입니다.
Neuron Runtime은 Neuron 장치에서 모델 실행을 담당합니다. Neuron Runtime은 어떤 NeuronCore가 어떤 모델을 실행할지, 어떻게 실행할지를 결정합니다. Neuron Runtime의 구성은 다음을 사용하여 제어됩니다. 환경 변수 프로세스 수준에서. 기본적으로 Neuron 프레임워크 확장은 사용자를 대신하여 Neuron Runtime 구성을 처리합니다. 그러나 보다 최적화된 동작을 달성하기 위해 명시적 구성도 가능합니다.
널리 사용되는 두 가지 환경 변수는 다음과 같습니다. NEURON_RT_NUM_CORES
및 NEURON_RT_VISIBLE_CORES
. 이러한 환경 변수를 사용하여 Python 프로세스를 NeuronCore에 연결할 수 있습니다. 와 함께 NEURON_RT_NUM_CORES
, 프로세스를 위해 지정된 수의 코어를 예약할 수 있으며 NEURON_RT_VISIBLE_CORES
, 다양한 NeuronCore를 예약할 수 있습니다. 예를 들어, NEURON_RT_NUM_CORES=2 myapp.py
두 개의 코어를 예약하고 NEURON_RT_VISIBLE_CORES=’0-2’ myapp.py
위해 XNUMX, XNUMX, XNUMX개의 코어를 예약합니다. myapp.py
. 여러 장치(AWS Inferentia 칩)에서도 NeuronCore를 예약할 수 있습니다. 그래서, NEURON_RT_VISIBLE_CORES=’0-5’ myapp.py
처음 XNUMX개의 코어를 예약합니다. device1
그리고 하나의 코어 device2
Ec2 Inf1 인스턴스 유형에서. 마찬가지로 EC2 Inf2 인스턴스 유형에서 이 구성은 device1
및 device2
그리고 하나의 코어 device3
. 다음 표에는 이러한 변수의 구성이 요약되어 있습니다.
성함 | 상품 설명 | 타입 | 기대값 | 기본값 | RT 버전 |
NEURON_RT_VISIBLE_CORES |
프로세스에 필요한 특정 NeuronCore의 범위 | 정수 범위(예: 1-3) | 시스템의 0에서 Max NeuronCore 사이의 모든 값 또는 범위 | 없음 | 2.0+ |
NEURON_RT_NUM_CORES |
프로세스에 필요한 NeuronCore 수 | 정수 | 시스템에서 1에서 Max NeuronCore까지의 값 | 0, "모두"로 해석됨 | 2.0+ |
모든 환경 변수 목록은 다음을 참조하십시오. 뉴런 런타임 구성.
기본적으로 모델을 로드할 때 이전 환경 변수에서 명시적으로 지정하지 않는 한 모델은 NeuronCore 0에 로드된 다음 NeuronCore 1에 로드됩니다. 앞에서 지정한 것처럼 NeuronCore는 사용 가능한 호스트 vCPU와 시스템 메모리를 공유합니다. 따라서 각 NeuronCore에 배포된 모델은 사용 가능한 리소스를 놓고 경쟁합니다. 모델이 NeuronCore를 상당 부분 활용하는 경우에는 문제가 되지 않습니다. 그러나 모델이 NeuronCore에서 부분적으로만 실행되고 나머지는 호스트 vCPU에서 실행되는 경우 NeuronCore당 CPU 가용성을 고려하는 것이 중요해집니다. 이는 인스턴스 선택에도 영향을 미칩니다.
다음 표는 하나의 모델이 각 NeuronCore에 배포된 경우 모델당 사용 가능한 호스트 vCPU 및 시스템 메모리의 수를 보여줍니다. 애플리케이션의 NeuronCore 사용량, vCPU 및 메모리 사용량에 따라 테스트를 실행하여 애플리케이션에 가장 적합한 구성을 찾는 것이 좋습니다. 그만큼 뉴런 탑 도구 코어 사용률과 장치 및 호스트 메모리 사용률을 시각화하는 데 도움이 될 수 있습니다. 이러한 메트릭을 기반으로 정보에 입각한 결정을 내릴 수 있습니다. 이 블로그의 마지막 부분에서 Neuron Top의 사용법을 시연합니다.
인스턴스 크기 | # Inferentia 가속기 | # 모델 | vCPU/모델 | 메모리/모델(GiB) |
Inf1.xlarge | 1 | 4 | 1 | 2 |
Inf1.2xlarge | 1 | 4 | 2 | 4 |
Inf1.6xlarge | 4 | 16 | 1.5 | 3 |
Inf1.24xlarge | 16 | 64 | 1.5 | 3 |
인스턴스 크기 | # Inferentia 가속기 | # 모델 | vCPU/모델 | 메모리/모델(GiB) |
Inf2.xlarge | 1 | 2 | 2 | 8 |
Inf2.8xlarge | 1 | 2 | 16 | 64 |
Inf2.24xlarge | 6 | 12 | 8 | 32 |
Inf2.48xlarge | 12 | 24 | 8 | 32 |
Neuron SDK 기능을 직접 테스트하려면 최신 PyTorch의 뉴런 기능.
시스템 설치
다음은 이 솔루션에 사용되는 시스템 설정입니다.
솔루션 설정
솔루션을 설정하려면 몇 가지 작업을 수행해야 합니다. 푸시 및 풀을 허용하는 EC2 인스턴스가 가정할 IAM 역할을 생성하여 시작하십시오. Amazon Elastic Container Registry.
1단계: IAM 역할 설정
- 콘솔에 로그인하고 IAM > 역할 > 역할 생성에 액세스하여 시작하십시오.
- 신뢰할 수 있는 엔터티 유형 선택
AWS Service
- 사용 사례에서 서비스로 EC2를 선택합니다.
- 다음 보기 사용 가능한 모든 정책을 볼 수 있습니다.
- 이 솔루션의 목적을 위해 EC2 인스턴스에 ECR에 대한 전체 액세스 권한을 부여할 것입니다. 필터링 AmazonEC2ContainerRegistryFullAccess 그것을 선택하십시오.
- 다음을 누르고 역할 이름을 지정하십시오.
inf-ecr-access
참고: 첨부한 정책은 EC2 인스턴스에 Amazon ECR에 대한 전체 액세스 권한을 부여합니다. 다음을 강력히 권장합니다. 최소 권한의 교장 프로덕션 워크로드용.
2단계: AWS CLI 설정
위에 나열된 규정된 Deep Learning AMI를 사용하는 경우 AWS CLI가 설치된 상태로 제공됩니다. 다른 AMI(Amazon Linux 2023, Base Ubuntu 등)를 사용하는 경우 다음과 같이 CLI 도구를 설치합니다. 이 가이드.
CLI 도구를 설치했으면 다음 명령을 사용하여 CLI를 구성합니다. aws configure
. 액세스 키가 있는 경우 여기에 추가할 수 있지만 AWS 서비스와 상호 작용하는 데 반드시 필요하지는 않습니다. 우리는 이를 위해 IAM 역할에 의존하고 있습니다.
주의 사항: 기본 프로필을 생성하려면 하나 이상의 값(기본 지역 또는 기본 형식)을 입력해야 합니다. 이 예에서는 us-east-2
지역으로 그리고 json
기본 출력으로.
Github 저장소 복제
XNUMXD덴탈의 GitHub 레포 AWS Inferentia 인스턴스의 NeuronCores에서 FastAPI를 사용하여 모델을 배포하는 데 필요한 모든 스크립트를 제공합니다. 이 예제에서는 재사용 가능한 솔루션을 만들 수 있도록 Docker 컨테이너를 사용합니다. 이 예에는 다음이 포함됩니다. 구성.속성 사용자가 입력을 제공할 수 있는 파일입니다.
구성 파일에는 Docker 이미지 및 Docker 컨테이너에 대한 사용자 정의 이름 접두사가 필요합니다. 그만큼 build.sh
스크립트 fastapi
및 trace-model
폴더는 이를 사용하여 Docker 이미지를 만듭니다.
AWS Inferentia에서 모델 컴파일
모델을 추적하고 PyTorch Torchscript .pt 파일을 생성하는 것으로 시작합니다. 액세스하여 시작 trace-model
디렉토리 및 .env 파일 수정. 선택한 인스턴스 유형에 따라 CHIP_TYPE
이내 .env
파일. 예를 들어 Inf2를 가이드로 선택합니다. Inf1의 배포 프로세스에도 동일한 단계가 적용됩니다.
다음으로 동일한 파일에서 기본 지역을 설정합니다. 이 영역은 ECR 리포지토리를 생성하는 데 사용되며 Docker 이미지는 이 리포지토리로 푸시됩니다. 또한 이 폴더에서 추적하는 데 필요한 모든 스크립트를 제공합니다. bert-base-uncased
AWS Inferentia의 모델. 이 스크립트는 에서 사용할 수 있는 대부분의 모델에 사용할 수 있습니다. 포옹하는 얼굴. 그만큼 도커 파일 Neuron으로 모델을 실행하기 위한 모든 종속성이 있으며 추적 모델.py 코드를 진입점으로 사용합니다.
뉴런 컴파일 설명
Neuron SDK의 API는 PyTorch Python API와 매우 유사합니다. 그만큼 torch.jit.trace()
PyTorch에서 모델 및 샘플 입력 텐서를 인수로 사용합니다. 샘플 입력은 모델에 공급되고 해당 입력이 모델의 레이어를 통과할 때 호출되는 작업은 다음과 같이 기록됩니다. 토치 스크립트. PyTorch의 JIT 추적에 대해 자세히 알아보려면 다음을 참조하십시오. 선적 서류 비치.
처럼 torch.jit.trace()
, inf1 인스턴스에 대한 다음 코드를 사용하여 모델을 AWS Inferentia에서 컴파일할 수 있는지 확인할 수 있습니다.
inf2의 경우 라이브러리는 다음과 같습니다. torch_neuronx
. inf2 인스턴스에 대해 모델 컴파일을 테스트하는 방법은 다음과 같습니다.
추적 인스턴스를 만든 후 다음과 같이 예제 텐서 입력을 전달할 수 있습니다.
마지막으로 결과 TorchScript 출력을 로컬 디스크에 저장합니다.
앞의 코드에서 볼 수 있듯이 다음을 사용할 수 있습니다. compiler_args
및 optimizations
배포를 최적화합니다. 인수에 대한 자세한 인수 목록은 torch.neuron.trace
API, 참조 PyTorch-Neuron 추적 Python API.
다음 중요 사항을 염두에 두십시오.
- Neuron SDK는 이 글을 쓰는 시점에서 동적 텐서 모양을 지원하지 않습니다. 따라서 다양한 입력 형태에 대해 모델을 별도로 컴파일해야 합니다. 버킷팅을 사용하여 변수 입력 형태에 대한 추론을 실행하는 방법에 대한 자세한 내용은 다음을 참조하십시오. 버킷팅으로 가변 입력 형태에 대한 추론 실행.
- 모델을 컴파일할 때 메모리 부족 문제가 발생하면 vCPU 또는 메모리가 더 많은 AWS Inferentia 인스턴스에서 모델을 컴파일하거나 컴파일이 CPU만 사용하므로 대형 c6i 또는 r6i 인스턴스에서 컴파일해 보십시오. 일단 컴파일되면 추적된 모델을 더 작은 AWS Inferentia 인스턴스 크기에서 실행할 수 있습니다.
빌드 프로세스 설명
이제 다음을 실행하여 이 컨테이너를 빌드합니다. 빌드.sh. 빌드 스크립트 파일은 단순히 기본 딥 러닝 컨테이너 이미지를 가져오고 HuggingFace를 설치하여 Docker 이미지를 생성합니다. transformers
패키지. 를 기반으로 CHIP_TYPE
에 지정된 .env
파일 docker.properties
파일이 적절한 결정 BASE_IMAGE
. 이 BASE_IMAGE
AWS에서 제공하는 Neuron Runtime용 딥 러닝 컨테이너 이미지를 가리킵니다.
개인 ECR 리포지토리를 통해 사용할 수 있습니다. 이미지를 가져오려면 먼저 로그인하고 임시 AWS 자격 증명을 받아야 합니다.
주의 사항: 리포지토리 URI 내에서 region 플래그로 지정된 명령에 나열된 리전을 .env 파일.
이 프로세스를 더 쉽게 하기 위해 다음을 사용할 수 있습니다. fetch-credentials.sh
파일. 지역은 .env 파일에서 자동으로 가져옵니다.
다음으로 스크립트를 사용하여 이미지를 푸시합니다. 푸시.시. 푸시 스크립트는 Amazon ECR에 리포지토리를 생성하고 컨테이너 이미지를 푸시합니다.
마지막으로 이미지가 빌드되고 푸시되면 다음을 실행하여 컨테이너로 실행할 수 있습니다. 실행.sh 꼬리 실행 로그 로그.sh. 컴파일러 로그(다음 스크린샷 참조)에서 Neuron에서 컴파일된 산술 연산자의 백분율과 Neuron에서 성공적으로 컴파일된 모델 하위 그래프의 백분율을 볼 수 있습니다. 스크린샷은 다음에 대한 컴파일러 로그를 보여줍니다. bert-base-uncased-squad2
모델. 로그에는 산술 연산자의 95.64%가 컴파일된 것으로 표시되며 Neuron에서 컴파일된 연산자와 지원되지 않는 연산자 목록도 제공됩니다.
여기 최신 PyTorch Neuron 패키지에서 지원되는 모든 연산자. 비슷하게, 여기 목록이 있습니다 최신 PyTorch Neuronx 패키지에서 지원되는 모든 연산자.
FastAPI로 모델 배포
모델이 컴파일된 후 추적된 모델은 trace-model
폴더. 이 예에서는 배치 크기 1에 대해 추적된 모델을 배치했습니다. 여기서는 더 큰 배치 크기가 실현 가능하지 않거나 필요하지 않은 사용 사례를 설명하기 위해 배치 크기 1을 고려합니다. 더 높은 배치 크기가 필요한 사용 사례의 경우 토치.뉴런.데이터 병렬 (Inf1의 경우) 또는 torch.neuronx.DataParallel (Inf2의 경우) API도 유용할 수 있습니다.
XNUMXD덴탈의 빠른 API 폴더는 FastAPI로 모델을 배포하는 데 필요한 모든 스크립트를 제공합니다. 변경 없이 모델을 배포하려면 다음을 실행하면 됩니다. 배포.sh 스크립트를 작성하고 FastAPI 컨테이너 이미지를 빌드하고, 지정된 수의 코어에서 컨테이너를 실행하고, 각 FastAPI 모델 서버에서 서버당 지정된 수의 모델을 배포합니다. 이 폴더에는 .env
파일, 올바른 내용을 반영하도록 수정 CHIP_TYPE
및 AWS_DEFAULT_REGION
.
주의 사항: FastAPI 스크립트는 이미지를 컨테이너로 빌드, 푸시 및 실행하는 데 사용되는 것과 동일한 환경 변수를 사용합니다. FastAPI 배포 스크립트는 이러한 변수에서 마지막으로 알려진 값을 사용합니다. 따라서 Inf1 인스턴스 유형에 대한 모델을 마지막으로 추적한 경우 해당 모델은 이러한 스크립트를 통해 배포됩니다.
XNUMXD덴탈의 fastapi-server.py 서버를 호스팅하고 모델에 요청을 보내는 역할을 하는 파일은 다음을 수행합니다.
- 속성 파일에서 서버당 모델 수와 컴파일된 모델의 위치를 읽어옵니다.
- 표시되는 NeuronCores를 Docker 컨테이너에 대한 환경 변수로 설정하고 환경 변수를 읽어 사용할 NeuronCores를 지정합니다.
- 위한 추론 API를 제공합니다.
bert-base-uncased-squad2
모델 - 와
jit.load()
, 구성에 지정된 대로 서버당 모델 수를 로드하고 모델 및 필요한 토크나이저를 전역 사전에 저장합니다.
이 설정을 사용하면 각 NeuronCore에 저장된 모델과 모델 수를 나열하는 API를 설정하는 것이 상대적으로 쉽습니다. 마찬가지로 특정 NeuronCore에서 모델을 삭제하도록 API를 작성할 수 있습니다.
XNUMXD덴탈의 도커 파일 FastAPI 컨테이너 구축을 위해 모델 추적을 위해 구축한 Docker 이미지를 기반으로 구축되었습니다. 이것이 왜 도커.속성 파일은 모델 추적을 위한 Docker 이미지에 대한 ECR 경로를 지정합니다. 설정에서 모든 NeuronCore의 Docker 컨테이너는 유사하므로 하나의 이미지를 빌드하고 하나의 이미지에서 여러 컨테이너를 실행할 수 있습니다. 진입점 오류를 방지하기 위해 다음을 지정합니다. ENTRYPOINT ["/usr/bin/env"]
실행하기 전에 Dockerfile에서 startup.sh
다음과 같은 스크립트 hypercorn fastapi-server:app -b 0.0.0.0:8080
. 이 시작 스크립트는 모든 컨테이너에서 동일합니다. 추적 모델과 동일한 기본 이미지를 사용하는 경우 build.sh 스크립트를 실행하기만 하면 이 컨테이너를 빌드할 수 있습니다. 그만큼 push.sh
스크립트는 모델 추적을 위해 이전과 동일하게 유지됩니다. 수정된 Docker 이미지 및 컨테이너 이름은 docker.properties
파일.
XNUMXD덴탈의 run.sh file
다음을 수행합니다.
- Docker 이미지와 컨테이너 이름을 읽습니다. 속성 파일을 차례로 읽습니다.
config.properties
가 있는 파일num_cores
사용자 설정 - 0에서 루프를 시작합니다.
num_cores
그리고 각 코어에 대해:- 포트 번호와 장치 번호를 설정합니다.
- 설정
NEURON_RT_VISIBLE_CORES
환경 변수 - 볼륨 마운트를 지정합니다.
- Docker 컨테이너 실행
명확성을 위해 Inf0용 NeuronCore 1에 배포하기 위한 Docker 실행 명령은 다음 코드와 같습니다.
NeuronCore 5에 배포하기 위한 실행 명령은 다음 코드와 같습니다.
컨테이너가 배포된 후 run_apis.py 병렬 스레드에서 API를 호출하는 스크립트. 코드는 각 NeuronCore에 하나씩 배포된 XNUMX개의 모델을 호출하도록 설정되어 있지만 다른 설정으로 쉽게 변경할 수 있습니다. 다음과 같이 클라이언트 측에서 API를 호출합니다.
NeuronCore 모니터링
모델 서버가 배포된 후 NeuronCore 활용도를 모니터링하기 위해 다음을 사용할 수 있습니다. neuron-top
각 NeuronCore의 사용률을 실시간으로 관찰합니다. 뉴런 탑 NeuronCore, vCPU 및 메모리 사용률과 같은 정보를 제공하는 Neuron SDK의 CLI 도구입니다. 별도의 터미널에서 다음 명령을 입력합니다.
출력은 다음 그림과 유사해야 합니다. 이 시나리오에서는 Inf2.xlarge 인스턴스에서 서버당 287.8개의 NeuronCore와 4개의 모델을 사용하도록 지정했습니다. 다음 스크린샷은 각각 1.3MB 크기의 두 모델이 두 개의 NeuronCore에 로드되었음을 보여줍니다. 총 XNUMX개의 모델을 로드한 상태에서 사용된 디바이스 메모리는 XNUMXGB임을 알 수 있습니다. 다른 장치의 NeuronCore 사이를 이동하려면 화살표 키를 사용하십시오.
마찬가지로 Inf1.16xlarge 인스턴스 유형에서는 총 12개의 모델(코어 2개에서 코어당 6개 모델)이 로드된 것을 볼 수 있습니다. 총 2.1GB의 메모리가 사용되며 모든 모델의 크기는 177.2MB입니다.
실행 후 run_apis.py 스크립트에서 XNUMX개의 NeuronCore 각각의 사용률을 볼 수 있습니다(다음 스크린샷 참조). 시스템 vCPU 사용량 및 런타임 vCPU 사용량도 볼 수 있습니다.
다음 스크린샷은 Inf2 인스턴스 코어 사용률을 보여줍니다.
마찬가지로 이 스크린샷은 inf1.6xlarge 인스턴스 유형의 코어 활용도를 보여줍니다.
정리
생성한 모든 Docker 컨테이너를 정리하기 위해 다음을 제공합니다. cleanup.sh 실행 중이거나 중지된 컨테이너를 모두 제거하는 스크립트입니다. 이 스크립트는 모든 컨테이너를 제거하므로 일부 컨테이너를 계속 실행하려는 경우에는 사용하지 마십시오.
결론
프로덕션 워크로드는 종종 높은 처리량, 낮은 대기 시간 및 비용 요구 사항을 갖습니다. 가속기를 차선으로 활용하는 비효율적인 아키텍처는 불필요하게 높은 생산 비용을 초래할 수 있습니다. 이 게시물에서는 FastAPI와 함께 NeuronCores를 최적으로 활용하여 최소 대기 시간에서 처리량을 최대화하는 방법을 보여주었습니다. 우리는 지침을 게시했습니다. GitHub 레포. 이 솔루션 아키텍처를 사용하면 각 NeuronCore에 여러 모델을 배포하고 성능 저하 없이 여러 NeuronCore에서 여러 모델을 병렬로 작동할 수 있습니다. 다음과 같은 서비스를 사용하여 대규모로 모델을 배포하는 방법에 대한 자세한 내용은 Amazon Elastic Kubernetes 서비스 (Amazon EKS), 참조 시간당 $3,000 미만으로 AWS Inferentia를 사용하여 Amazon EKS에서 50개의 딥 러닝 모델 제공.
저자 소개
안쿠 르 스리 바스타 바 ML 프레임워크 팀의 수석 솔루션 설계자입니다. 그는 AWS에서 대규모의 자체 관리형 분산 교육 및 추론을 통해 고객을 돕는 데 중점을 두고 있습니다. 그의 경험에는 산업 예측 유지보수, 디지털 트윈, 확률론적 설계 최적화가 포함되어 있으며 Rice University의 기계 공학에서 박사 과정을 마치고 Massachusetts Institute of Technology에서 박사 후 연구를 마쳤습니다.
KC 퉁 AWS Annapurna Labs의 수석 솔루션 아키텍트입니다. 그는 대규모 딥 러닝 모델 교육 및 대규모 클라우드 배포를 전문으로 합니다. 그는 박사 학위를 가지고 있습니다. 달라스에 있는 텍사스 대학교 사우스웨스턴 메디컬 센터에서 분자 생물리학 박사 학위를 받았습니다. 그는 AWS Summits 및 AWS Reinvent에서 연설했습니다. 현재 그는 고객이 AWS 클라우드에서 대규모 PyTorch 및 TensorFlow 모델을 교육하고 배포하도록 돕고 있습니다. 그는 다음 두 권의 책을 저술했습니다. TensorFlow Enterprise 알아보기 및 TensorFlow 2 포켓 레퍼런스.
프로노이 초프라 AWS의 Startups Generative AI 팀의 선임 솔루션 아키텍트입니다. 그는 IoT 및 기계 학습 솔루션의 설계 및 개발을 전문으로 합니다. 그는 과거에 두 개의 신생 기업을 공동 설립했으며 IoT, AI/ML 및 서버리스 도메인의 프로젝트를 직접 경험하는 것을 즐깁니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoData.Network 수직 생성 Ai. 자신에게 권한을 부여하십시오. 여기에서 액세스하십시오.
- PlatoAiStream. 웹3 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 플라톤ESG. 자동차 / EV, 탄소, 클린테크, 에너지, 환경, 태양광, 폐기물 관리. 여기에서 액세스하십시오.
- BlockOffsets. 환경 오프셋 소유권 현대화. 여기에서 액세스하십시오.
- 출처: https://aws.amazon.com/blogs/machine-learning/optimize-aws-inferentia-utilization-with-fastapi-and-pytorch-models-on-amazon-ec2-inf1-inf2-instances/
- :있다
- :이다
- :아니
- :어디
- $UP
- 000
- 1
- 1.3
- 10
- 100
- 12
- 13
- 15%
- 2023
- 7
- 8
- 91
- a
- 할 수 있는
- 소개
- 위의
- 추출
- 가속기
- ACCESS
- 액세스
- 따라서
- 계정
- 달성
- 가로질러
- 활동적인
- 더하다
- 반대
- AI
- AI / ML
- All
- 수
- 수
- 또한
- 아마존
- Amazon EC2
- Amazon Web Services
- an
- 및
- 어떤
- API를
- API
- 앱
- 어플리케이션
- 어플리케이션
- 신청
- 적당한
- 아키텍처
- 있군요
- 인수
- AS
- 취하다
- At
- 저자
- 자동적으로
- 유효성
- 가능
- 피하기
- AWS
- AWS 인 페렌 시아
- 기지
- 기반으로
- BE
- 때문에
- 가
- 된
- 전에
- 대신에
- 행동
- 존재
- 이익
- 혜택
- BEST
- 모범 사례
- 사이에
- 생물 물리학
- 비트
- 블로그
- 도서
- 빌드
- 건물
- 내장
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 전화
- 라는
- 통화
- CAN
- 기능
- 능력
- 한
- 케이스
- 가지 경우
- 센터
- 이전 단계로 돌아가기
- 변경
- 변경
- 검사
- 칩
- 선택
- 왼쪽 메뉴에서
- 선택
- 선명도
- 클라이언트
- 면밀히
- 클라우드
- 암호
- 제공
- 비교
- 경쟁
- 진행완료
- 계산
- 구성
- 고려
- 치고는
- 콘솔에서
- 소비
- 포함하는
- 컨테이너
- 용기
- 이 포함되어 있습니다
- 문맥
- 지속적으로
- 대조
- 제어
- 통제
- 편리한
- 핵심
- 수정
- 비용
- 비용
- 수
- 두
- 만들
- 만든
- 생성
- 만들기
- 신임장
- 결정적인
- 고객
- 달라스
- 결정
- 깊은
- 깊은 학습
- 깊이
- 태만
- 보여
- 의존
- 배포
- 배포
- 배치
- 전개
- 디자인
- 지정
- 무례
- 상세한
- 결정하다
- 개발
- 장치
- 디바이스
- 다른
- 방송
- DIG
- 디지털
- 디지털 쌍둥이
- 분산
- 분산 교육
- 장고
- do
- 도커
- 하지
- 하지 않습니다
- 도메인
- 말라
- 동적
- 마다
- 이전
- 쉽게
- 용이하게
- 쉽게
- EC
- 효과적으로
- end
- 종점
- 참여
- 엔지니어링
- 확인
- 엔터 버튼
- 실재
- 항목
- 환경
- 오류
- 등
- 조차
- 모든
- 진화하는
- 예
- 외
- 경험
- 확장
- 페이스메이크업
- 가족
- 빠른
- 실행할 수 있는
- 특징
- 연방 준비 은행
- 적은
- 그림
- 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
- 필터링
- 최종적으로
- Find
- 먼저,
- 집중
- 수행원
- 다음
- 럭셔리
- 체재
- 발견
- 사
- 뼈대
- 프레임 워크
- 에
- 가득 찬
- 충분히
- 기능
- 게이트웨이
- 생성적인
- 제너레이티브 AI
- 얻을
- GitHub의
- 주기
- 제공
- 글로벌
- 가는
- 안내
- 핸들
- 손 -에
- 하드웨어
- 있다
- he
- 도움
- 도움이
- 도움이
- 여기에서 지금 확인해 보세요.
- 높은
- 더 높은
- 최고
- 그의
- 주인
- 호스팅
- 호스팅
- 호스트
- 방법
- How To
- 그러나
- HTML
- HTTP
- HTTPS
- 포옹 얼굴
- ID
- 이상
- 확인
- if
- 영상
- 형상
- import
- 중대한
- in
- 포함
- 포함
- 들어오는
- 증가
- 산업
- 비효율적
- 정보
- 정보
- 입력
- 입력
- 설치
- 설치
- 설치
- 예
- 를 받아야 하는 미국 여행자
- 학회
- 명령
- 상호 작용하는
- 으로
- 호출
- IOT
- 발행물
- 문제
- IT
- 그
- JIT
- JPG
- 다만
- 유지
- 키
- 알아
- 알려진
- 실험실
- 언어
- 넓은
- 성
- 숨어 있음
- 최근
- 시작
- 층
- 레이어
- 리드
- 배우다
- 배우기
- 레벨
- 도서관
- 처럼
- 리눅스
- 명부
- 상장 된
- 작은
- 조금 더 깊은
- LLM
- 로드
- 잔뜩
- 지방의
- 위치
- 로깅
- 로그인
- 보기
- 같이
- 봐라.
- 지는
- 낮은
- 절감
- 가장 낮은
- 기계
- 기계 학습
- 만든
- 유지
- 확인
- 제작
- 유튜브 영상을 만드는 것은
- .
- 매사추세츠 주
- 매사추세츠 공과 대학교
- 최대
- 극대화하다
- 최고
- XNUMX월..
- 기계적인
- 의료
- 메모리
- 통계
- 신경
- 최저한의
- ML
- 모델
- 모델
- 수정
- 수정
- 분자의
- 모니터
- 배우기
- 가장
- 움직임
- 많은
- 여러
- 절대로 필요한 것
- name
- 필연적으로
- 필요한
- 필요
- 필요
- 요구
- 신제품
- 다음 것
- 지금
- 번호
- 목표
- 관찰
- of
- 제공
- 자주
- on
- 일단
- ONE
- 만
- ~에
- 오픈 소스
- 운영
- 행정부
- 운영자
- 반대하는
- 최적화
- 최적화
- 최적화
- or
- 우리의
- 아웃
- 출력
- 위에
- 꾸러미
- 평행
- 부품
- 패스
- 과거
- 통로
- 용
- tỷ lệ phần trăm
- 성능
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 포인트 적립
- 전철기
- 정책
- 정책
- 인기 문서
- 가능한
- 게시하다
- 사례
- 제시
- 사설
- 아마
- 방법
- 프로세스
- 생산
- 생산
- 프로필
- 프로젝트
- 속성
- 제공
- 제공
- 제공
- 대리
- 출판
- 당기
- 목적
- 푸시
- 밀
- 밀어
- 놓다
- Python
- 파이 토치
- 범위
- 현실
- 실시간
- 권하다
- 추천
- 기록
- 반영
- 지방
- 상대적으로
- 의지하다
- 의지
- 유적
- 제거
- 교체
- 저장소
- 요청
- 필수
- 요구조건 니즈
- 연구
- 유사
- 리저브
- 보유
- 제품 자료
- 응답
- 책임
- REST
- 결과
- 재사용 가능한
- 쌀
- 직위별
- 역할
- 달리기
- 달리는
- 실행
- 희생하는
- 같은
- 찜하기
- 규모
- 대본
- 스크립트
- SDK
- 참조
- 선택
- 전송
- 연장자
- 민감한
- 별도의
- 서버리스
- 서버
- 서비스
- 서비스
- 피복재
- 세트
- 설정
- 설치
- 모양
- 공유
- 공유
- 영상을
- 표시
- 보여
- 표시
- 쇼
- 측면
- 비슷한
- 비슷하게
- 간단히
- SIX
- 크기
- 크기
- 작은
- So
- 해결책
- 솔루션
- 일부
- 전문적으로
- 구체적인
- 지정
- 이야기
- 안정된
- 스택
- 스타트
- 시작
- 신생
- 정해진
- 단계
- 정지
- 저장
- 상점
- 강하게
- 연구
- 성공적으로
- 이러한
- 정상 회담
- SUPPORT
- 지원
- 확인
- 체계
- 테이블
- 받아
- 촬영
- 소요
- 팀
- Technology
- 일시적인
- 텐서 흐름
- 단말기
- test
- 지원
- 테스트
- 텍사스
- 보다
- 그
- XNUMXD덴탈의
- 그들의
- 그들
- 그때
- 따라서
- Bowman의
- 그들
- 일
- 이
- 그
- 을 통하여
- 처리량
- 묶여
- 시간
- 에
- 오늘
- 수단
- 검색을
- 상단
- 토치
- 금액
- 더듬다
- 트레이싱
- 전통적인
- Train
- 트레이닝
- 변압기
- 신뢰할 수있는
- 시도
- 회전
- 쌍둥이
- 두
- 유형
- Ubuntu
- 아래에
- 밑에 있는
- 대학
- 유닉스
- 불필요하게
- ...에
- us
- 용법
- 사용
- 익숙한
- 사용자
- 사용자
- 사용
- 사용
- 활용
- 이용하다
- 활용
- 가치
- 마케팅은:
- 버전
- 대단히
- 눈에 보이는
- 시력
- 음량
- 필요
- 였다
- 방법..
- we
- 웹
- 웹 서버
- 웹 서비스
- 잘
- 했다
- 언제
- 어느
- why
- 크게
- 의지
- 과
- 이내
- 없이
- 노동자
- 근로자
- 겠지
- 쓰기
- 쓴
- 자신의
- 너의
- 당신 자신
- 제퍼 넷
- 제로