확장 가능한 TensorFlow 추론 시스템

Last reviewed 2023-11-02 UTC

이 참조 아키텍처 시리즈에서는 NVIDIA® T4 GPUTriton 추론 서버를 사용해서 딥 러닝 모델에 대해 고성능 온라인 추론 시스템을 설계하고 배포하는 방법을 설명합니다.

이 아키텍처를 사용하면 머신러닝 모델을 사용하는 시스템을 만들고 GPU 가속화를 활용할 수 있습니다. Google Kubernetes Engine(GKE)을 사용하면 증가하는 클라이언트 수에 따라 시스템을 확장할 수 있습니다. 이 시리즈에 설명된 최적화 기법을 사용해서 처리량을 늘리고 시스템 지연 시간을 줄일 수 있습니다.

이 시리즈는 TensorFlow 및 NVIDIA TensorRT를 포함하여 Google Kubernetes Engine 및 머신러닝(ML) 프레임워크에 익숙한 개발자를 대상으로 합니다.

이 시리즈에는 다음과 같은 문서가 포함됩니다.

아키텍처

다음 다이어그램은 추론 시스템의 아키텍처를 보여줍니다.

추론 시스템의 아키텍처입니다.

이 아키텍처에는 다음 구성요소가 포함됩니다.

  • 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 추론 시스템의 성능 측정 및 조정을 참조하세요.

다음 단계