事情本身不复杂,线索都在日志里。用文本生成推理容器部署模型,发一段 3000 token 的输入,返回 422,提示 input length exceeds maximum allowed 1024 tokens。
第一反应是「网关层做了截断,实际到达服务的长度异常」,验证下来不成立。
原因不止一个,得分开看。启动时 max-input-tokens 用的是默认保守值。还有一种是总长度限制被 max-total-tokens 挤压。
另外,批处理把多条拼在一起,超过了单条限制。
第一件事是启动时放宽输入上限并留出输出空间
docker run --gpus all -p 8080:80 ghcr.io/huggingface/text-generation-inference:2.0 --model-id Qwen/Qwen2.5-7B-Instruct --max-input-tokens 4096 --max-total-tokens 8192
接着确认服务启动参数已生效
curl http://localhost:8080/info
显存不足时下调总长度而不是硬顶
docker run --gpus all -p 8080:80 ghcr.io/huggingface/text-generation-inference:2.0 --model-id Qwen/Qwen2.5-7B-Instruct --max-input-tokens 3072 --max-total-tokens 6144
末了用接口做一次边界长度验证
curl http://localhost:8080/generate -d '{"inputs":"你好","parameters":{"max_new_tokens":32}}'
这类问题以前遇到过,但这次的触发条件和上次不一样。
恢复的判定其实很直接。长输入请求返回 200,输出完整不被截断,服务日志里不再出现长度超限的 422。
补一句。max-input-tokens 与 max-total-tokens 是两套约束,前者管输入后者管输入加输出,只调一个常常还是报错。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。