재현성

재현성 (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)