본문으로 건너뛰기

NVIDIA MPS로 ASR 추론 GPU 비용 75% 절감

NVIDIA MPS와 Triton으로 ASR 처리량을 높이고 GPU 수를 16개에서 4개로 줄인 Amazon EC2 구성

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

임상 음성 ASR은 요청 하나가 GPU 연산 자원의 15~20%만 사용해도 기본 CUDA time-slicing 때문에 프로세스가 순차 실행되며, Heidi Health는 1초 미만 지연시간을 맞추기 위해 GPU 16개를 운영했습니다. NVIDIA MPS로 GPU를 SM 25%씩 사용하는 4개 인스턴스로 분할하고 Triton의 Dynamic Batching, 직접적인 model.forward() 호출, CUDA Graphs 안전장치를 결합하면 g7e.4xlarge에서 GPU당 92.1 RPS와 평균 352ms를 달성하면서 GPU 수를 4개로 줄일 수 있습니다. TensorRT와 ONNX를 추가하면 111.6 RPS까지 높아지지만 Fine-tuning마다 ONNX 재생성이 필요합니다. Streaming Sortformer diarization은 8개 MPS 인스턴스와 TensorRT warmup으로 청크당 평균 238ms를 기록해 전사와 별도 자원에서 처리됩니다.

섹션별 상세

01
Heidi Health는 주당 240만 건이 넘는 임상 상담을 190개 국가에서 처리하며, 피크 시간에도 1초 미만의 전사 지연시간을 유지하기 위해 GPU 16개를 사용했습니다. NVIDIA L40S에서 Parakeet TDT 0.6B V2의 단일 ASR 요청은 GPU SM의 약 15~20%만 사용하지만 기본 CUDA time-slicing은 프로세스별 독점 접근과 순차 실행을 강제합니다. 그 결과 요청 사이의 context-switch overhead와 80%에 이르는 유휴 연산 자원이 발생해 GPU당 처리량이 약 62 RPS에 머뭅니다.
02
NVIDIA MPS는 GPU를 여러 독립 실행 인스턴스로 나눠 각 요청을 동시에 처리하도록 구성합니다. 글의 기본 ASR 배치는 GPU 하나를 SM 25%씩 사용하는 4개 MPS 인스턴스로 분할하고, Triton이 요청을 각 인스턴스의 CUDA stream에 전달합니다. 이 구조는 g7e.4xlarge에서 GPU당 92.1 RPS와 평균 352ms 지연시간을 달성하면서 필요한 GPU 수를 16개에서 4개로 줄여 인프라를 75% 절감합니다.
03
추론 경로는 FastAPI 게이트웨이가 WAV, WebM/Opus, MP3, M4A, FLAC 오디오를 CPU에서 디코딩한 뒤 raw float32 tensor를 gRPC로 Triton에 전달하는 방식입니다. Triton은 최대 batch size 16, 선호 batch 크기 4·8·16, 최대 queue delay 50ms의 Dynamic Batching으로 요청을 묶고, OpenAI Whisper 호환 전사 API와 health·metrics 엔드포인트를 제공합니다. 게이트웨이와 추론 서버를 분리하면 CPU 전용 노드에서 오디오 처리를 맡길 수 있고 기존 Whisper 연동을 큰 변경 없이 교체할 수 있습니다.
Amazon EC2에서 FastAPI, Triton, CUDA MPS와 AWS 운영 서비스를 연결한 배포 아키텍처입니다.
DiagramFastAPI Gateway가 오디오 전사·디코딩·상태 확인·메트릭 요청을 받고 gRPC로 Triton Inference Server에 전달하는 흐름을 나타냅니다. ASR은 CUDA MPS 4개 인스턴스에 25% SM씩 배분되고, Streaming Diarization은 8개 인스턴스에 약 12% SM씩 배분되며, Amazon ECR·CloudWatch·EBS·S3가 이미지·로그·캐시·체크포인트 운영을 지원합니다.
04
모델 실행 경로에서는 NeMo의 model.transcribe() 대신 model.forward()를 직접 호출해 요청당 약 50ms의 프레임워크 overhead를 제거합니다. bfloat16 autocast와 인스턴스별 CUDA stream을 함께 사용하면 45초 오디오를 단일 인스턴스에서 약 160ms에 처리하며, 600M 파라미터 모델은 file lock으로 초기화를 직렬화해 여러 프로세스의 동시 GPU 적재에 따른 메모리 초과를 막습니다. 따라서 MPS 분할만 적용하는 데 그치지 않고 모델 호출과 컨테이너 초기화까지 조정해야 안정적인 다중 인스턴스 운영이 가능합니다.
05
CUDA Graphs는 5·15·30·45·60초 입력과 batch size 2의 61초 입력을 컨테이너 시작 때 미리 워밍업해 예상 shape를 캐시합니다. 캐시 범위의 입력은 약 165ms에 그래프를 재생하지만 범위를 넘는 shape는 해당 호출만 약 500ms의 eager execution으로 처리하며, MPS 환경에서 새 shape를 재캡처하는 동안 발생하는 sibling 인스턴스 충돌은 안전한 fallback으로 회피합니다. 한 인스턴스의 CUDA stream probe가 실패하면 /tmp/parakeet_wedged sentinel 파일을 기록해 복구 불가능한 인스턴스를 health check에서 식별합니다.
06
Streaming Sortformer 4-speaker v2 diarization은 transcription과 별도의 MPS 파티션에서 SM 12%씩 사용하는 8개 인스턴스로 실행됩니다. recording마다 고유 correlation ID를 부여해 15초 청크를 동일 세션으로 라우팅하고, sequence batching으로 상태를 유지하며 600초 후 세션을 만료시킵니다. TensorRT와 ONNX 엔진의 warmup 최적화 후 60초 녹음을 네 청크로 처리할 때 청크당 평균 지연시간은 238ms, 전체 실시간 계수는 0.016x로 측정됐습니다.
07
동시 요청 1~100 구간에서 5회씩 측정한 벤치마크의 운영 선택 경로는 Triton과 MPS를 g7e.4xlarge에서 실행하는 구성입니다. 이 경로는 평균 지연시간 352ms, GPU당 92.1 RPS를 기록했으며, TensorRT·ONNX·MPS 경로는 GPU당 111.6 RPS까지 높아져 16-GPU 기준 대비 88%의 GPU 절감을 나타냅니다. 다만 후자는 Fine-tuning 때마다 ONNX를 다시 export해야 하고 배포 파이프라인이 길어지므로, 92.1 RPS 경로와 추가 처리량 경로 사이에서 운영 주기를 선택해야 합니다.
기본 GPU time-slicing과 CUDA MPS의 SM 자원 배분을 비교한 도식입니다.
Diagram왼쪽 구성은 NVIDIA L40S의 142개 Streaming Multiprocessor 중 한 요청이 약 20%만 사용하고 나머지 약 80%가 유휴 상태인 모습을 나타냅니다. 오른쪽 구성은 GPU를 25% SM씩 사용하는 4개 CUDA MPS 인스턴스로 나눠 모든 인스턴스가 동시에 실행되는 구조를 나타내며, 성능 상자는 62 RPS·GPU 16개에서 92.1 RPS·GPU 4개로의 변화를 제시합니다.
동시 요청 수에 따른 여러 ASR 추론 구성의 처리량과 16-GPU 기준 인프라 절감을 비교한 차트입니다.
Chart상단 그래프는 Triton only 기준 약 62 RPS에서 Triton과 MPS의 g7e 구성 92.1 RPS, TensorRT·ONNX·MPS 구성 111.6 RPS, Dynamo 구성 138.3 RPS로 처리량이 달라지는 모습을 나타냅니다. 하단 그래프는 150 RPS 목표에 필요한 GPU 수를 기준으로 Triton only 16개, Triton과 MPS 4개, TensorRT·ONNX·MPS 2개로 비교하며 각각 75%와 88%의 인프라 절감 수치를 표시합니다.

용어 해설

CUDA Multi-Process Service
CUDA Multi-Process Service는 여러 프로세스가 하나의 NVIDIA GPU를 동시에 사용하도록 SM 자원을 분할하는 기능입니다. 각 인스턴스에 일정 비율의 SM을 배정해 기본 time-slicing의 순차 실행과 context-switch overhead를 줄이고, 낮은 요청별 GPU 사용률을 높은 동시 처리량으로 연결합니다.
동적 배칭(Dynamic Batching)
동적 배칭은 추론 서버가 짧은 시간 동안 도착한 여러 요청을 하나의 batch로 묶어 모델에 전달하는 방식입니다. 이 글의 Triton 설정은 최대 batch size 16, 선호 batch 크기 4·8·16, 최대 대기 시간 50ms를 사용해 지연시간과 처리량 사이의 균형을 맞춥니다.
CUDA Graphs
CUDA Graphs는 반복되는 GPU 연산의 실행 그래프를 미리 캡처한 뒤 이후 요청에서 재생해 kernel launch overhead를 줄이는 기능입니다. 글의 구현은 5·15·30·45·60초 오디오와 특정 batch shape를 사전 워밍업하며, 범위를 벗어난 입력은 해당 호출에서 eager execution으로 처리합니다.
TensorRT
TensorRT는 NVIDIA GPU에서 신경망 추론을 최적화하고 실행하는 도구입니다. 이 글에서는 ONNX와 결합해 Streaming Sortformer diarization 엔진을 구성하고, 컨테이너 시작 시 warmup을 수행해 평균 지연시간을 309.04ms에서 238.73ms로 낮추고 변동성도 줄였습니다.
시퀀스 배칭(Sequence Batching)
시퀀스 배칭은 하나의 스트리밍 세션에 속한 요청 조각을 동일한 모델 인스턴스로 라우팅해 순서와 상태를 유지하는 Triton 기능입니다. 글의 diarization 구성은 recording별 correlation ID를 사용해 청크를 라우팅하고, 600초가 지나면 세션을 자동 만료시킵니다.

코드 예제

text
Triton config
├── server.py # FastAPI gateway (OpenAI-compatible API)
└── triton_model_repo/
    └── parakeet_asr/
        ├── config.pbtxt # Dynamic batching configuration
        └── 1/model.py # Python backend - direct forward pass

FastAPI 게이트웨이와 Triton 모델 저장소의 기본 파일 구조를 나타냅니다.

bash
# Build the all-in-one image
docker build -f Dockerfile.single \
  --build-arg LOCAL_NEMO_FILENAME=your_model.nemo \
  -t parakeet-mps:latest .

# Run with 4 MPS instances (25% SM each) on a single GPU
docker run --gpus all --shm-size=2g \
  -e MPS_INSTANCE_COUNT=4 \
  -p 8002:8002 \
  parakeet-mps:latest

Fine-tuned NeMo checkpoint를 포함한 컨테이너 이미지를 만들고 GPU 하나에서 MPS 인스턴스 4개를 실행합니다.

기술

  • NVIDIA MPS
  • NVIDIA Triton Inference Server
  • Amazon EC2
  • NVIDIA L40S
  • g7e.4xlarge
  • g6e.4xlarge
  • NVIDIA Parakeet TDT 0.6B V2
  • NVIDIA Streaming Sortformer 4-speaker v2
  • TensorRT
  • ONNX
  • FastAPI
  • torchcodec
  • Prometheus
  • Docker
  • Amazon ECR
  • Amazon CloudWatch
  • Amazon EBS
  • Amazon S3

활용 사례

  • 임상 상담 음성의 자동 전사
  • 다중 화자 임상 녹음의 diarization
  • 낮은 요청별 GPU 사용률과 엄격한 지연시간 SLA를 가진 ASR 서비스
  • NVIDIA GPU에서 Triton 기반 encoder-decoder 모델 서빙
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 28.수집 2026. 08. 28.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.