RJMSWD / QwenJev
git clone https://github.com/RJMSWD/QwenJev.git
对Qwen-3.5-4B这个视觉语言模型进行jev般改造,识别速度达到0.169秒/帧。切换其余Qwen模型直接可以按这个逻辑加速。
+0
stars, 24h · #29,544
+~0
stars, 7 days · #30,019
+104
stars, 30 days · #4,771
98
★ total
3
forks · 0 open issues
Star history (as recorded here)
LanguagePython
License—
Created2026-09-21 (1mo ago)
Last push1mo ago
Watchers0
OwnerUser
Links
- GitHub: github.com/RJMSWD/QwenJev
- Releases · Issues · Hacker News mentions
README excerpt
# Qwen Choice **简体中文** | English 基于 **Qwen3.5-4B** 的本地视觉判断工具。输入一张图片、一个问题和一组选项,通过一次模型前向计算,直接返回选项及其概率分布。 **单卡 RTX A6000 实测:完整请求中位数 169 ms,P95 为 174 ms。** 使用原始 BF16 权重,关闭思考,无训练或量化。 **切换其余Qwen模型直接可以按这个逻辑加速。** ## 示例 只回答一个问题:**图片中的客户消息属于哪类客服问题?** 选项为 `billing`(账单)、`technical`(技术)、`sales`(销售)和 `other`(其他)。 图片中的客户反映重复扣款,模型返回 `billing`。消息和图片均为虚构示例,问题与选项定义见 support_ticket.json。 ## 性能 以下为启用视觉与语言模型编译后的测量结果,日期为 2026-09-21。 | 指标 | 结果 | |---|---:| | 完整请求中位数 | **168.694 ms** | | 完整请求 P95(95 分位) | **173.989 ms** | | GPU 模型阶段中位数 | 137.378 ms | | 正式测量次数 | 30 | | 匹配示例预期答案 | 30 / 30 | 测量条件:单卡 RTX A6000、BF16、batch=1;一张 1280×720 图片、一个问题、四个选项。官方处理器默认设置得到 880 个视觉 token、989 个总输入 token。 - **完整请求**从内存中的 RGB 图片开始,到选项与概率可用;包含图片处理、分词、CPU→GPU 传输、模型计算和结果读取,使用 CUDA 同步边界计时。 - **GPU 模型阶段**在输入传输后、结果回传前用 CUDA 事件测量,包含视觉编码和语言模型,也可能包含主机提交算子间的等待。 - 模型加载、图片文件读取、编译、预热、独立输入校验和日志写入不计入稳定请求耗时。固定问题的文字模板提前准备;图片及模型输出每次重新计算。 - 测量前预热 5 次。编译准备与这 5 次预热合计约 14.1 秒,使用机器已有编译缓存;其他环境的启动时间可能不同。 基准脚本交替运行两种输入准备路径,各测 30 次;上表取结果中的 `profiles.fast`。原始证据:统计与校验、逐次记录、GPU 算子核查。 这是一个固定示例的延迟测量,30 次重复不构成通用准确率评测。返回概率是对给定选项分数做 softmax 归一化的结果,未经概率校准。编译可能造成细微数值变化,不保证逐位等价。 ## 工作方式 [code] - **直接判断**:用单 token 字母表示选项,一次前向取得全部候选分数,跳过逐 token 生成。保留原始输出层,仅计算最后一个位置。 - **快速算子**:使用 causal-conv1d、FLA gated delta rule、融合 gated RMSNorm,以及 PyTorch SDPA 调用的 FlashAttention;运行记录确认对应 GPU 内核已执行。 - **模型编译**:视觉编码器使用 `torch.compile`;通过 `--compile-language` 同时编译语言模型。允许计算图切分,并记录实际执行情况。 - **减少准备开销**:复用固定问题的文字模板,把诊断哈希放到独立校验中;较大输入使用固定内存与非阻塞传输。 不跨请求复用图片、视觉特征、模型答案或语言状态。每个实例顺序处理请求。 ## 安装 需要 NVIDIA CUDA GPU。实测环境为 Python 3.11、PyTorch 2.11.0+cu130、Transformers 5.13.1、FLA 0.5.2、Triton 3.6.0。 [code] `causal-conv1d` 的构建需匹配 PyTorch、CUDA 和 GPU 架构。实测使用 `1.7.0+cu13torch2.11sm86` 的本地构建;缺少必要快速算子时,程序会报错,不会静默切换到慢速实现。 ## 运行 使用 Hugging Face 模型: [code] 使用已有本地权重: [code] 输出目录必须尚不存在。运行后查看 `summary.json` 中的 `profiles.fast`,逐次输出保存在 `records.jsonl`。修改图片尺寸、问题或选项后,应重新测量。 ## 文件说明 | 文件 | 用途 | |---|---| | qwen_choice.py | 单图单问推理、答案分数读取、快速算子验证 | | qwen_choice_fast.py | 可复用的问题模板与输入准备 | | benchmark_fast.py | 语言模型编译、配对计时与输入一致性校验 | | examples/ | 虚构消息图片、问题与选项 | | requirements.txt | Python 依赖 | ## 来源 问题设计借鉴 Jev 的 Choice 模式与公开客服分类案例,详见 SOURCES.md。本项目在本地运行 Qwen,不调用 Jev API,不需要 TypeSafe 密钥,也不隶属于 TypeSafe。 模型权重从 Qwen/Qwen3.5-4B 单独获取,其许可遵循模型发布方的条款。