昇思学习营-模型开发与适配学习心得

学习心得:DeepSeek-R1-Distill-Qwen-1.5B 在香橙派上的「模型开发与适配」

经过对「昇思 MindSpore + 香橙派 AIpro」环境中 DeepSeek-R1-Distill-Qwen-1.5B 的完整适配流程实践,我把收获总结为“一条主线、三类痛点、五项技巧”,既方便自己回顾,也供后续同学快速避坑。


一、一条主线:让 1.5B 蒸馏模型在 20 TOPS 边缘板“跑起来、跑得稳”

阶段 关键动作 交付物
环境准备 镜像烧录 → CANN/MindSpore 版本对齐 → 设置 swap & 环境变量 可重复的环境 CheckList
网络调试 pytest 逐条 UTs → 打开 pynative_synchronize=True → 报错精准定位 问题-代码行映射表
算子/接口修复 缺失算子 ACLOP 替换、Loss 函数 one-hot 化、Tensor 切片类型修正 最小可运行 patch 集
性能初验 FP16 权重直接加载、限制 python 进程数、cgroup 内存隔离 首 token 延迟 < 2 s

二、三类真实痛点与解决方案

痛点 现象 根因 解决方案 一句话口诀
算子缺失 RuntimeError: aclnnXXXGetWorkspaceSize failed 动态图默认走 aclnn,部分算子昇腾未实现 回退到 aclop:ops.cumsum 代替 Tensor.cumsum “aclop 是备胎,缺啥就换啥”
Loss 报错 TypeError: logits and labels dtype mismatch CrossEntropyLoss 期望 one-hot,而输入是 int64 SoftmaxCrossEntropyWithLogits + one_hot + loss.mean() “标签先 one-hot,再和 logits 成双对”
显存 OOM 加载模型即 OOM,或训练时莫名 killed 默认 fp32 加载后再转 fp16;python 多进程抢占 ① 直接加载 fp16 权重 ② MAX_COMPILE_CORE_NUMBER=1 限制编译线程 ③ cgroup 限制 4 GB “fp32 是显存杀手,cgroup 是守门员”

三、五项可复制的实战技巧

  1. 环境固化脚本
    export ASCEND_HOME=/usr/local/Ascendexport LD_LIBRARY_PATH=... 等变量写成 set_env.sh,每次登录 source 一次,杜绝“今天能用、明天报错”。

  2. pytest 快速回归
    在模型仓库根目录跑

    export RUN_SLOW=True
    pytest -xvs tests/test_modeling_qwen2.py::TestQwen2::test_generation
    

    一旦通过,说明主干功能已可用;后续改代码先跑单测,再跑整网。

  3. 同步模式定位 Bug
    动态图异步导致栈信息错位,首行报错往往不准。在 import mindspore 后加

    mindspore.set_context(pynative_synchronize=True)
    

    可将报错行精确到脚本级,节省 80 % 调试时间。

  4. 权重加载“三不要”

    • 不要先 torch.float32.half() —— 内存峰值翻倍;
    • 不要全量保存 safetensors —— LoRA 微调只存 adapter(< 50 MB);
    • 不要把 pad_token 设成 eos_token —— 会导致 attention_mask 推断失败。
  5. 内存 cgroup 一键脚本
    把官方提示的 cgcreate & cgset 写成 mem_limit.sh,内容:

    sudo cgcreate -g memory:ms_limit
    sudo cgset -r memory.limit_in_bytes=4G ms_limit
    sudo cgclassify -g memory:ms_limit $$
    

    每次开新终端 bash mem_limit.sh,NPU 显存瞬间多出 2-4 GB。


四、个人反思

  1. 从“能跑”到“跑得优雅”:仅让模型跑通只解决了 20 % 问题,后续还需关注首 token 延迟、长文本重复、PD 分离部署等工程细节。
  2. 文档-代码双轮驱动:昇腾/MindSpore 文档迭代极快,保持“看最新版 + 查 issue + 读源码”的三级检索习惯,才能第一时间拿到正确姿势。
  3. 把补丁反哺社区:本次改动的 modeling_qwen2.py 三个 PR 均已提交 mindnlp 仓库,真正体会“开源不是索取,而是共建”。

五、下一步计划

  • 尝试把 7B 蒸馏模型在 20 TOPS 上跑通,挑战边缘端极限。
  • 用 MindSpore Lite + MindRT 把推理服务封装成 gRPC 微服务,部署到产线工控机。
  • 参加 2025 昇腾 AI 创新大赛,把“香橙派+DeepSeek”做成可复制的行业解决方案模板。

一句话总结:
“在昇腾边缘端做大模型,没有魔法,只有版本、算子、内存三板斧;斧头磨利了,1.5B 也能玩出 GPT 的感觉。”

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。