已合并
fix qwen3_8b chapter 5&6 issues #632
fix qwen3_8b chapter 5&6 issues #632
已合并
liuyufan创建于 8月10日
liuyufan
liuyufan
8月10日

描述

修复 Qwen3-8B 推理优化课程第5和第6章节的 4 个 Issue

  • #105:第 6 章 06_custom_matmul_operator...ipynb 中 6.2 节原地修改 recipes 源码污染 baseline 对比,改为替换前在内存中备份原始内容(W8A8_ORIGINAL_CODE),并在 7.4 节新增恢复单元格写回原始源码。
  • #262:第 5 章 05_quantization_qwen3_8b.ipynb 模型权重下载未使用 QWEN3_8B_MODEL_PATH 环境变量,改为与前几章一致的 MODEL_ID = os.environ.get('QWEN3_8B_MODEL_PATH') or 'Qwen/Qwen3-8B'
  • #432:① 第 5 章将"纯 INT8 输出"修正为"INT32 输出",与算子规格表一致;② 第 6 章 2.1 节新增术语说明,明确 A8W8 与 W8A8 为同一量化方案;③ README 课程简介中补充第 5/6 章量化与自定义算子内容。
  • #521:第 6 章 cell#0 中「本章定位」「通过实践达成的学习目标」「本章大纲」三个导引小节改为 h2,与第 1 章及本章后续编号小节层级保持一致。

关联的Issue

关联Issue #105
Issue #262
Issue #432
Issue #521

测试

执行code cell内容符合预期。

文档更新

更新了tutorials/llm_inference/qwen3_8b/README.md

类型标签

其他信息

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liuyufan 的贡献)
liuyufanliuyufan
8月10日 创建了 pull request,commit 74aa80d7
liuyufanliuyufan
8月10日 关联了issue:[Bug-Report|缺陷反馈]: 06_custom_matmul_operator_integration_with_qwen3_8b.ipynb 原地修改 recipes 源码,可能污染 W8A8 baseline 对比,[Course-Feedback|课程反馈]: 第5章未使用QWEN3_8B_MODEL_PATH指定的本地模型权重,[Course-Feedback|课程反馈]: llm_inference/qwen3_8b README,[Course-Feedback|课程反馈]: Qwen3-8B 课程第 6 章开头三个导引小节用 h3,而本章其余小节与第 1 章的同类导引小节都用 h2,全课程 6 个 notebook 仅此一处层级不一致
atomgit-bot
atomgit-bot
8月10日 评论:

变更摘要

本次 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 章及本章后续编号小节层级统一。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月10日 评论:

代码审查

审查总结

对本次 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

💬 仅评论

likedislike
不准确?
CANN-robotCANN-robot成员
8月10日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
8月10日 评论:

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 /approve or /lgtm
  • Commenting /approve implies 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. 👍

likedislike
atomgit-bot
atomgit-bot8月10日进行代码检视3
tutorials/llm_inference/qwen3_8b/06_custom_matmul_operator_development_and_integration_with_qwen3_8b.ipynb
已过期
@@ -996,2 +998,3 @@
996998 "\n",
997- "ct_code = W8A8_FILE.read_text(encoding='utf-8')\n",
999+ "# 备份原始内容,避免污染 baseline 源码\n",
1000+ "W8A8_ORIGINAL_CODE = W8A8_FILE.read_text(encoding='utf-8')\n",
atomgit-bot
atomgit-bot8月10日评论:

🟡 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')

或者用一个独立的标志变量控制。

建议:在备份赋值前增加条件判断,确保仅在首次执行时读取并保存原始文件内容,避免重复执行时覆盖为已修改的代码。

likedislike
不准确?
System
系统消息系统
8月10日 评论:

changed this line on b215f21c view diff detail

liuyufan
liuyufan
8月10日 评论:

已修改

liuyufanliuyufan
8月10日 update merge request[project id: 9260575, iid: 632, commit_id: 0953b7b903661d2f8c99816d69b7e0e3ddd5c0bd] virtual merging success
此处折叠了9条事件消息 查看更多
CANN-robotCANN-robot成员
8月10日 添加了label:cann-cla/yes
meme成员
8月11日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
8月11日 添加了label:approved
Mmeme成员
8月11日 解决了最后一个问题
fuyangchenghu成员
8月11日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
8月11日 添加了label:lgtm
CANN-robotCANN-robot成员
8月11日 合入了pull request