下班刚到家,其他部门的同事发来信息求助,部署满血版DeepSeek遇到报错,疑似上下文不够,但是上下文已经给到了32768,怎么回事呢?
他们目前的使用场景是直接使用Open-WebUI网页对话。按理说OpenWebUI的默认上下文才区区2k,甚至短的离奇,怎么会超过呢?具体情况还需看看报错内容。
报错如下:
机器配置
显卡H200 x8(每张141G显存)
内存1TB,
192核CPU x2
机器配置不低,应该是够用的。我之前只部署过int4的DeepSeek model,没有遇到这种问题。纯满血版目前手头没有显存支持,人又不在现场,我让他先发来部署命令瞅瞅吧。
他们的部署命令如下:
vllm serve /data4/deepseekR1 \
--block-size 32 \
--swap-space 24 \
--tensor-parallel-size 8 \
--max-model-len 32768 \
--max-num-batched-tokens 2048 \
--gpu-memory-utilization 0.92 \
--enforce-eager \
--enable-chunked-prefill \
--trust-remote-code
乍一看应该没问题,但是多出的几个参数配置看上去有点可疑,例如这个 --max-num-batched-tokens
带的2048值。我一般部署model从来不配置这个参数。其他还有几个我用不到的参数在里面,我直接建议他把那几个参数砍掉试一下先。
我的建议命令如下:
vllm serve /data4/deepseekR1 \
--tensor-parallel-size 8 \
--max-model-len 32768 \
--gpu-memory-utilization 0.95 \
--enforce-eager \
--trust-remote-code
等他们试验回复的时候,我又去vllm官方仓库瞅了一眼报错的scheduler.py的代码部分,代码报错的逻辑是这样的:
if num_prompt_tokens > min(
self.scheduler_config.max_model_len,
self.scheduler_config.max_num_batched_tokens):
logger.warning(
f"Input prompt ({num_prompt_tokens} tokens) is too long"
" and exceeds limit of "
f"{self.scheduler_config.max_model_len}")
也就是说它会取max_model_len
和max_num_batched_tokens
中的最小值去判定prompt长度是否非法。显然启动参数给了--max-num-batched-tokens 2048
会影响这里的判断。我又查了一下issue中有没有类似问题,还真发现一个issue,应该是一样的问题。我立马再发消息,建议他们如果不行的话加大max-num-batched-tokens
参数再试试。
最后终于回复了,朋友表示按照以上方案同时加大了max_model_len
和max_num_batched_tokens
修改启动参数后,目测是解决了问题。是否彻底解决还需要继续观察几天。
一切尽在掌握之中。夜色如水,继续陪娃读书。