Pull Request已成功合入, 合并人@CANN-robot
(感谢 liuyufan 的贡献)变更摘要
本次 PR 针对 Qwen3-8B 推理优化课程的第 5 章和第 6 章修复了 4 个 Issue:统一模型下载方式以支持 QWEN3_8B_MODEL_PATH 环境变量;修正量化输出数据类型描述与算子规格表对齐;新增 A8W8/W8A8 术语说明消除命名歧义;建立 W8A8_ORIGINAL_CODE 备份恢复机制防止修改 recipes 源码污染 baseline 对比;修复导引小节标题层级使其与课程整体结构一致。同时更新了对应课程 README 补充第 5/6 章内容简介。
主要改动
- 模型下载支持环境变量:在
05_quantization_qwen3_8b.ipynb中,将硬编码的模型 ID'Qwen/Qwen3-8B'替换为os.environ.get('QWEN3_8B_MODEL_PATH') or 'Qwen/Qwen3-8B',使模型权重下载逻辑与前面章节保持一致。 - W8A8 源码备份恢复机制:在
06_custom_matmul_operator_development_and_integration_with_qwen3_8b.ipynb的 6.2 节中,修改compressed_tensors_w8a8_int8.py前先将原始内容保存至变量W8A8_ORIGINAL_CODE,并在新增的 7.4 节通过W8A8_FILE.write_text(W8A8_ORIGINAL_CODE, ...)恢复原始源码,避免原地修改污染 baseline 对比。 - 量化输出类型描述修正:将第 5 章中"纯 INT8 输出"修正为"INT32 输出",与前述算子规格表中
INT8 × INT8 → INT32的计算语义保持一致。 - 新增 A8W8/W8A8 术语说明:在第 6 章 2.1 节新增提示,明确 A8W8 与 W8A8 为同一 INT8 激活 + INT8 权重量化方案的不同命名方式,并举例仓库中 YAML 配置和类名对两种写法的实际使用。
- 导引小节标题层级修复:将第 6 章 cell#0 中的「本章定位」「通过实践达成的学习目标」「本章大纲」从三级标题(
###)改为二级标题(##),与第 1 章及本章后续编号小节层级统一。


代码审查
审查总结
对本次 diff 涉及的 2 个文件逐一审查完毕:
-
05_quantization_qwen3_8b.ipynb(第 5 章):2 处变更——MODEL_ID环境变量读取、"纯 INT8 输出"→"INT32 输出"文本修正——均正确无误,import os已在前置单元格中存在,无问题。 -
06_custom_matmul_operator_development_and_integration_with_qwen3_8b.ipynb(第 6 章):4 处变更——三个导引小节###→##层级修正、A8W8/W8A8 术语说明新增、原始源码备份、7.4 恢复单元格——其中备份/恢复机制存在一个缺陷。
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 1 |
| P3 | 0 |
总体风险评估:低风险。唯一的 P2 问题在正常顺序执行(首次运行 6.2 后不重复执行即运行 7.4 恢复)时不会触发,仅在重复执行 6.2 单元格这一特定场景下会导致备份被污染。其余变更均为正确的文本与逻辑修正,与关联 Issue(#105、#262、#432、#521)的修复目标一致。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/cann-learning-hub | ✅ waimaidaole, fuyangchenghu (2/2) | ✅ waimaidaole (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
liuyufan0725, thanks for your pull request. All authors of the commits have signed the CLA. 👍


🟡 Medium Priority
变更行(第 999–1002 行):在 6.2 节"替换实现"单元格中,新增了 W8A8_ORIGINAL_CODE = W8A8_FILE.read_text(encoding='utf-8') 来备份原始源码,并在 7.4 节新增恢复单元格通过 W8A8_FILE.write_text(W8A8_ORIGINAL_CODE, ...) 写回。
问题:备份变量 W8A8_ORIGINAL_CODE 在每次执行 6.2 单元格时都会被无条件重新赋值。如果学习者在前一次执行后未先运行 7.4 恢复单元格就再次执行 6.2 单元格(这在调试或重复实验场景下很常见),此时磁盘上的 compressed_tensors_w8a8_int8.py 已是修改后的版本(包含 qmm_custom 替换),W8A8_ORIGINAL_CODE 会被覆盖为已修改的代码。此后运行 7.4 恢复单元格时,"恢复"的将是修改后的版本而非真正的原始源码,baseline 对比仍然被污染。
失败模式:6.2 单元格重复执行 → 备份捕获已修改代码 → 7.4 恢复无效 → baseline 对比污染。
if 'W8A8_ORIGINAL_CODE' not in dir():
W8A8_ORIGINAL_CODE = W8A8_FILE.read_text(encoding='utf-8')
或者用一个独立的标志变量控制。
建议:在备份赋值前增加条件判断,确保仅在首次执行时读取并保存原始文件内容,避免重复执行时覆盖为已修改的代码。


changed this line on b215f21c view diff detail
/lgtm


描述
修复 Qwen3-8B 推理优化课程第5和第6章节的 4 个 Issue
06_custom_matmul_operator...ipynb中 6.2 节原地修改 recipes 源码污染 baseline 对比,改为替换前在内存中备份原始内容(W8A8_ORIGINAL_CODE),并在 7.4 节新增恢复单元格写回原始源码。05_quantization_qwen3_8b.ipynb模型权重下载未使用QWEN3_8B_MODEL_PATH环境变量,改为与前几章一致的MODEL_ID = os.environ.get('QWEN3_8B_MODEL_PATH') or 'Qwen/Qwen3-8B'。关联的Issue
关联Issue #105
Issue #262
Issue #432
Issue #521
测试
执行code cell内容符合预期。
文档更新
更新了tutorials/llm_inference/qwen3_8b/README.md
类型标签
其他信息