자주 묻는 질문

자주 묻는 질문 (Frequently Asked Questions)

vLLM 사용 시 흔히 묻는 질문과 답변을 모았습니다. 여러 모델을 한 포트에서 서빙하는 방법, 오프라인 추론용 임베딩 모델 선택, 프롬프트 출력의 실행 간 변동 등 실무에서 자주 부딪히는 주제를 다룹니다.

출처: 문서

본문

Q: OpenAI API를 사용해 단일 포트에서 여러 모델을 서빙하려면 어떻게 하나요?

A: OpenAI 호환 서버로 한 번에 여러 모델을 서빙하는 것을 말씀하시는 거라면, 현재는 지원되지 않습니다. 서버의 여러 인스턴스(각각 다른 모델을 서빙)를 동시에 실행하고, 들어오는 요청을 올바른 서버로 라우팅하는 또 다른 레이어를 두면 됩니다.

Q: 오프라인 추론 임베딩에는 어떤 모델을 쓰나요?

A: e5-mistral-7b-instructBAAI/bge-base-en-v1.5를 시도해 볼 수 있습니다. 더 많은 모델은 여기에 나열되어 있습니다.

히든 스테이트를 추출해 vLLM은 Llama-3-8B, Mistral-7B-Instruct-v0.3 같은 텍스트 생성 모델을 자동으로 임베딩 모델로 변환할 수 있지만, 이들은 임베딩 작업에 특화된 모델보다 성능이 떨어질 것으로 예상됩니다.

Q: vLLM에서는 프롬프트의 출력이 실행 간에 달라질 수 있나요?

A: 네, 달라질 수 있습니다. vLLM은 출력 토큰의 안정적인 로그 확률(logprobs)을 보장하지 않습니다. logprobs의 변동은 Torch 연산의 수치 불안정성이나, 배칭이 바뀔 때 배치된 Torch 연산의 비결정적 동작 때문에 발생할 수 있습니다. 자세한 내용은 Numerical Accuracy 섹션을 참고하세요.

vLLM에서 같은 요청도 다른 동시 요청, 배치 크기 변화, speculative decoding의 배치 확장 같은 요인으로 인해 다르게 배칭될 수 있습니다. 이런 배칭 변화는 Torch 연산의 수치 불안정성과 결합되어 각 단계에서 logit/logprob 값이 약간 다르게 만들 수 있습니다. 이러한 차이는 누적되어 결국 다른 토큰이 샘플링될 가능성이 있습니다. 일단 다른 토큰이 샘플링되면 더 큰 발산이 일어날 가능성이 높습니다.

완화 전략 (Mitigation Strategies)

  • 더 나은 안정성과 낮은 분산을 위해 float32를 사용하세요. 메모리를 더 요구한다는 점에 주의하세요.
  • bfloat16을 사용한다면 float16으로 전환하는 것도 도움이 될 수 있습니다.
  • 요청 시드(seed)를 사용하면 temperature > 0에서 더 안정적인 생성에 도움이 되지만, 정밀도 차이로 인한 불일치가 여전히 발생할 수 있습니다.

더 알아보기 (Learn more)