AWS Inferentia를 실제 모델 서빙에 도입하며 정합성 검증, tokenizer 분리, Neuron compile, TensorFlow Serving 컨테이너, EKS 배포와 부하 테스트를 거친 전 과정을 설명한다. KLUE RoBERTa 모델에서 GPU와 동일한 이진 판정을 확인하고, 최종적으로 g4dn.xlarge 대비 처리량은 최대 2.6배, 비용은 최대 5.7배 개선했다.
핵심 포인트- Inferentia는 BF16·FP16 행렬 곱 결과를 FP32로 누적해 메모리와 속도를 개선하지만 가수부 정밀도 손실은 실제 태스크로 검증해야 한다.
- KLUE STS 519개 문장 쌍에서 GPU와 Inferentia의 이진 판정 불일치는 0건이었고 logit 차이 평균은 0.000946이었다.
- Neuron이 SentencePiece op를 지원하지 않아 tokenizer를 FastAPI 비동기 전처리 서버로 분리했다.
- Neuron compile된 SavedModel과 TensorFlow Serving 전용 Docker 이미지를 만들고 EKS의 Inf1 node group에 배포했다.
- Dynamic batching과 Locust 부하 테스트를 거쳐 RoBERTa-base 서버에서 최대 약 48 RPS를 확인했다.
상세 정리- 정밀도 특성: BF16은 FP32와 같은 8비트 지수부와 7비트 가수부를 써 표현 범위는 유지하면서 메모리는 절반으로 줄인다.
- 검증 필요성: Neuron은 FP32 모델을 BF16으로 자동 casting하므로 속도와 정확도 절충이 생긴다. 컴파일 성공만으로 제품 적용을 결정하지 않았다.
- 실험 구성: KLUE STS로 fine-tuning한 `klue/roberta-base`를 g5.xlarge GPU와 inf1.xlarge에서 비교했다. sequence length는 128로 고정하고 짧은 입력은 0 padding했다.
- 정합성 결과: 519개 DEV pair의 0·1 결과는 모두 같았다. logit 차이는 최대 0.004072, 최소 0.000005, 평균 0.000946이었다.
- 조절 옵션: Neuron compiler의 fast-math 옵션으로 transpose와 casting 전략을 바꿔 속도·정합성 균형을 조절할 수 있다.
- tokenizer 분리 이유: SavedModel graph 안의 SentencePiece가 실행될 때 가속기가 쉬고, Neuron compile도 해당 op를 지원하지 않았다.
- 전처리 서버: FastAPI가 문자열을 token으로 바꾸고 aiohttp로 모델 서버를 호출한다. 응답 대기 중 다른 요청을 처리하도록 비동기로 구현했다.
- 언어 선택: Go·C++가 더 빠를 수 있지만 연구 조직의 Python 전후처리 코드와 유지보수성을 맞췄다. 측정상 추가 지연도 크지 않았다.
- 모델 저장: `tensorflow.neuron.trace`로 고정 shape 예시 입력을 compile하고 원하는 `input_ids`, `attention_mask` 이름을 가진 signature와 함께 SavedModel로 저장했다.
- 전용 이미지: Ubuntu 기반 Dockerfile에 Neuron tools와 `tensorflow-model-server-neuron`을 설치하고 `/dev/neuron0` device를 넘겨 실행한다.
- EKS 준비: tokenizer와 serving 이미지를 ECR에 push하고, compiled model과 model·batching config를 S3에 저장한다.
- batching 설정: 최대 batch 64, timeout 1000µs, batch thread 4를 지정해 Inferentia throughput을 높였다.
- Deployment: 모델·tokenizer를 같은 pod의 두 container로 배치하고 Neuron resource limit, Inf1 node selector, readiness·liveness probe를 설정했다.
- 부하 시험: Locust에서 사용자 50명, 초당 1명 증가 조건으로 RPS와 응답 시간을 측정해 최대 약 48 RPS를 확인했다.
- 비용 결과: RoBERTa-base 기준 g4dn.xlarge보다 처리량 최대 2.6배, 비용 최대 5.7배 절감 가능성을 확인했다.
왜 읽나전용 AI 가속기를 도입할 때 단가 비교를 넘어 정합성, 지원 op, 전처리 분리, Kubernetes 배포와 부하 검증까지 어떤 게이트가 필요한지 보여준다.