콘텐츠로 이동

모델 병렬화

개요

RBLN vLLM은 두 가지 모델 병렬화 방식을 제공합니다.

vLLM-수준 병렬화
프레임워크가 vLLM 표준 병렬화 파라미터에 따라 모델을 여러 워커 프로세스에 분산합니다.
Rebellions Scalable Design(RSD)
RBLN 컴파일러가 모델을 디바이스 간(User-level RSD) 또는 디바이스 내부의 칩렛 간(Internal RSD)으로 분할합니다.

기능별 지원 여부는 Feature Matrix의 병렬화 섹션에서 확인할 수 있습니다.

vLLM-수준 병렬화

Model implementation 지원

vLLM-수준 병렬화는 --model-impl vllm에서만 지원됩니다.

vLLM은 모델 실행을 여러 워커 프로세스에 분산하고, rbln-ccl을 통해 프로세스 간 통신을 조정합니다.

Rank는 병렬 실행에 참여하는 워커 프로세스를 식별합니다.

방식 파라미터 동작
Data parallelism(DP) --data-parallel-size 모델을 복제하여 요청을 독립적으로 처리합니다
Tensor parallelism(TP) --tensor-parallel-size 레이어 내부 연산을 rank 간에 분산합니다
Pipeline parallelism(PP) --pipeline-parallel-size 레이어를 순차적인 stage로 분할합니다
Expert parallelism(EP) --enable-expert-parallel Mixture-of-experts 레이어의 expert를 rank 간에 분할합니다

Tensor parallelism

TP는 레이어 내부 연산을 rank 간에 분산합니다. 각 rank는 rbln-ccl을 통해 중간 결과를 주고받습니다.

1
2
3
vllm serve <MODEL_ID> \
  --model-impl vllm \
  --tensor-parallel-size 4

Pipeline parallelism

PP는 모델 레이어를 순차적인 stage로 나누고 rank마다 하나씩 배정합니다.

각 pipeline stage는 최대 max_num_seqs // pipeline_parallel_size개의 시퀀스를 처리합니다. 처리 용량을 낭비하지 않으려면 max_num_seqs를 pipeline_parallel_size 이상의 배수로 설정하는 것을 권장합니다. 배수가 아닌 값을 지정하면 엔진이 경고를 출력합니다.

1
2
3
4
vllm serve <MODEL_ID> \
  --model-impl vllm \
  --pipeline-parallel-size 2 \
  --max-num-seqs 8

Data parallelism

DP는 모델을 여러 rank에 복제합니다. 각 복제본은 요청을 독립적으로 스케줄링합니다.

DP에서는 max_num_batched_tokens가 max_num_seqs의 배수여야 합니다. Padding된 토큰을 추적하려면 --rbln-use-moe-tokens-mask를 활성화된 상태로 유지해야 합니다. 이 옵션은 기본값으로 활성화되어 있습니다.

1
2
3
4
5
vllm serve <MODEL_ID> \
  --model-impl vllm \
  --data-parallel-size 4 \
  --max-num-seqs 8 \
  --max-num-batched-tokens 1024

Expert parallelism

EP는 MoE expert를 DP rank 간에 분산합니다.

DP와 마찬가지로, padding을 추적하려면 --rbln-use-moe-tokens-mask를 활성화된 상태로 유지해야 합니다.

1
2
3
4
5
6
vllm serve <MOE_MODEL_ID> \
  --model-impl vllm \
  --data-parallel-size 4 \
  --enable-expert-parallel \
  --max-num-seqs 8 \
  --max-num-batched-tokens 1024

Rebellions Scalable Design(RSD)

RSD에서는 RBLN 컴파일러가 모델 분할을 담당합니다. 컴파일러가 연산 그래프를 분할하고 필요한 통신 연산을 컴파일된 바이너리에 포함합니다.

분할 범위는 하드웨어와 model implementation에 따라 다릅니다. ATOM™의 transformers에서는 User-level RSD로 사용자가 지정한 수의 칩에 모델을 분할하며, 칩 하나를 NPU 디바이스 하나로 셉니다. Rebel100™에서는 두 model implementation 모두 Internal RSD로 NPU 카드 하나에 포함된 서로 연결된 칩렛 4개에 모델을 자동으로 분할합니다. 배경 설명은 RSD 개요에서 확인할 수 있습니다.

표기

  • ✅: 지원
  • ❌: 현재 미지원
  • —: 해당 없음
RSD 유형 항목 ATOM™ Rebel100™
Model implementation transformers transformers / vllm
User-level RSD 지원 여부 ✅ ❌
분할 범위 여러 칩 간 —
Internal RSD 지원 여부 — ✅
분할 범위 — 카드 내 칩렛 간

User-level RSD

ATOM™ + transformers

--rbln-num-devices-per-local-rank로 하나의 엔진 프로세스에서 사용할 ATOM™ 칩 수를 지정합니다.

1
2
3
vllm serve <MODEL_ID> \
  --model-impl transformers \
  --rbln-num-devices-per-local-rank 4

이 옵션은 카드 수가 아닌 칩 수를 지정합니다. RBLN-CA22 카드 한 장에는 칩 1개, RBLN-CA25 카드 한 장에는 칩 4개가 포함됩니다.

Internal RSD

Rebel100™ + transformers / vllm

두 model implementation 모두에서 컴파일러가 모델을 각 Rebel100™ 카드 내부의 칩렛 4개에 자동으로 분할합니다. 칩렛 간 분할에는 별도 사용자 설정이 필요하지 않습니다.