pile·
AI / ML·스캐터랩스캐터랩 (이루다)·

AWS Inferentia를 이용한 모델 서빙 비용 최적화: 모델 서버 비용 2배 줄이기 2탄

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 배포와 부하 검증까지 어떤 게이트가 필요한지 보여준다.
스캐터랩
스캐터랩 (이루다) 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. AI / ML·LY CorporationLY Corporation·

    Grafana에서 자연어로 장애 원인을 분석하기: LLM 에이전트 기반 SRELens 개발기

    LY Corporation Home SRE 팀이 장애 분석 시 메트릭·로그·트레이스가 각각 다른 화면에 흩어져 있는 문제를 해결하기 위해 Grafana 플러그인 SRELens를 개발했다. SRELens는 LLM 에이전트가 자연어 질의를 받아 실제 관측성 데이터를 조회하고, 근거와 함께 장애 원인 후보를 정리해 주는 도구다. LGTM-P 스택(Loki·Grafana·Tempo·Mimir·Pyroscope)과 FlavaMCP 게이트웨이를 통합해 단일 채팅 인터페이스에서 멀티시그널 분석이 가능하다.

    #llm-app#mcp#observability+2