자주 묻는 질문
자주 묻는 질문 (Frequently Asked Questions, FAQ)
vLLM을 쓰다 보면 "이건 지원되나?", "결과가 왜 매번 달라지지?" 같은 질문이 반복적으로 떠올라요. 이 문서는 vLLM 커뮤니티에서 자주 나오는 질문들과 그 답을 모아뒀어요.
출처: vLLM 공식 문서 — faq
여러 모델을 한 포트에서 서빙할 수 있나요? (OpenAI API)
Q: OpenAI API를 사용해 한 포트에서 여러 모델을 동시에 서빙할 수 있나요?
A: OpenAI 호환 서버로 여러 모델을 한 번에 서빙하는 것은 현재 지원되지 않아요. 대신 서버 인스턴스를 여러 개 실행하고(각각 다른 모델을 서빙), 들어오는 요청을 올바른 서버로 라우팅하는 또 다른 레이어를 두면 됩니다.
오프라인 추론 임베딩에는 어떤 모델을 쓰나요?
Q: 오프라인 추론 임베딩에는 어떤 모델을 쓰면 되나요?
A: e5-mistral-7b-instruct와 BAAI/bge-base-en-v1.5를 시도해 볼 수 있어요. 더 많은 모델은 여기에 나열되어 있습니다.
히든 스테이트를 추출하면 vLLM이 Llama-3-8B, Mistral-7B-Instruct-v0.3 같은 텍스트 생성 모델을 자동으로 임베딩 모델로 변환할 수 있지만, 임베딩 작업에 특별히 훈련된 모델보다는 성능이 떨어질 것으로 예상해야 해요.
출력이 실행마다 달라질 수 있나요?
Q: vLLM에서 프롬프트의 출력이 실행마다 달라질 수 있나요?
A: 네, 달라질 수 있어요. vLLM은 출력 토큰에 대해 안정적인 로그 확률(logprobs)을 보장하지 않습니다. Torch 연산의 수치적 불안정성이나, 배치가 바뀔 때 batched Torch 연산의 비결정적 동작 때문에 logprobs에 변동이 생길 수 있어요.
vLLM에서 같은 요청이라도 다른 동시 요청, 배치 크기의 변화, 추측 디코딩의 배치 확장 같은 요인 때문에 배치가 다르게 묶일 수 있어요. 이런 배치 변화는 Torch 연산의 수치적 불안정성과 결합해 매 단계의 logit/logprob 값을 조금씩 다르게 만들 수 있고, 그런 차이는 누적되어 결국 서로 다른 토큰이 샘플링될 수도 있습니다. 다른 토큰이 한 번 샘플링되면 이후 발산이 더 커질 가능성이 높아요.
완화 전략 (Mitigation Strategies)
- 안정성 향상과 분산 감소를 위해
float32를 사용하세요. 다만 이것은 더 많은 메모리를 요구합니다. bfloat16을 쓰고 있다면float16으로 전환하는 것도 도움이 될 수 있어요.temperature > 0에서 더 안정적인 생성을 위해 요청 시드(request seeds)를 사용하면 도움이 될 수 있지만, 정밀도 차이로 인한 불일치는 여전히 생길 수 있어요.