vllm [用法]:max_num_seqs 和 max_model_len 分别表示什么?

hsvhsicv  于 4个月前  发布在  其他
关注(0)|答案(4)|浏览(71)

你的当前环境

The output of `python collect_env.py`

你希望如何使用vllm?有人能帮我解释一下max_num_seqs和max_model_len这两个参数的作用吗?这两个参数在哪个阶段起作用?

当我设置以下引擎参数时:

{
  "model": "/model",
  "tensor_parallel_size": 8,
  "tokenizer_mode": "auto",
  "trust_remote_code": true,
  "dtype": "auto",
  "gpu_memory_utilization": 0.95,
  "max_num_seqs": 256,
  "max_model_len": 8192,
  "enforce_eager": true
}

模型仍然可以处理大约16291的输入长度,这是通过len(prompt)计算得出的。

bnlyeluc

bnlyeluc1#

减少max_num_seqs或max_num_batched_tokens。这可以减少批处理中的并发请求数量,从而需要更少的KV缓存空间。

--max-model-len
模型上下文长度。如果未指定,将从模型配置中自动推导出来。

w51jfk4q

w51jfk4q2#

https://docs.vllm.ai/en/latest/models/performance.html Decrease max_num_seqs or max_num_batched_tokens. This can reduce the number of concurrent requests in a batch, thereby requiring less KV cache space.
https://docs.vllm.ai/en/latest/models/engine_args.html --max-model-len Model context length. If unspecified, will be automatically derived from the model config.
Thank you for your reply. If max-model-len is set to 8192, is the latest 8192 characters always set as context?
That is, no matter how long the user input is, vllm always intercepts the length of the max-model-len processing behind it.

w8f9ii69

w8f9ii693#

从我的理解来看,是的。当超过最大模型长度时,它会输出一个错误。在聊天场景中需要截断。
如果你的内存受限且没有达到最大模型长度,那么有很多方法可以降低内存使用:
--enforce-eager (禁用CUDA图) 降低tokens/s
--kv-cache-dtype fp8 (可以增加kv缓存,但在我的情况下,它会显著降低速度) 降低tokens/s,但可能会影响输出。
--max_num_seqs (降低它可以在节省内存方面给你带来优势) 可以并行运行多少个请求

t3psigkw

t3psigkw4#

从我的理解来看,是的。当输入长度超过max-model-len时,会输出错误。在聊天场景中可能需要截断。

如果你的内存受限且没有达到max-model-len,有很多方法可以降低内存使用:

  1. --enforce-eager(禁用CUDA图)-- 降低tokens/s
  2. --kv-cache-dtype fp8(可以增加kvcache,但在我的情况下速度会显著降低)-- 降低tokens/s,但可能会影响输出
  3. --max_num_seqs(降低它可以在节省内存方面给你带来优势)-- 可以并行运行多少个请求

我观察到的是,如果用户的输入长度超过max-model-len,不会报告错误。在这种情况下,你能提供一个错误信息吗?

相关问题