재현성
재현성 (Reproducibility)
vLLM은 성능을 위해 기본적으로 결과의 재현성을 보장하지 않습니다. 재현 가능한 결과를 얻으려면 오프라인 모드에서는 VLLM_ENABLE_V1_MULTIPROCESSING=0을 설정하거나 batch invariance를 활성화하고, 온라인 모드에서는 batch invariance만 활성화할 수 있습니다.
출처: 문서
본문
vLLM은 성능을 위해 기본적으로 결과의 재현성을 보장하지 않습니다. 재현 가능한 결과를 얻으려면:
- 오프라인 모드에서는
VLLM_ENABLE_V1_MULTIPROCESSING=0을 설정해 스케줄링을 결정적으로 만들거나, batch invariance를 활성화해 출력을 스케줄링에 둔감하게 만들 수 있습니다. - 온라인 모드에서는 batch invariance만 활성화할 수 있습니다.
예시: examples/features/batch_invariance/reproducibility_offline.py
경고
VLLM_ENABLE_V1_MULTIPROCESSING=0을 설정하면 사용자 코드(즉 LLM 클래스를 구성하는 코드)의 랜덤 상태가 변경됩니다.
참고
위 설정을 했더라도 vLLM은 같은 하드웨어와 같은 vLLM 버전에서 실행될 때만 재현성을 제공합니다.
전역 시드 설정 (Setting the global seed)
vLLM의 seed 파라미터는 다양한 난수 생성기의 랜덤 상태를 제어하는 데 사용됩니다.
특정 시드 값이 주어지면 random, np.random, torch.manual_seed에 대한 랜덤 상태가 그에 따라 설정됩니다.
기본 동작 (Default Behavior)
V1에서 seed 파라미터는 기본적으로 0이며 각 워커의 랜덤 상태를 설정합니다. 그래서 temperature > 0이어도 각 vLLM 실행의 결과가 일관되게 유지됩니다.
V1에서는 일부 워커가 speculative decoding 같은 워크플로우에서 같은 출력을 샘플링해야 하므로 시드를 지정하지 않을 수 없습니다. 자세한 내용은 Pull Request #17929를 참고하세요.
참고
사용자 코드(즉 LLM 클래스를 구성하는 코드)의 랜덤 상태는 워커가 사용자 코드와 같은 프로세스에서 실행될 때, 즉 VLLM_ENABLE_V1_MULTIPROCESSING=0일 때만 vLLM이 업데이트합니다.
기본적으로 VLLM_ENABLE_V1_MULTIPROCESSING=1이므로, 랜덤 상태에 의존하는 이후 연산을 실수로 결정적으로 만들 걱정 없이 vLLM을 사용할 수 있습니다.
더 알아보기 (Learn more)
- Batch Invariance — 스케줄링 둔감 출력
- 환경 변수 — vLLM 환경 변수
- 오프라인 추론 — LLM 클래스 사용