동적 배치 크기¶
개요¶
서빙 중에는 decode 배치의 요청 수가 달라질 수 있습니다. 여러 배치 크기를 미리 준비하면 엔진이 현재 배치에 맞는 크기를 사용하므로, 항상 최대 배치 크기를 사용할 때보다 패딩을 줄일 수 있습니다.
vllm과 transformers(optimum) model implementation 모두 이 방식을 지원합니다. 설정 방법은 model implementation에 따라 다릅니다. vllm은 decode_batch_bucket_* 옵션을, transformers(optimum)은 optimum_overrides["decoder_batch_sizes"]를 사용합니다. 각 구현의 설정 방법은 아래 섹션에서 설명합니다.
vllm model implementation¶
Bucket 크기 설정¶
Decode 단계에서 사용할 배치 크기를 bucket이라고 부릅니다. 크기를 자동 생성하거나 직접 지정할 수 있습니다. 최대 bucket 크기는 max_num_seqs를 pipeline parallel 크기로 나눈 값입니다. 기본적으로 --rbln-decode-batch-bucket-limit이 1이므로, 엔진은 최대 배치 크기와 같은 크기의 bucket 하나를 생성합니다. 예를 들어 최대 배치 크기가 8이고, --rbln-decode-batch-bucket-strategy가 exponential, --rbln-decode-batch-bucket-step이 2, --rbln-decode-batch-bucket-limit이 4이면, 엔진은 크기가 8, 4, 2, 1인 bucket 네 개를 생성합니다.
옵션별 상세 설명과 제약 조건은 설정 가이드에서 확인할 수 있습니다.
설정 예시¶
자동 생성¶
8에서 시작해 절반씩 줄인 bucket 네 개(8, 4, 2, 1):
직접 지정¶
Bucket 크기를 1, 4, 8로 직접 지정하는 예시입니다:
이 설정에서는 decode 요청이 3개이면 배치 크기 4로, 5개이면 배치 크기 8로 패딩됩니다.
transformers(optimum) model implementation¶
model_impl="transformers"로 설정하고, additional_config["optimum_overrides"]["decoder_batch_sizes"]에 디코더 배치 크기를 지정합니다. 아래 예시는 엔진 시작 시 배치 크기 1, 4, 8에 해당하는 디코더 그래프를 컴파일합니다.
Note
- 모든 값은
max_num_seqs이하여야 합니다. - 배치 크기의 입력 순서는 상관없습니다. 목록에
max_num_seqs가 없으면 자동으로 추가됩니다. - 사전 컴파일 모델이라면 컴파일 단계에서 디코더 배치 크기를 설정해야 합니다. 이 옵션으로 이미 컴파일된 모델의 배치 크기를 변경할 수는 없습니다.