이 참조 아키텍처 시리즈에서는 NVIDIA® T4 GPU 및 Triton 추론 서버를 사용해서 딥 러닝 모델에 대해 고성능 온라인 추론 시스템을 설계하고 배포하는 방법을 설명합니다.
이 아키텍처를 사용하면 머신러닝 모델을 사용하는 시스템을 만들고 GPU 가속화를 활용할 수 있습니다. Google Kubernetes Engine(GKE)을 사용하면 증가하는 클라이언트 수에 따라 시스템을 확장할 수 있습니다. 이 시리즈에 설명된 최적화 기법을 사용해서 처리량을 늘리고 시스템 지연 시간을 줄일 수 있습니다.
이 시리즈는 TensorFlow 및 NVIDIA TensorRT를 포함하여 Google Kubernetes Engine 및 머신러닝(ML) 프레임워크에 익숙한 개발자를 대상으로 합니다.
이 시리즈에는 다음과 같은 문서가 포함됩니다.
- 참조 아키텍처: 확장 가능한 TensorFlow 추론 시스템(이 문서)
- 배포: 확장 가능한 TensorFlow 추론 시스템 배포
- 배포 측정 및 조정: TensorFlow 추론 시스템의 성능 측정 및 조정
아키텍처
다음 다이어그램은 추론 시스템의 아키텍처를 보여줍니다.
이 아키텍처에는 다음 구성요소가 포함됩니다.
Cloud Load Balancing: 클라이언트에 가장 가까운 GKE 클러스터로 요청 트래픽을 전송합니다.
GKE 클러스터: 클러스터 노드 및 모니터링 서버를 포함합니다. 클라이언트가 여러 리전의 요청을 전송하는 경우 여러 리전에 GKE 클러스터를 배포할 수 있습니다. 동일한 클러스터에서 Locust 부하 분산 도구를 배포합니다.
GPU 가속기가 포함된 클러스터 노드: Triton 추론 서버 포드를 포함합니다. 각 노드에 대해 단일 포드가 배포됩니다(여러 포드에 단일 GPU를 공유할 수 없음).
Triton 추론 서버: 사용자가 만든 ResNet-50 모델을 지원합니다. 이 서버는 HTTP 또는 gRPC 엔드포인트를 통해 추론 서비스를 제공합니다. 추론 서비스는 서버에서 관리 중인 모델에 대해 원격 클라이언트가 추론을 요청하도록 허용합니다.
NVIDIA T4: 추론 성능을 향상시켜 줍니다. 각 포드에 대해 NVIDIA T4가 하나씩 있어야 합니다. 이 GPU에는 INT8 및 FP16 계산을 지원하고 가속화하는 특별한 처리 장치인 텐서 코어가 포함됩니다.
모니터링 서버: Triton에서 GPU 사용률 및 메모리 사용량에 대한 측정항목 데이터를 수집합니다. 이벤트 모니터링 및 알림에 Prometheus를 사용합니다. Grafana를 사용하여 Prometheus에 저장된 성능 데이터를 시각화하고 분석합니다.
설계 고려사항
다음 가이드라인은 신뢰성 및 성능에 대한 조직의 요구사항을 충족하는 아키텍처를 개발하는 데 도움이 될 수 있습니다.
신뢰성
이 아키텍처는 확장성 및 유연성 리소스 관리를 위해 GKE를 사용합니다.
GKE에 시스템을 배포하여 클라이언트 수에 따라 시스템을 확장할 수 있습니다. GKE 클러스터를 여러 리전에 배포하고 클러스터의 노드 수를 늘릴 수 있습니다.
성능 최적화
성능을 조정할 때는 다음과 같은 일반 안내를 따릅니다.
- 시스템의 사용 사례에 따라 성능 측정항목 및 대상 성능을 정의합니다.
- 성능 조정을 적용하기 전 기준 성능을 측정합니다.
- 변경사항을 하나 적용하고 향상되는지 확인합니다. 여러 변경사항을 한 번에 적용할 경우 어떤 변경사항으로 인해 성능이 향상되었는지 구분할 수 없습니다.
- 적절한 측정항목을 수집하여 성능 특성을 파악하고 성능 조정을 위한 다음 작업을 결정합니다.
안내에 따라 다음 요소로 인한 성능 향상을 측정합니다.
TensorRT(그래프 최적화). TensorRT는 NVIDIA T4에 대해 그래프 최적화를 적용합니다. 예를 들어 텐서 코어로 처리할 수 있도록 딥 러닝 모델을 자동으로 수정합니다. 먼저 TensorRT를 기준으로 사용하지 않고 추론 성능을 관찰합니다. 그런 후 TensorRT 그래프 최적화를 적용한 후 성능 향상을 관찰합니다.
FP16 변환. NVIDIA T4는 부동 소수점 계산을 위해 FP32(32비트 부동 소수점) 및 FP16을 지원합니다. 기본 FP32에서 FP16으로 변수 정밀도를 변환하면 추론 성능을 향상시킬 수 있습니다.
INT8 양자화. 양자화는 GPU에 대한 계산 성능을 향상시켜 주는 딥 러닝 모델을 위한 최적화 기법입니다. NVIDIA T4는 양자화를 위해 INT8(8비트 정수) 변수 유형을 지원합니다. FP16으로 변환과 비교할 때 INT8 양자화는 향상된 성능을 제공할 수 있지만 잠재적으로 정확도가 저하될 수 있습니다. 하지만 TensorRT는 계산 중 정보 손실을 최소화하는 보정 프로세스를 사용합니다.
인스턴스 그룹의 일괄 처리 크기 및 개수. Triton을 사용하여 인스턴스 그룹의 일괄 처리 크기 및 개수를 조정할 수 있습니다. 예를 들어 일괄 처리 크기를 16으로 설정하면 추론 요청이 일괄 처리 큐에 저장되고 16개 요청이 단일 일괄 처리로 처리됩니다. 마찬가지로 인스턴스 그룹 수를 4로 설정하면 병렬 4개 스레드로 여러 요청이 처리됩니다. 이 시나리오에서는 각 배치에 16개 요청이 있고 동시에 4개 스레드가 처리됩니다. 즉, 단일 GPU에서 동시에 64개의 요청이 처리됩니다.
인스턴스 그룹 수를 늘리면 TensorRT에서 GPU 활용률을 더 높일 수 있습니다. 동시에 일괄 처리 크기를 조정하면 Triton이 GPU에서 계산을 최적화할 수 있습니다. 예를 들어 다른 요청의 여러 계산을 텐서 코어에서의 단일 계산 태스크로 결합할 수 있습니다.
배포
이 아키텍처를 배포하려면 확장 가능한 TensorFlow 추론 시스템 배포를 참조하세요.
배포를 측정하고 조정하려면 TensorFlow 추론 시스템의 성능 측정 및 조정을 참조하세요.
다음 단계
- Google Kubernetes Engine(GKE) 알아보기
- Cloud Load Balancing 알아보기
- 그 밖의 참조 아키텍처, 다이어그램, 튜토리얼, 권장사항을 알아보려면 클라우드 아키텍처 센터를 확인하세요.