제퍼넷 로고

C6i Intel 기반 Amazon EC2 인스턴스로 Amazon SageMaker 추론 가속화

시간

Intel의 Antony Vance와 공동으로 작성한 게스트 게시물입니다.

고객은 트랜잭션당 비용을 늘리지 않고 결과의 정확성을 희생하지 않으면서 기계 학습(ML) 추론 워크로드의 성능과 응답 시간을 개선할 수 있는 방법을 항상 찾고 있습니다. ML 워크로드 실행 아마존 세이지 메이커 달리는 아마존 엘라스틱 컴퓨트 클라우드 (아마존 EC2) C6i 인스턴스 인텔 INT8 추론 배포는 특정 ML 워크로드에 적용할 때 FP1에 비해 추론 정확도 손실을 32% 미만으로 유지하면서 지출 비용당 최대 XNUMX배까지 전체 성능을 향상하는 데 도움이 될 수 있습니다. 모델의 폼 팩터와 크기가 중요한 임베디드 장치에서 모델을 실행할 때 양자화가 도움이 될 수 있습니다.

양자화는 일반적인 8비트 부동 소수점(FP8) 대신 32비트 정수(INT32)와 같은 저정밀 데이터 유형으로 가중치 및 활성화를 표현하여 추론 실행의 계산 및 메모리 비용을 줄이는 기술입니다. 다음 예시 그림에서는 BERT 기반 모델에 대한 C8i의 INT6 추론 성능을 보여줍니다.

BERT 기반은 PyTorch용 인텔® 확장과 함께 사용되는 ML 프레임워크인 PyTorch(v1.1)와 함께 SQuAD v1.11로 미세 조정되었습니다. 비교를 위해 배치 크기 1을 사용했습니다. 더 높은 배치 크기는 1백만 추론당 다른 비용을 제공합니다.

이 게시물에서는 INT8 추론을 구축하고 배포하는 방법을 보여줍니다. 자체 처리 용기 파이토치용. 효과적인 INT8 배포 워크플로를 위해 PyTorch용 Intel 확장을 사용합니다.

기술 개요

EC2 C6i 인스턴스 3.5GHz의 올코어 터보 주파수를 사용하는 XNUMX세대 Intel Xeon Scalable 프로세서(Ice Lake라고도 함)로 구동됩니다.

딥 러닝의 맥락에서 연구 및 배포에 사용되는 주요 숫자 형식은 지금까지 32비트 부동 소수점 또는 FP32였습니다. 그러나 딥 러닝 모델의 대역폭 및 컴퓨팅 요구 사항 감소에 대한 필요성으로 인해 정밀도가 낮은 숫자 형식을 사용하는 연구가 진행되었습니다. 가중치와 활성화는 정확도를 크게 떨어뜨리지 않고 8비트 정수(또는 INT8)를 사용하여 표현할 수 있음이 입증되었습니다.

EC2 C6i 인스턴스는 AI 및 ML 워크로드의 성능을 향상시키는 많은 새로운 기능을 제공합니다. C6i 인스턴스는 FP32 및 INT8 모델 배포에서 성능 이점을 제공합니다. FP32 추론은 AVX-512 개선으로 활성화되고 INT8 추론은 AVX-512 VNNI 명령어로 활성화됩니다.

C6i는 이제 SageMaker 엔드포인트에서 사용할 수 있으며 개발자는 C8 인스턴스 FP32 추론과 비교할 때 FP5 추론에 비해 INT32 추론에 대해 XNUMX배 이상의 가격 대비 성능 향상과 최대 XNUMX배의 성능 향상을 제공할 것으로 예상해야 합니다. 인스턴스 세부 정보 및 벤치마크 데이터는 부록을 참조하십시오.

실시간 추론을 위해 엣지에 딥 러닝을 배치하는 것은 많은 응용 분야의 핵심입니다. 네트워크 대역폭, 네트워크 대기 시간 및 전력 소비 측면에서 클라우드와 통신하는 비용을 크게 줄입니다. 그러나 에지 장치는 메모리, 컴퓨팅 리소스 및 성능이 제한되어 있습니다. 이는 딥 러닝 네트워크가 임베디드 배포에 최적화되어야 함을 의미합니다. INT8 양자화는 TensorFlow 및 PyTorch와 같은 ML 프레임워크에 대한 최적화를 위한 대중적인 접근 방식이 되었습니다. SageMaker는 양자화를 실행할 수 있도록 BYOC(Bring Your Own Container) 접근 방식과 통합 도구를 제공합니다.

자세한 내용은 낮은 수치 정밀도 딥 러닝 추론 및 훈련.

솔루션 개요

솔루션을 구현하는 단계는 다음과 같습니다.

  1. EC2 C6i 인스턴스를 프로비저닝하여 ML 모델을 양자화하고 생성합니다.
  2. 양자화를 위해 제공된 Python 스크립트를 사용하십시오.
  3. BYOC 접근 방식을 사용하여 SageMaker에서 모델을 배포할 Docker 이미지를 생성합니다.
  4. 사용 아마존 단순 스토리지 서비스 (Amazon S3) SageMaker 액세스를 위한 모델 및 코드 복사용 버킷.
  5. Amazon Elastic Container Registry (Amazon ECR) Docker 이미지를 호스팅합니다.
  6. 사용 AWS 명령 줄 인터페이스 (AWS CLI) SageMaker에서 추론 엔드포인트를 생성합니다.
  7. 제공된 Python 테스트 스크립트를 실행하여 INT8 및 FP32 버전 모두에 대해 SageMaker 엔드포인트를 호출합니다.

이 추론 배포 설정은 Hugging Face 변환기 리포지토리(csarron/bert-base-uncased-squad-v1)의 BERT 기반 모델을 사용합니다.

사전 조건

다음은 배포 설정을 만들기 위한 전제 조건입니다.

  • AWS CLI가 설치된 Linux 셸 터미널
  • EC2 인스턴스 생성에 대한 액세스 권한이 있는 AWS 계정(C6i 인스턴스 유형)
  • SageMaker 모델, 엔드포인트 구성, 엔드포인트 배포를 위한 SageMaker 액세스
  • AWS 자격 증명 및 액세스 관리 (IAM) IAM 역할 및 정책을 구성하기 위한 액세스
  • Amazon ECR에 대한 액세스
  • 엔드포인트 실행 지침이 포함된 노트북을 생성할 수 있는 SageMaker 액세스

SageMaker에서 양자화된 INT8 모델 생성 및 배포

양자화된 모델을 생성하기 위해 EC2 인스턴스를 열고 모델 아티팩트를 Amazon S3에 푸시합니다. 엔드포인트 배포의 경우 PyTorch 및 Intel® Extension for PyTorch로 사용자 지정 컨테이너를 생성하여 최적화된 INT8 모델을 배포합니다. 컨테이너는 Amazon ECR로 푸시되고 FP6 및 INT32 모델을 제공하기 위해 C8i 기반 엔드포인트가 생성됩니다.

다음 다이어그램은 개략적인 흐름을 보여줍니다.

코드 및 설명서에 액세스하려면 다음을 참조하십시오. GitHub 레포.

사용 사례 예시

Stanford Question Answering Dataset(SQuAD)는 Wikipedia 기사 세트에서 크라우드 워커가 제기한 질문으로 구성된 독해 데이터 세트입니다. 여기서 모든 질문에 대한 답변은 텍스트 세그먼트입니다. 기간, 해당 읽기 구절에서 또는 질문에 답할 수 없습니다.

다음 예제는 BERT 기반 모델을 사용한 질의 응답 알고리즘입니다. 문서를 입력으로 제공하면 모델은 입력 문서의 학습 및 컨텍스트를 기반으로 간단한 질문에 답합니다.

다음은 입력 문서의 예입니다.

아마존 열대우림(포르투갈어: Floresta Amazônica 또는 Amazônia; 스페인어: Selva Amazónica, Amazonía 또는 일반적으로 Amazonia; 프랑스어: Forêt amazonienne; 네덜란드어: Amazoneregenwoud)은 영어로 Amazonia 또는 Amazon Jungle로도 알려져 있으며 대부분을 덮고 있는 습한 활엽수림입니다. 남아메리카의 아마존 분지. 이 유역은 7,000,000제곱킬로미터(2,700,000제곱마일)를 포함하며 그 중 5,500,000제곱킬로미터(2,100,000제곱마일)는 열대우림으로 덮여 있습니다.

"아마존 열대 우림을 영어로 설명하는 데에도 사용되는 이름은 무엇입니까?" 우리는 답을 얻습니다.

also known in English as Amazonia or the Amazon Jungle,Amazonia or the Amazon Jungle, Amazonia.

"분지에는 몇 평방 킬로미터의 열대우림이 덮여 있습니까?"라는 질문에 대해 우리는 답을 얻습니다.

5,500,000 square kilometers (2,100,000 sq mi) are covered by the rainforest.5,500,000.

PyTorch에서 모델 양자화

이 섹션에서는 PyTorch 및 Intel 확장을 사용한 모델 양자화 단계에 대한 간략한 개요를 제공합니다.

코드 스니펫은 SageMaker 예제에서 파생됩니다.

quantize.py 파일에서 IPEX_quantize 함수의 변경 사항을 자세히 살펴보겠습니다.

  1. 양자화 및 최적화에 도움이 되는 PyTorch용 인텔 확장을 가져오고 어레이 조작을 위해 토치를 가져옵니다.
import intel_extension_for_pytorch as ipex
import torch

  1. 100회 반복에 대해 모델 보정을 적용합니다. 이 경우 SQuAD 데이터 세트로 모델을 보정합니다.
model.eval()
conf = ipex.quantization.QuantConf(qscheme=torch.per_tensor_affine)
print("Doing calibration...")
for step, batch in enumerate(eval_dataloader): print("Calibration step-", step) with torch.no_grad(): with ipex.quantization.calibrate(conf): model(**batch) if step == 100: break

  1. 샘플 입력 준비:
jit_inputs = [] example_batch = next(iter(eval_dataloader)) for key in example_batch: example_tensor = torch.ones_like(example_batch[key]) jit_inputs.append(example_tensor) jit_inputs = tuple(jit_inputs)

  1. 다음 구성을 사용하여 모델을 INT8 모델로 변환합니다.
with torch.no_grad(): model = ipex.quantization.convert(model, conf, jit_inputs)

  1. 퓨전을 활성화하려면 정방향 패스를 두 번 반복 실행합니다.
    with torch.no_grad(): model(**example_batch) model(**example_batch)

  1. 마지막 단계로 TorchScript 모델을 저장합니다.
model.save(os.path.join(args.model_path, "model_int8.pt"))

정리

자세한 내용은 Github 레포 생성된 AWS 리소스를 정리하는 단계.

결론

SageMaker 엔드포인트의 새로운 EC2 C6i 인스턴스는 INT2.5 양자화를 통해 추론 배포를 최대 8배까지 가속화할 수 있습니다. Intel PyTorch 확장의 몇 가지 API를 사용하여 PyTorch에서 모델을 양자화할 수 있습니다. 모델 정확도가 엔드포인트 배포에서 유지되도록 C6i 인스턴스에서 모델을 양자화하는 것이 좋습니다. SageMaker 예시 GitHub 레포 이제 INT8 모델을 양자화하고 호스팅하기 위한 종단 간 배포 예제 파이프라인을 제공합니다.

EC8 C2i 인스턴스 유형을 사용하여 INT6 양자화를 사용하여 새 모델을 생성하거나 기존 모델을 마이그레이션하고 성능 향상을 직접 확인하는 것이 좋습니다.


통지 및 면책 조항

이 문서에 포함된 코드가 Zero-Clause BSD 오픈 소스 라이선스(0BSD)


충수

INT8 배포를 지원하는 SageMaker의 새로운 AWS 인스턴스

다음 표에는 유무에 관계없이 SageMaker 인스턴스가 나열되어 있습니다. DL 부스트 지원합니다.

인스턴스 이름 Xeon Gen 코드네임 INT8 활성화? DL 부스트 활성화?
ml.c5. 특대형 - ml.c5.9xlarge 스카이레이크/1st 가능 아니
ml.c5.18xlarge 스카이레이크/1st 가능 아니
ml.c6i.1x – 32xlarge 얼음 호수/3rd 가능 가능

요약하면 INT8 활성화는 INT8 데이터 유형 및 계산을 지원합니다. DL Boost 활성화는 Deep Learning Boost를 지원합니다.

벤치마크 데이터

다음 표에서는 c5와 c6 인스턴스 간의 비용과 상대적 성능을 비교합니다.

Sage 메이커 엔드포인트에 대한 10000개의 추론 쿼리로 측정된 대기 시간 및 처리량.

추론 엔드포인트 및 비용 분석의 E2E 대기 시간
P50(ms) P90(ms) 쿼리/초 $/1백만 쿼리 상대적 $/성능
C5.2x대형-FP32 76.6 125.3 11.5 $10.2 SR 1.0x
c6i.2x대형-FP32 70 110.8 13 $9.0 SR 1.1x
c6i.2xLarge-INT8 35.7 48.9 25.56 $4.5 SR 2.3x

INT8 모델은 대부분의 모델에서 2% 미만의 정확도 손실로 4~1배의 실질적인 성능 향상을 제공할 것으로 예상됩니다. 위의 표는 오버헤드 대기 시간(NW 및 데모 애플리케이션)을 다룹니다.

BERT 기반 모델의 정확도

다음 표에는 SQUaD v8 데이터 세트가 있는 INT1.1 모델의 정확도가 요약되어 있습니다.

메트릭 FP32 INT8
정확히 일치 85.8751 85.5061
F1 92.0807 91.8728

XNUMXD덴탈의 GitHub 레포 SQuAD 데이터 세트의 정확성을 확인하는 스크립트와 함께 제공됩니다. 인용하다 호출-INT8.py호출-FP32.py 테스트용 스크립트.

PyTorch용 인텔 확장

PyTorch*용 인텔® 확장(GitHub의 오픈 소스 프로젝트)은 인텔 하드웨어의 추가 성능 향상을 위한 최적화로 PyTorch를 확장합니다. 대부분의 최적화는 궁극적으로 스톡 PyTorch 릴리스에 포함될 것이며 확장의 의도는 Intel 하드웨어에서 PyTorch에 대한 최신 기능과 최적화를 제공하는 것입니다. 예를 들면 AVX-512 Vector Neural Network Instructions(AVX512 VNNI) 및 Intel® Advanced Matrix Extensions(Intel® AMX)가 있습니다.

다음 그림은 PyTorch 아키텍처용 인텔 확장을 보여줍니다.

PyTorch용 인텔® 확장에 대한 자세한 사용자 지침(기능, 성능 조정 등)은 다음을 참조하십시오. PyTorch*용 인텔® 확장 사용자 지침.


저자에 관하여

로힛 초다리 AWS Strategic Accounts 팀의 선임 솔루션 아키텍트입니다.

아니루다 카파간투 AWS AI 플랫폼 팀의 소프트웨어 개발 엔지니어입니다.

안토니 밴스 컴퓨터 비전, 머신 러닝, 딥 러닝, 임베디드 소프트웨어, GPU 및 FPGA 분야에서 19년의 경력을 가진 Intel의 AI 설계자입니다.

spot_img

최신 인텔리전스

spot_img