레이트 리미터
레이트 리미터 (Rate Limiter)
레이트 리미터는 Triton이 모델 인스턴스에 요청을 스케줄링하는 비율을 관리해요. 레이트 리미터는 Triton에 로드된 모든 모델에 걸쳐 동작해 *모델 간 우선순위 부여(cross-model prioritization)*를 가능하게 해요.
레이트 제한이 없으면(--rate-limit=off) Triton은 모델 인스턴스가 가용해지는 즉시 요청(또는 동적 배치를 쓸 때는 요청 집합)의 실행을 스케줄링해요. 이 동작은 보통 성능에 가장 적합해요. 그러나 모든 모델을 동시에 실행하면 서버에 과도한 부하가 걸리는 경우가 있을 수 있어요. 예를 들어 일부 프레임워크의 모델 실행은 메모리를 동적으로 할당해요. 그런 모델을 전부 동시에 실행하면 시스템이 메모리 부족으로 갈 수 있어요.
레이트 리미터는 일부 모델 인스턴스의 추론 실행을 연기해서 전부 동시에 실행되지 않게 해줘요. 모델 우선순위는 다음에 어떤 모델 인스턴스를 스케줄링할지 결정하는 데 쓰여요.
레이트 리미터 사용하기 (Using Rate Limiter)
레이트 제한을 켜려면 tritonserver를 시작할 때 --rate-limit 옵션을 설정해야 해요. 자세한 내용은 tritonserver --help가 출력하는 옵션 사용법을 참고하세요.
레이트 리미터는 레이트 리미터 구성에서 설명한 대로 각 모델 인스턴스에 주어진 레이트 리미터 구성에 의해 제어돼요. 레이트 리미터 구성은 instance group이 정의한 모델 인스턴스의 resources와 priority를 포함해요.
리소스 (Resources)
리소스는 고유 이름과 리소스 복사본 수를 나타내는 count로 식별돼요. 기본적으로 모델 인스턴스는 레이트 리미터 리소스를 사용하지 않아요. resource/count를 나열하면 모델 인스턴스가, 실행이 허용되기 전에 모델 인스턴스 디바이스에 그만큼의 리소스가 필요하다는 것을 나타내요. 실행 중에 지정된 수의 리소스가 모델 인스턴스에 할당되고 실행이 끝나면 해제돼요. 가용한 리소스 복사본 수는 기본적으로 그 리소스를 나열하는 모든 모델 인스턴스 중 최댓값이에요. 예를 들어 세 개의 로드된 모델 인스턴스 A, B, C가 단일 디바이스에 대해 다음 리소스 요구사항을 지정한다고 가정할게요:
A: [R1: 4, R2: 4]
B: [R2: 5, R3: 10, R4: 5]
C: [R1: 1, R3: 7, R4: 2]
기본적으로 그 모델 인스턴스 요구사항에 기반해 서버는 다음 리소스들을 표시된 복사본 수로 만들 거예요:
R1: 4
R2: 5
R3: 10
R4: 5
이 값들은 모든 모델 인스턴스가 성공적으로 스케줄링될 수 있도록 보장해요. 리소스의 기본값은 --rate-limit-resource 옵션으로 커맨드라인에 명시적으로 줘서 덮어쓸 수 있어요. tritonserver --help가 더 자세한 사용법을 제공해요.
기본적으로 가용한 리소스 복사본은 디바이스별이고, 모델 인스턴스의 리소스 요구사항은 그 모델 인스턴스가 실행되는 디바이스와 연결된 해당 리소스에 대해 적용돼요. --rate-limit-resource는 사용자가 서로 다른 디바이스에 서로 다른 리소스 복사본을 제공하게 해줘요. 레이트 리미터는 global 리소스도 처리할 수 있어요. 디바이스별로 리소스 복사본을 만드는 대신 global 리소스는 시스템 전체에 하나의 복사본만 있어요.
레이트 리미터는 리소스가 global인지 여부를 결정하기 위해 모델 구성에 의존해요. 모델 구성에서 그들을 지정하는 방법에 대한 자세한 내용은 resources를 참고하세요.
두 디바이스 머신에서 --rate-limit-resource=R1:10 --rate-limit-resource=R2:5:0 --rate-limit-resource=R2:8:1 --rate-limit-resource=R3:2로 실행하는 tritonserver의 경우 가용한 리소스 복사본은 다음과 같아요:
GLOBAL => [R3: 2]
DEVICE 0 => [R1: 10, R2: 5]
DEVICE 1 => [R1: 10, R2: 8]
여기서 R3는 로드된 모델 중 하나에서 global 리소스로 나타나요.
우선순위 (Priority)
리소스가 제약된 시스템에서는 모델 인스턴스들이 자기 추론 요청을 실행하기 위해 리소스를 두고 경쟁하게 돼요. 우선순위 설정은 다음 실행에 어떤 모델 인스턴스를 선택할지 결정하는 데 도움을 줘요. 자세한 내용은 priority를 참고하세요.
더 알아보기 (Learn more)
- 모델 구성 (Model Configuration) — 레이트 리미터 구성·인스턴스 그룹
- 동시 모델 실행 (Concurrent Model Execution) — 모델·스케줄러 유형