Inference Server - Triton
기술세미나 리뷰
Inference Server - Triton
Triton Inference Server architecture
- 목표
- ML/DL 배포 서빙 간소화 및 최적화
- 아키텍처
- 애플리케이션, 클라이언트, 서버 ..
- 특징
- NVIDIA GPU 사용 서버/모델 최적화
- TensorRT로 변환해서 사용하는 것을 권장 (다른 형태의 모델도 가능)
- 자체 helth check metric 지원
스케줄링 방식
- 사용자 요청 단위 == 시퀀스
Direct
- 시퀀스의 모든 추론 요청이 동일한 모델의 인스턴스, 배치슬롯으로 라우팅 됨
-
요청을 한번에 보낼때 사용하는 것이 좋을 것 같음
- 과정
- 사용자로부터 추론 입력
- 시퀀스 Bather에 요청 입력
- 모델에 적합한 형태로 추론이 입력됨
- 시퀀스 하나 단위가 인스턴스와 슬롯에 할당됨. <- 뭘까
- 묶어서 보내는 경우에 GPU를 max로 채워서 했을 때 속도 저하?
- 모델별로 다름
- 결과를 바로 안보내주고 묶어서
Oldest
-
시퀀스 내부 여러 단위를 일괄적으로 처리하는 것이 아니라 쪼개서 처리
- 과정
- 사용자부터 추론 입력
- 추론 요청 온 순서대로 모델에 적합한 형태로 추론 입력됨
- 순서대로 추론 결과가 도출됨
- 요청을 보낼때 얼마 간격으로 다음 요청을 보낼지 설정 가능
Metrics
-
시간이 지남에 따라 변화하는 데이터를 의미
- 활용 가능 데이터
- 추론 요청 횟수
- cpu 사용량
- gpu 사용량
- 누적 추론 시간
- Prometeus
- 데이터 저장 서버의 역할
- Grafana
- 시각화 대시보드 역할
TIS 생태계
- 클라이언트
- 간단한 웹서버로 구현할 수 있음
- 모델 분석기
- 모델을 분석해 최적의 추론 파라미터를 도출할 수 있음 (대기시간 길어도 단일 시간이 짦은 것이 좋은지, 한번에 하는 것이 좋은지 인간이 판단하여 결정)
- 모델 네비게이터
- 프레임워크로 개발한 모델을 TensorRT로 변환하고 테스트 기능 제공
- 자동화 잘 되지 않아 사용할때 주의
- pytriton
- API를 이용해 간단하게 트라이톤 사용 가능
샘플 설명
- 트라이톤 인퍼런스 서버에서 별개의 환경을 설정하는 방법
- 환경 분리하도록 만들어서 모델처럼 사용
- 구조
1 2 3 4 5 6
model_repo/ model_name/ config.pdtxt model_version/(무조건 숫자로) model.py (이름 변경 불가능, 모델 최초 실행 파일) ...
-
config.pbtxt
- model.py 구조
1 2 3 4
class TritonPythonModel: def initialize(self, args): ... def
- 앙상블 모델
- 개별 모델 생성
TIS Python 환경 분리
- conda 환경 생성하고 설치도 conda로 설치
- 콘다팩
- 가상환경 압축해서 폴더 자체를 넣어버리는 방식
QnA
- 모델 레포 관리
- 모델을 업데이트 되었는지 확인해서 자동으로 업데이트 되도록 인퍼런스 서버가 모델을 띄우는 형태
- 재실행 하는 상황에서
- 기존 실행 프로세스 끝나고 내릴 수 있는지. 설정 가능
- init 할때 모델을 계속 띄워놓고 실행할 수 있음
- 클라이언트에서 모델을 올려놓고 내려놓고 할 수 있음
- MLFlow에서 모델 성능 관리하고 -> 에어플로우에서 바꿔끼는 형태로 …
-
model -> 꼭 AI 모델일 필요는 없음
- 환경을 한번에 가지고 있으면.. 무겁지 않을까?
- 모델을 사용하지 않는 것들까지 올릴 필요가 없어보임.
- “추론”을 하기 위한것이라면…
이 기사는 저작권자의
CC BY 4.0
라이센스를 따릅니다.