Files
enginex-qwen25-compat/README.md
刘宪东 fb5a163d07
Some checks failed
Build and verify Qwen2.5 compatibility engines / docker (push) Failing after 3m32s
Support MetaX and Vastai tokenizer compatibility images
2026-09-30 12:16:08 +08:00

64 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Qwen2.5 启动兼容引擎
这个[独立镜像仓库](https://dev.modelhub.org.cn/a4913994/enginex-qwen25-compat)沿用 [ModelHub A100 示例仓库](https://dev.modelhub.org.cn/zhengzhongwei/vLLM-Nvidia-A100-opt)
的方式:标签触发 `.gitea/workflows/docker-build-push.yml`,runner 检查元数据、构建并推送镜像,
最后调用 ModelHub 的 `image-verify` 接口注册验证。
当前为 A100 参考端、寒武纪 MLU370 x4/x8、沐曦 C500 和 Vastai VA16
构建四个镜像,五个 GPU 共用 `vllm_qwen25_compat` 框架名。基础镜像均来自
平台已有验证任务使用的版本;A100 沿用示例仓库的基础镜像。每个 GPU 的注册
与可用性仍以平台镜像验证结果和 `frameworks` 接口回读为准。
## 修复范围
- 将列表型 `extra_special_tokens` 合并到 `additional_special_tokens`,解决
Transformers 调用 `.keys()` 时的崩溃。
- 对明确写成 `TokenizersBackend` 且带 `tokenizer.json` 的仓库,改用
`PreTrainedTokenizerFast`。
- 对 `model_type=qwen2`、`eos_token=<|im_end|>` 且缺少聊天模板的模型,补充
简单的 Qwen ChatML 模板,避免 `/v1/chat/completions` 返回 400;已有独立
`chat_template.jinja` 或 `chat_template.json` 的模型不补写。
启动时在 `/tmp` 建立新视图,只重写 `tokenizer_config.json`。若基础镜像使用
`--tokenizer` 指向单独的临时目录(Vastai 的现有启动脚本如此),则修复实际加载的
tokenizer 目录并保留模型仓库的独立聊天模板,权重路径仍指向原模型;否则修复模型
视图。源模型不变。没有命中问题时直接调用原始 `vllm`。修复记录写在新视图的
`.modelhub-compat-report.json`,同时输出到容器日志。
这不能修复缺失权重、尺寸不匹配、Ascend 上持续出现的 0 分输出或平台评测超时。
尤其是分数为 0 的参考端与目标端必须分别排查;只换一个端的镜像不能保证过审。
## 本地验证
```bash
python -m unittest discover -s tests -v
python -m py_compile engine_compat.py
```
有对应镜像访问权限的 Docker 主机上再运行:
```bash
docker build --build-arg BASE_IMAGE=harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 \
-t qwen25-compat:a100 .
docker build --build-arg BASE_IMAGE=harbor.4pd.io/hardcore-tech/cambricon-mlu370-pytorch:v25.01-20260228 \
-t qwen25-compat:mlu370 .
docker build --build-arg BASE_IMAGE=harbor.4pd.io/modelhubxc/enginex-metax/vllm:0.9.1 \
-t qwen25-compat:metax .
docker build --build-arg BASE_IMAGE=harbor.4pd.io/modelhubxc/sunruoxi/enginex-vastai-vllm-vacc-fix-tokenizer:VVI-26.02 \
-t qwen25-compat:vastai .
```
## 用 runner 发布
1. 源码在公开仓库 `a4913994/enginex-qwen25-compat` 的 `main`;`v0.1.0`
已完成 A100/寒武纪镜像构建并提交镜像验证,验证结果须单独回读。
2. runner 使用 `DOCKER_REGISTRY`、`DOCKER_USERNAME`、`DOCKER_PASSWORD`、
`FIXED_TOKEN`;不要把凭证写进仓库。
3. 推送新的 `v*` 标签后,工作流依次跑单元测试、验证 GPU/任务元数据、构建与推送
镜像,并为五个 GPU 各发起一次镜像验证;接口业务码也会被检查。
4. 在“我的驱动列表”确认五个镜像验证通过,并检查新框架出现在对应 GPU 的
`frameworks` 接口中,再用少量已知缺陷模型做对照验证。
只有平台确认新框架可选且 A100 参考端实际使用新镜像后,才应让 `xc-agent` 把
列表型 `extra_special_tokens` 的模型路由到此框架。当前智能体继续预检并跳过它们。