배치 불변성

배치 불변성 (Batch Invariance)

배치 불변성(batch invariance)은 배치 구성이 샘플링 결과에 영향을 주지 않아야 한다는 vLLM의 개념이에요. 즉 개별 요청의 출력 텍스트가 자기 자신의 시퀀스에만 의존해야 하고, 같은 배치에 있는 다른 요청(그 개수나 순서)에는 의존해서는 안 된다는 원칙이에요. 실제로 vLLM은 최근 대부분의 vLLM 릴리스에서 배치 불변성 파이프라인 테스트를 통과했지만, 모든 시나리오에서 완전히 보장되지는 않아요.

이 문서에서는 배치 불변성이 vLLM에서 어떻게 동작하는지, 그리고 배치 불변성을 깨뜨릴 수 있는 것들에 대해 설명할게요. 통계적 이상 징후나 출력 이상을 조사할 때 도움이 될 거예요.

표현: 출력 텍스트 불변성

배치 불변성은 여러 가지 방식으로 표현될 수 있는데, 여기서는 출력 텍스트 불변성(output text invariance)을 쓸 거예요. 이것의 정의는 다음과 같아요.

모든 요청에 대해, 어떤 두 배치 B₁B₂도 그 출력 텍스트가 같다. 여기서 배치는 요청 시퀀스로 모델링되고, 두 배치는 동일한 요청 집합을 가지며 다른 메타데이터(요청 순서, 배치 내 다른 요청의 존재 여부, 스케줄링 슬롯, 배치 크기)는 다를 수 있다.

요컨대 각 요청의 출력이 배치의 다른 요청으로부터 독립적이어야 한다는 뜻이에요.

배치 불변성은 사용자 편의 문제이기도 해요. 배치 불변성이 깨지면 이상한 사용자 보고가 생길 수 있어요. 예를 들어 같은 프롬프트를 두 번 제출했거나 온라인 배치 서빙을 쓰는데, 출력이 만든 요청마다 다르게 보일 수 있어요. 대체로 vLLM은 배치 불변성을 보장하려고 노력하지만, 항상 그런 건 아니에요.

배치 불변성을 깨뜨릴 수 있는 것들

배치 불변성을 깨뜨릴 수 있는 요인은 다양해요. 이것들은 적용된 코드가 개선될수록 사라지거나, vLLM에서 근본적으로 지원되지 않아 영구적일 수 있어요. 이 섹션에서는 근본적으로 지원되지 않는 것들과 관련 디자인 결정을 중점적으로 살펴볼게요.

이 섹션에서 다루는 항목들:

  • 논-그리디 샘플링 쿼리와 관련된 Magnitude-based 로짓 프로세서와 Min-P
  • 대부분의 랜덤 샘플링 정규화에서 쓰이는 최종 확률 정규화(final probability normalization)
  • 배치 내 요청 간 상호작용을 만드는 로짓 프로세서

Magnitude-based 로짓 프로세서와 Min-P

Min-P는 요청 로짓에서 신뢰 수준을 해석하는 데 쓰는 로짓 프로세서예요. 구체적으로, Max Probability(즉 소프트맥스/로짓 확률 분포의 최고 확률)가 scaling_factor * maximum_logit_probability 미만인 서브셋의 로짓을 제거해요. 여기서 maximum 로짓 확률은 일반적으로 배치 레벨로 계산돼요.

배치 레벨 최대화는 모델 출력 로짓 분포의 피크가 배치마다 다를 수 있다는 점 때문에 근본적으로 배치 불변성이 아니에요. 예를 들어 한 배치에서 다른 요청이 더 높은 로짓 피크를 가질 수 있어서, 요청 자체의 확률 분포가 아닌 배치 최대값으로 정규화하게 되죠. 이런 경우 요청이 배치 구성에 따라 다르게 마스킹될 수 있어요.

Min-P가 유일한 magnitude-based 로짓 프로세서는 아니지만, vLLM 로짓 프로세서 중에서는 가장 흔하고 널리 알려진 예라서 여기서 예시로 사용해요. 사용자가 커스텀 로짓 프로세서를 등록하는 경우, 실제 사용 전에 배치 불변성 요구 사항을 확인해야 해요.

최종 확률 정규화 (Final Probability Normalization)

두 번째로, 최종 확률 정규화가 입력 로짓(유한 범위의 크기, 보통 [0, 1] 범위로 정규화)과 비교해 상당히 다양한 동작을 가질 수 있어서 배치 불변성을 깨뜨릴 수 있어요.

예를 들어 상대 위치에 따라 텍스트를 다르게 다루고 싶다면 출력 분포를 직접 바꿔야 해요. 그러나 로짓 프로세서는 앞서 설명한 것처럼 (num_requests, vocab_size) 모양으로 벡터화되어 있어서, 이러한 상대 위치 기반 처리는 본질적으로 배치 불변성이 아니에요. 요청 간 상호작용을 만드는 로짓 프로세서를 사용하게 되면, 요청의 위치(요청이 배치의 어떤 행에 있느냐)에 따라 샘플링 결과가 달라질 수 있어요.

로짓 프로세서가 배치에 미치는 영향

마지막으로, 배치 요청 특성 상 몇 가지 로짓 프로세서는 배치 불변성을 깨뜨릴 수 있어요. 특히 요청 '직렬성(serializability)'을 깨뜨리는 로짓 프로세서 즉, 요청 간 상호작용을 수반하는 로짓 프로세서는 근본적으로 배치 불변성이 아니에요. 예를 들어 (승인된/거부된) 이전 요청의 특정 위치로 텍스트를 조작하는 로짓 프로세서나, 거부된 내용을 다시 검사하며 반복하는 로짓 프로세서가 여기 해당돼요.

이런 로짓 프로세서는 요청이 배치에서 어디에 있는지에 따라 샘플링 결과를 바꾸기 때문에, 요청이 다른 배치에 있다는 이유만으로 원하는 방식으로 동작하지 않을 수 있어요. vLLM은 이런 사례들을 배치 불변성을 깨뜨리는 요소로 문서화하고 있어요.

더 알아보기