Qwen3.8-27B IQ3_XXS 在16 GB Quadro上正确实现多层传输矩阵法:100分钟、3次压缩与108k输出令牌
摘要
一个高度量化的Qwen3.8-27B模型在16 GB Quadro GPU上运行,尽管经历了超过100分钟的广泛推理和调试,仍从零开始成功实现了正确的多层传输矩阵法。
https://preview.redd.it/i8rjx0ar5mlh1.png?width=2160&format=png&auto=webp&s=c2588bc7b2519ea71b176ca73faf566dfc585496 我想看看一个运行在旧款16 GB工作站GPU上的高度量化27B模型是否能完成超出常规编程演示的任务。快速傅里叶变换(FFT)似乎太简单,所以我要求它从零开始实现用于吸收性多层薄膜的相干光学传输矩阵法(TMM)。简而言之:实现很早就是正确的,但模型自己直到很久后才相信。随后,它花费了大部分剩余时间调试自己损坏的验证器。
硬件:NVIDIA Quadro RTX 5000,16 GB,Turing / SM 7.5;Intel Xeon Silver 4116,12核 / 24线程;256 GB系统内存;Ubuntu 24.04.4 LTS;NVIDIA驱动 580.173.02
模型与服务堆栈:目标:unsloth/Qwen3.8-27B-GGUF;量化:Unsloth Dynamic V3 Qwen3.8-27B-UD-IQ3_XXS.gguf(磁盘上10.93 GB);投机草稿:incoai/Qwen3.8-27B-DFlash2-GGUF,Qwen3.8-27B-DFlash2-Q4_K_M.gguf(1.14 GB);自定义实验DFlash2 llama.cpp PR #27342 构建用于SM75:0.1.2-dev,构建32,提交f5a7ec1;-ngl all,Flash Attention开启100,352令牌上下文;K和V缓存均为q4_0;批量256,物理微批量64;DFlash最大草稿长度3;一个推理槽;加载所有内容后剩余约0.8–1.1 GB显存,取决于桌面使用情况。
实际测试:响应通常在29–35令牌/秒;非常可预测的输出如计数可达约42令牌/秒。代理UI是DeepSeek Harness 0.1.1-rc.2,通过其OpenAI兼容端点连接到llama.cpp。模型服务器和Harness都在Ubuntu工作站上运行;我的Windows笔记本电脑只是通过SSH隧道的浏览器客户端。Harness提供了文件和shell工具,并实时显示推理过程。会话使用了Qwen的原生低推理努力,但我移除了小输出限制,并允许请求使用整个100,352令牌上下文。
任务:提示要求纯Python实现,仅使用math和cmath——不使用光学库,也不使用NumPy进行实际求解。它必须支持:复数折射率使用惯例N = n + i*k;复数斯涅耳角,具有物理正确的平方根分支;TE/s和TM/p偏振特性矩阵,适用于任意吸收性薄膜;功率反射率和透射率;测试堆栈:空气 | SiO2 100 nm | Au 30 nm | Si,在600 nm和45度下。
100分钟推理过程:完整的代理回合持续了99分钟53秒。会话日志包含22个模型步骤、21次工具调用和107,594个模型输出令牌。仅第一个模型调用就产生了43,033个输出令牌,耗时约27分钟,最终才写出tmm.py。进行了三次上下文压缩尝试。前两次各花费近六分钟生成检查点,然后失败,因为摘要本身达到了令牌限制。只有第三次压缩成功。压缩总时间接近18分钟。
观察思维链确实令人痛苦。Qwen反复重新推导相同的场约定,迷失了其矩阵传播的方向,发现矛盾,宣布一切已验证,然后发明另一个验证方法再次与之矛盾。分支/符号问题很有趣。对于要求的被动n+i*k惯例和与exp(i*k_z*z)成比例的前向场,它最终将复数角度选择简化为:sin_j = (N0 / Nj) * sin_theta0;cos_j = cmath.sqrt(1.0 - sin_j * sin_j);如果 (Nj * cos_j).imag < 0.0: cos_j = -cos_j。换句话说:计算一个平方根分支,如果正常波矢量在正向会增长而不是衰减,则简单翻转它。无需复数反正弦技巧。这对于此测试中的被动正折射率材料是正确的。它并不是一个完全通用的分支选择器:它缺乏容差和前向坡印廷矢量平局决胜当Im(k_z)为零时,并且应该拒绝或特别处理增益介质和吸收性入射介质。因此存在真正的领域限制,但这并不影响空气/SiO2/Au/Si或下面的被动介电测试。
另一个有趣的部分是算法明显“反转”。实现使用了一个特性矩阵,其+i*sin(delta)符号将场状态传播方向与常见教科书表示相反。因此,它左乘每个新层:M = matmul(Mj, M),得到M_N ... M_2 M_1,而不是看起来传统的M_1 M_2 ... M_N。起初这看起来像Qwen简单地反转了算法直到数字工作。但它的边界方程正是为该传播方向推导的,所以反转的乘积在内部是一致的。讽刺的是,Qwen后来在外部验证器中忘记了其自己的惯例,使用了M = M * Mj,并得到了错误的反射率(0.842122而不是0.464845)。将验证器反转回实现的顺序使其一致。
它花费了大部分运行时间调试其裁判员:两个所谓的独立验证方法被模型反复破坏:递归反射验证器有一个偏移一的基础情况,然后索引错误,最后使用exp(2j*1j*delta)。在Python中,2j*1j == -2,所以它计算了exp(-2*delta)而不是exp(2i*delta)。成功的第三次压缩实际上识别了这个确切的拼写错误,但恢复后,模型绕过了修复并最终放弃了该验证器。前向场推进最初完全省略了传播因子exp(+/-i*delta)。修复后,单层情况工作,但多层情况由于上述矩阵顺序错误仍然失败。它还短暂拒绝了一个四分之一波抗反射测试,因为其验证器使用了错误的预期折射率。它更正为n_layer = sqrt(n0*n_sub),并得到反射率约为1e-32。确定的内部检查是一个完全独立的6x6线性求解,用于双薄膜堆栈中的所有前向和后向振幅。这与TMM结果在两种偏振下都匹配到约1e-16。
外部结果:然后我将生成的求解器与Steven Byrnes建立的tmm实现进行比较,覆盖400–800 nm。对于空气 | SiO2 100 nm | Au 30 nm | Si:最大|delta R|,s偏振:1.22e-15;最大|delta R|,p偏振:1.33e-15。我还测试了三个厚的、弱吸收的介电薄膜以产生许多法布里-珀罗条纹:n=1.37 + 0.0002i,厚度6.20 um;n=2.05 + 0.0010i,厚度4.70 um;n=1.68 + 0.0030i,厚度7.35 um;玻璃基板,45度入射,400–800 nm。该光谱包含38个解析最大值用于s偏振和29个用于p偏振。与Byrnes的最大差异为1.25e-14用于s偏振和3.50e-15用于p偏振。绘制的曲线相互重叠。
所以是的:一个大约3位的27B模型在旧款16 GB Turing GPU上从零开始产生了真正正确的 niche 数值物理实现。量化并没有阻止它最终获得正确的数学。但代理行为同样具有指导意义。更多的自主验证并非单调更好。一旦初始实现和分析限制正确,模型花费了超过一个小时在其自己的“独立”检查中创建错误,然后对矛盾进行循环推理。实现在模型相信之前很久就是正确的。它花费了大部分小时调试其自己的裁判员。
有谁在本地推理模型中看到过这种模式吗——好的主要解决方案,随后是验证死亡螺旋?我还对比较相同任务在IQ3、Q4和更高推理努力设置下的表现感兴趣,尽管我不急于立即观看另一个108k令牌推导。
编辑:格式调整
相似文章
大家忽略了 Qwen 3.8 27B Q2 + Q2 DFlash + Q5 KV 的实力
一位用户分享了使用 QAT Q2 和 Q5 KV 运行量化版 Qwen 3.8 27B 模型的经验,在 12GB 显卡上实现了高达 200K token 上下文的高性能,性能超越了 Sonnet 4.6 等模型。
Wow!Qwen 3.6:35b-a3b 在 3090 上……太惊人了。
一位用户分享了在二手 RTX 3090 上运行量化版 Qwen 3.6:35b-a3b 模型的惊人结果:将模型放入显存后,输出速度达到每秒 160 个 token,并以 75 秒的视频处理时间展示了视觉能力。
在4080与64GB DDR5上运行Qwen Flash Q4_K_M,约8tk/s,98304上下文。
作者演示了如何在4080 GPU和64GB DDR5上运行182B的Qwen模型,通过将ngrams转移到SSD,实现了比27B模型更快、更智能的性能,使大型模型推理在消费级硬件上变得可行。
三元 Qwen3.6 27B 在 3090 上测试!
用户在 RTX 3090 上测试了三元量化版本的 Qwen3.6 27B,使用两个槽位和 100k KV 缓存,占用 21GB 显存,达到了 60 tk/s 的速度,质量良好且工具调用稳定。
首次本地LLM调优尝试:在RTX 5080 16GB上实现Qwen3.8-27B真实Q4_K_M量化,上下文长度约50-61K时速度为13.2 tok/s
一位用户详细描述了他们首次在RTX 5080 16GB上对Qwen3.8-27B模型进行Q4_K_M量化的调优尝试,通过选择性将FFN张量卸载到CPU,在50-61K上下文长度下实现了约13.2 tokens per second的速度,以提升性能。