콘텐츠로 이동

동적 배치 크기

개요

서빙 중에는 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 네 개를 생성합니다.

옵션별 상세 설명과 제약 조건은 설정 가이드에서 확인할 수 있습니다.

플래그 기본값 용도
--rbln-decode-batch-bucket-strategy exponential 생성 전략: exponential, linear, manual
--rbln-decode-batch-bucket-limit 1 생성할 bucket의 최대 개수
--rbln-decode-batch-bucket-min 1 생성할 bucket 크기의 하한
--rbln-decode-batch-bucket-step 2 나눗셈 인수 또는 뺄 값
--rbln-decode-batch-bucket-manual-buckets [] manual에서 사용할 bucket 크기 목록

설정 예시

자동 생성

8에서 시작해 절반씩 줄인 bucket 네 개(8, 4, 2, 1):

1
2
3
4
5
6
vllm serve meta-llama/Meta-Llama-3-8B-Instruct \
  --model-impl vllm \
  --max-model-len 8192 \
  --block-size 8192 \
  --max-num-seqs 8 \
  --rbln-decode-batch-bucket-limit 4

직접 지정

Bucket 크기를 1, 4, 8로 직접 지정하는 예시입니다:

1
2
3
4
5
6
7
vllm serve meta-llama/Meta-Llama-3-8B-Instruct \
  --model-impl vllm \
  --max-model-len 8192 \
  --block-size 8192 \
  --max-num-seqs 8 \
  --rbln-decode-batch-bucket-strategy manual \
  --rbln-decode-batch-bucket-manual-buckets 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가 없으면 자동으로 추가됩니다.
  • 사전 컴파일 모델이라면 컴파일 단계에서 디코더 배치 크기를 설정해야 합니다. 이 옵션으로 이미 컴파일된 모델의 배치 크기를 변경할 수는 없습니다.
from vllm import LLM

llm = LLM(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    model_impl="transformers",
    max_model_len=8192,
    block_size=8192,
    max_num_seqs=8,
    additional_config={
        "optimum_overrides": {
            "decoder_batch_sizes": [1, 4, 8],
        },
    },
)