当前位置: 首页 > java >正文

昇思+昇腾开发板+DeepSeek模型开发与适配

昇思+昇腾开发板+DeepSeek模型开发与适配

DeepSeek-R1-Distill-Qwen-1.5B介绍

  • 模型特点
    • 基于Qwen2.5-Math-1.5B蒸馏
    • 参数量1.5B,适合入门级推理任务
    • 使用R1生成的80万条高质量数据监督微调(SFT)
    • 保留原模型66%的推理能力1
  • 模型对比
    模型基础模型适用场景计算成本
    1.5BQwen2.5基础数学推理
    7BQwen2.5中级逻辑任务
    14BQwen2.5高级问题解决中高

开发板环境准备

硬件配置

  • 香橙派OrangePi Alpro 20T(24G内存)1
  • 昇腾AI处理器(集成8-20 TOPS算力)

软件栈

组件版本要求安装方式
CANN8.0.0beta1镜像内置
MindSpore2.5.0需从2.4.10手动升级
MindSpore NLP0.4分支源码编译

检查Python进程数

export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=4

内存限制(每次新终端需运行)

bash mem_limit.sh

DeepSeek-R1-Distill-Qwen-1.5B介绍

  • 蒸馏版模型特点:
    • 选用Llama 3.1/3.3和Qwen 2.5的6个开源模型
    • 用R1生成80万条高质量推理数据
    • 基于监督微调(SFT)而非RL阶段
    • 最小规模的DeepSeek蒸馏模型(1.5B参数)

开发板环境准备CheckList

组件版本要求
香橙派开发板OrangePi Alpro 20T 24G
CANN社区版8.0.0beta1(镜像内置)
MindSpore2.5.0(需从镜像内置2.4.10手动升级)
MindSpore NLP0.4分支

网络调试方法

#设置环境变量
export RUN_SLOW=True#执行测试命令
pytest -v -s tests/transformers/models/qwen2/test_modeling_qwen2.py

开启同步模式定位问题

mindspore.set_context(pynative_synchronize=True)

经验分享

a. 针对算子缺失的处理方式

问题定位:
开启同步前:可以初步判断出来,是aclnn cumsum算子的问题,但由于异步执行,无法定位到具体是脚本中的哪一行报错。
开启同步后:确定了错误的具体位置,是modeling_qwen2.py的prepare_inputs_for_generation方法中调用cumsum算子时出现问题。
解决方案:Tensor.cumsum走的是aclnn的cumsum算子,而昇腾310B芯片暂不支持。将其切换成ops.cumsum,改为走aclop算子执行。

b. 针对损失函数报错的处理方式

问题定位:
在开启同步的前提下,可以看出是loss function,也就是CrossEntropyLoss的问题。
解决方案:
损失函数相关的问题,建议使用 mindspore.ops.primitive 中的接口替换。通过查阅文档可知,其中支持昇腾硬件的接口为 mindspore.ops.SoftmaxCrossEntropyWithLogits。
进一步查阅SoftmaxCrossEntropyWithLogits文档,会发现如下注意点:
该损失函数的labels输入需要one-hot格式。
logits和labels的数据类型需要一致。
输出并不是一个零维Tensor。
输出的是一个(loss, dlogits)的tuple,且loss是一个Tensor。

针对上述三点,需要对代码进行如下修改:
将损失函数(loss_fct)修改为 mindspore.ops.SoftmaxCrossEntropyWithLogits。
将labels修改为one-hot格式。
统一labels和logits的数据类型,计算获取loss。
按照原本默认的reduction='mean’转成零维Tensor。
修改后代码示例:

# ...
elif self.config.problem_type == "single_label_classification":# loss_fct = CrossEntropyLoss() # 原代码loss_fct = mindspore.ops.SoftmaxCrossEntropyWithLogits() # 1. 修改损失函数labels = nn.functional.one_hot(labels.view(-1), self.num_labels) # 2. labels转为one-hot# 3. 统一数据类型并计算loss, _ = loss_fct(pooled_logits.view(-1, self.num_labels), labels.to(pooled_logits.dtype))loss = loss.mean() # 4. 转为零维Tensor
# ...
http://www.xdnf.cn/news/17202.html

相关文章:

  • 豆包新模型与PromptPilot工具深度测评:AI应用开发的全流程突破
  • 自然语言处理基础—(1)
  • Java 工具类的“活化石”:Apache Commons 核心用法、性能陷阱与现代替代方案
  • linux-系统性能监控
  • [特殊字符]企业游学 | 探秘字节,解锁AI科技新密码
  • WebSocket 通信与 WebSocketpp 库使用指南
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备故障预测与智能运维中的应用(384)
  • 【STL源码剖析】从源码看 vector:底层扩容逻辑与内存复用机制
  • golang的map
  • 【Linux】重生之从零开始学习运维之主从MGR高可用
  • 【C++】unordered系列容器使用及封装
  • WebStorm转VSCode:高效迁移指南
  • QML开发:QML中的基本元素
  • 项目设计模式草稿纸
  • Docker概述
  • chromedp 笔记
  • Prometheus监控学习-安装
  • LeetCode 112. 路径总和解题思路详解(BFS算法深入理解)
  • pipeline方法关系抽取--课堂笔记
  • SpringBoot AI心理学训练实战
  • 《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线
  • FastAPI快速入门P2:与SpringBoot比较
  • Google AI 发布 MLE-STAR:一款能够自动执行各种 AI 任务的先进机器学习工程代理
  • 使标签垂直水平居中的多种方法
  • C#案例实战
  • 利用Coze平台生成测试用例
  • 基于vscode连接服务器实现远程开发
  • HTML总结全览
  • Go 单元测试:如何只运行某个测试函数(精确控制)
  • 【前端】网站favicon图标制作