15-使用Python读取并打印bin文件浮点数据
14-Git基本操作流程及注意事项
13-DeepSeek总结
1. 参考
DeepSeek-V3技术报告:DeepSeek-V3/DeepSeek_V3.pdf at main · deepseek-ai/DeepSeek-V3 · GitHub
DeepSeek-R1技术报告:DeepSeek-R1/DeepSeek_R1.pdf at main · deepseek-ai/DeepSeek-R1 · GitHub
DeepSeekMath:[2402.03300] DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models
权重(大小足有671B,FP8精度):deepseek-ai/DeepSeek-V3-Base · Hugging Face
【论文解读】DeepSeek-V3技术报告 https://zhuanlan.zhihu.com/p/14988009150
【论文解读】DeepSeek-R1:通过强化学习提升LLM推理能力 https://zhuanlan.zhihu.com/p/19551355661
【论文解读】DeepSeekMath:用GRPO改进PPO https://zhuanlan.zhihu.com/p/14574329458
八个问题,带你零基础了解DeepSeek https://news.qq.com/rain/a/20250202A05WKP00
DeepSeek-R1 发布,性能对标 OpenAI o1 正式版 https://api-docs.deepseek.com/zh-cn/news/news250120
DeepSeek 模型发布和重大事件时间线一览 https://fisherdaddy.com/posts/deepseek-model-publish-timeline/
2. 背景
DeepSeek已经发布13个大模型,并且都已开源。
最近引起全世界广泛关注的模型,主要是自研通用大模型 DeepSeek-V3、推理模型 DeepSeek-R1 。(DeepSeek-V3 对标GPT-4o,DeepSeek-R1对标o1)。
DeepSeek-V3 是一个通用模型,日常常见的问题,都可以尝试使用 V3。
DeepSeek-R1 是一个推理模型,擅长处理复杂、需要多步思考的问题,适合做深度研究、解决代码问题、数学问题。
目前Web和APP均免费。
Web 端直接通过访问网址对话。在对话框的左下角位置,可以选择是否开启“深度思考”模式。如果勾选,会使用 DeepSeek-R1 模型;如不勾选,则默认使用 DeepSeek-V3 。
App 直接在应用商店中搜索“DeepSeek”即可。在APP端,可以选择同时使用联网和推理功能。
也可以通过多种渠道调用 DeepSeek 的API:
DeepSeek开发者平台:访问 DeepSeek 控制台
https://platform.deepseek.com/,注册登录并购买获取相应的密钥。(不过,近期该平台正在维护当中)
英伟达 NIM 微服务:
https://build.nvidia.com/deepseek-ai/deepseek-r1,支持API调用 DeepSeek-R1,需要使用邮箱注册账号。
微软 Azure:
https://ai.azure.com,微软 Azure 可以通过聊天操场,部署DeepSeek-R1,创建一个聊天机器人。
亚马逊 AWS:
https://aws.amazon.com/cn/blogs/aws/deepseek-r1-models-now-available-on-aws,DeepSeek-R1 现已在 Amazon Bedrock Marketplace 和 Amazon SageMaker JumpStart 中推出,还可以在 Amazon Bedrock Custom Model Import 和 Amazon EC2 实例来使用 DeepSeek-R1-Distill 模型。
硅基流动 SiliconCloud :
https://siliconflow.cn/zh-cn/models ,上线了基于华为云昇腾云服务的 DeepSeek-V3、DeepSeek-R1,开发者可以直接调用 SiliconCloud API,价格与 DeepSeek 官方优惠期价格保持一致。
此外,Cerebras、Groq 也可以调用 DeepSeek-R1 的 API。
3. DeepSeek的优势
特点:
性能优秀:这两款模型的性能接近甚至在某些场景超越了“公认”的全球标杆公司OpenAI的最好产品
结合应用:模型发布后,上线DeepSeek的Web/APP,可切身体验模型效果。
训练成本低,产品性价比高
根据 DeepSeek 的官方技术报告,V3 的训练成本仅 557.6 万美元。OpenAI 虽然没有官方公布过 4o 的训练成本,但据OpenAI CEO Sam Altman 透露,GPT-4 的训练总计花费了约1亿美元。
V3 仅使用了 2048 个 H800 GPU、花费2个月训练完成,使用GPU的数量和训练时长颠覆传统认知。
R1 和 V3 都可以在 DeepSeek 官网上免费使用;API 的定价中,R1 输入部分的价格是 o1 的 1.82%,输出部分是 o1 的 3.65%;V3 输入部分的价格是 GPT-4o 的 1.12%,输出部分是 GPT-4o 的 2.8%。
技术创新:DeepSeek-R1 的训练模式颠覆了常规认知。DeepSeek-R1 是首个验证了仅通过 RL(强化学习)无需 SFT (监督微调) 就能得到大幅推理能力增强和涌现的模型。这种训练方式大幅降低了数据标注成本,简化了训练流程,整体训练成本也得到了降低。
开源:目前没有其他在性能上对标 GPT-4o 和 o1 的开源模型。OpenAI 旗下主打的核心模型都没有开源,用户要使用必须通过APP或 API 调用。
4. 目前形势
中国AI公司做出真正的创新,美国科技大厂担心失去领先地位。
在此之前,模型层面的技术革新虽然也并非罕见,但都是美国模型厂商率先推出、其他厂商跟进验证的节奏。这一次 DeepSeek 走到了前面。
DeepSeek 在模型训练和架构上都有创新,能够显著降低推理阶段的成本、提高效率。长期以来,AI发展依赖于计算能力的积累,可以说是超大规模者之间的竞赛。对比美国的竞争者,DeepSeek的创新实现了训练成本和使用价格上数量级的减少,美国公司领先市场的重要优势被削弱了。
开源:生态若能星火燎原,将抢占美国公司市场。DeepSeek 的 R1 不仅通过技术报告公开了训练过程,还开源了模型的权重。DeepSeek的推理模型拥有高性能和低价格,使得开发者能将其用于越来越多的场景。最近,微软、英伟达、AWS都纷纷接入DeepSeek-R1。
大模型相关的美国科技股受到巨大冲击。英伟达股价大跌,似乎暗示了 DeepSeek 的真实威胁。因为DeepSeek 的路线一定程度上说明,无需最强算力也能训练出高性能大模型,而且 DeepSeek 把高性能模型开源的路线可能让更多公司放弃训练模型,冲击了英伟达核心算力产品(GPU)的需求,影响股价。并且,市场担忧 DeepSeek 的成功冲击 OpenAI 等美国重点科技公司的市场前景,尤其是闭源模型方向。
5. DeepSeek未来可能迭代方向
未来的创新点可能还是会围绕着成本、性能这两大核心要素。
多模态能力补齐。
- 除夕凌晨,DeepSeek新发布的 DeepSeek-Janus-Pro 模型是一个多模态模型,同时拥有视觉理解和视觉生成的能力。但 Janus 系列模型都是小参数量模型,如何通过 Janus 创新的模型框架训练出一个大参数量的多模态模型,可能是未来的重点之一。
DeepSeek 在2025年1月终于推出面向 C 端用户的 APP 产品,可能未来会探索/合作更多应用。
6. 可能会带来的影响
国内AI公司面临进一步限制
芯片制裁可能更严重:DeepSeek 的低成本训练成果,可能会让美国进一步收缩可供出口的芯片型号。未来,国内模型厂商可用的 GPU 型号越来越少,代际越来越旧。
模型和应用层面的封锁也会随之而来:由于隐私、数据合规等质疑,一些国家和地区已经要求 DeepSeek 停止服务。Twitter上,一些 AI 科普类博主从之前的无脑捧吹 DeepSeek 的帖子,已经转变为教用户 “如何本地化部署一个 DeepSeek R1 来保护自己的数据” 这样的帖子。
全球AI生态的竞争可能会被重塑
- DeepSeek 得到市场认可,一定程度上说明,算法效率、经济高效将成为未来竞争中的核心要素。DeepSeek 正推动 AI 行业从“算力军备竞赛”转向“算法效率战争”,AI技术进一步普惠化。那些以往以“算力为重”的公司将要重新审视自己的战略。
硅谷巨头们急迫重新领先
- 技术上进行革新、重新夺取领先地位的紧迫感,会笼罩着美国的科技巨头们。据称,目前 Google、Apple、Meta 等公司,已经纷纷开始深度研究 DeepSeek。尽快推出下一个代际的领先模型,是硅谷各家的当务之急。
7. 可能面临的有利影响和发展方向
有利影响:
随着国际芯片制裁加剧,国内市场对国产GPU和AI芯片的需求将上升,有机会填补这一空白。
数据隐私和合规要求推动本地化部署,可提供定制化解决方案。
可优化算法与硬件的协同,提升整体性能。参与国产AI生态建设,推动从硬件到软件的自主可控。
发展方向:提供定制化解决方案,针对数据隐私和合规需求,提供本地化部署支持。
8. 技术细节
8.1 DeepSeek-V3 使用 MoE 架构:
MoE (Mixture-of-Experts) 模型,即混合专家模型,是一种将多个小型专家模型组合起来,共同完成任务的架构。每个专家模型只处理部分输入,从而提高模型的效率和扩展性。
DeepSeek-V3 使用 MoE 架构的原因主要有以下几点:
- 提高模型容量:MoE 可以显著增加模型的参数数量,而无需像稠密模型那样增加计算量。这使得模型可以学习更复杂的模式和关系,提高模型的性能。
- 降低训练成本:虽然 MoE 模型的总参数量很大,但每次激活的参数量却很小,从而减少了训练所需的计算资源。
- 提高推理效率: 在推理时,只有部分专家被激活,从而降低了推理的计算成本。
8.2 DeepSeek-V3 使用Multi-Head Latent Attention (MLA)
Multi-Head Latent Attention (MLA),即多头潜在注意力机制,旨在减少推理阶段的内存占用。MLA 和传统的 MHA 的主要区别在于:
- KV 缓存:在传统的 MHA 中,每个 token 的 Key 和 Value 向量都需要缓存起来,这在长文本生成中会占用大量的显存。而 MLA 通过低秩压缩技术,将 Key 和 Value 向量压缩成低维度的潜在向量,只需缓存压缩后的表示,从而显著减少 KV 缓存的内存占用。
- 通俗类比:想象在听一场演讲,传统的注意力机制需要记住每个时间点的所有细节(就像记录每一秒的录音)。而 MLA 则只提取关键信息(就像只记录每个重点句子),这样需要记忆的信息就大大减少了。
8.3 DeepSeek-V3 的无辅助损失负载均衡策略
在 MoE 模型中,如果专家负载不均衡,会导致以下问题:
- 路由崩溃:某些专家可能会被过度使用,而其他专家则被闲置。
- 计算效率降低:过度使用的专家会成为性能瓶颈,而闲置的专家则浪费了计算资源。
传统 MoE 模型为了实现专家间的负载均衡,通常引入辅助损失。但辅助损失会对模型的主要优化目标产生干扰,可能导致性能下降。为了解决这个问题,DeepSeek-V3 提出了无辅助损失的负载均衡策略。该策略的核心思想是:
- 引入偏置项:为每个专家引入一个偏置项,并将这个偏置项添加到亲和度得分中,从而影响路由决策。
- 动态调整偏置项:在训练过程中,如果一个专家被过度使用,则减小其偏置项;如果一个专家被闲置,则增大其偏置项。这样,可以动态调整专家负载,使其达到均衡。
- 不使用辅助损失:偏置项只用于路由,而不影响最终的门控值计算,从而避免了传统辅助损失对模型性能的损害。
类比: 想象在一个餐厅里,有多个厨师。如果顾客都点同样的菜,那么只有一个厨师会很忙,而其他厨师则没事做。为了解决这个问题,你可以告诉顾客:「今天点这道菜可以打折」,或者「点其他菜可以更快上菜」。这样,就可以引导顾客点不同的菜,让所有厨师都忙起来。DeepSeek-V3 的无辅助损失负载均衡策略就类似于这个引导顾客点不同菜的策略。
8.4 DeepSeek-V3 使用 Multi-Token Prediction (MTP) 提高模型性能
在传统的语言模型训练中,模型通常只预测下一个标记。MTP 则是在每个位置上,让模型预测多个未来的标记。
实现方法:引入了多个预测模块,每个模块负责预测不同深度(未来第几个)的标记。在训练过程中,对每个深度的预测计算损失,然后将这些损失平均,作为整体的 MTP 损失。
好处:增加训练信号:通过预测多个 token,模型可以获得更密集的训练信号,提高数据效率。增强预规划能力:MTP 可以帮助模型更好地预先规划未来 token 的表示,使其更好地捕捉长距离依赖关系,从而提高模型的性能。
8.5 DeepSeek-V3 使用 FP8 训练混合精度训练
在深度学习训练中,使用低精度浮点数(如 FP16、FP8)可以降低计算和存储需求,提高训练速度。但低精度可能导致数值不稳定和模型性能下降。
解决方案:
精细量化策略。细粒度量化:对张量进行小块划分(如 1×128 或 128×128),对每个小块单独计算缩放因子,进行量化,减少了量化误差带来的影响。
提高积累精度。增加乘加运算的精度:在进行矩阵乘法累加时,将部分结果提升到更高精度(如 FP32)进行积累,减少了因低精度引入的误差。
混合精度训练框架。保留关键操作的高精度:对于敏感的操作,如嵌入层、归一化层等,仍然使用高精度计算,确保训练的稳定性。
DeepSeek-V3 使用 FP8 训练的主要原因是:
加速训练:FP8 格式可以加速 GEMM (General Matrix Multiplication) 等核心计算操作,从而提高训练速度。
减少内存使用:FP8 格式可以显著减少内存占用,使得在有限的显存中训练更大的模型成为可能。
突破硬件限制:目前 NVIDIA H100 及以上的 GPU 已经对 FP8 有了较好的支持,而 DeepSeek-V3 使用了 FP8 混合精度训练,使其可以更好地利用硬件性能。
8.6 DeepSeek-V3 的 DualPipe 算法解决通信瓶颈
DualPipe 算法是 DeepSeek-V3 中用于解决通信瓶颈的一种高效流水线并行算法。它的核心思想是通过重叠前向和后向计算与通信,从而减少流水线气泡,提高训练效率。
具体来说,DualPipe 算法:
- 双向流水线:同时从流水线的两端输入 micro-batch,实现双向并行计算。
- 计算-通信重叠:将每个 chunk 分成多个部分,并调整 GPU SM 用于通信和计算的比例,使得计算和通信可以相互重叠。
- 减少流水线气泡: 通过双向流水线和计算-通信重叠,减少了流水线中的等待时间,从而提高了训练效率。
类比:可以将 DualPipe 算法想象成一个生产线。传统的流水线是按顺序一个一个地处理产品,而 DualPipe 算法是同时从两个方向处理产品,并让不同环节同时进行,从而提高了生产效率。
8.7 DeepSeek-V3 与传统的知识蒸馏的不同
DeepSeek-V3 使用了一种特殊的知识蒸馏方法,从 DeepSeek-R1 模型中提炼推理能力。与传统的知识蒸馏不同,DeepSeek-V3 的知识蒸馏:
- 重点在于推理模式:不是简单地模仿 R1 的输出,而是将 R1 的反思和验证模式融入到 DeepSeek-V3 中。
- 生成多样化的 SFT 数据:通过让 R1 生成带有反思和验证的响应,为 DeepSeek-V3 提供更高质量的 SFT 数据。
- 在强化学习中运用:在 RL 阶段,通过高温度采样生成融合了 R1 和原始数据的响应,使模型学习 R1 的推理模式。
8.8 DeepSeek-V3 使用 tile-wise
和 block-wise
量化
tile-wise
和 block-wise
量化是用于提高 FP8 量化精度的两种细粒度量化方法:
- tile-wise 量化:对于激活值(activations),将 1xNe 的元素分组成一个 tile,然后在 tile 内进行缩放(scaling)。这里的 Ne 通常是 128,所以就是一个 1x128 的 tile。这意味着,对于每一个 token,每 128 个通道(channel)会被分成一组。
- block-wise 量化:对于权重(weights),将 Ne x Ne 的元素分组成一个 block,然后在 block 内进行缩放。这里的 Ne 也通常是 128,所以就是一个 128x128 的 block。这意味着,每 128 个输入通道和 128 个输出通道会被分组成一个 block。
这种细粒度的量化方法可以更好地适应激活值和权重中的异常值,提高量化的精度,从而使模型能够更有效地利用低精度的 FP8 格式进行训练。
类比:可以将 tile-wise
和 block-wise
量化想象成在打包货物时,不是把所有货物都放在一个大箱子里,而是将它们根据形状、大小等进行分类,然后分别打包。这样可以更好地利用空间,减少货物之间的挤压和碰撞。
8.9 DeepSeek-R1-Zero 研究纯强化学习(RL)在 LLM 推理能力上的应用
直接在基础模型上应用强化学习,不使用任何 SFT 数据。探索 LLM 在纯 RL 环境下的自演化过程,使其自主发展推理能力。
近年来,LLM 在各个领域都取得了显著进展,但推理能力仍有提升空间。
之前的研究大多依赖于大量的监督式微调(SFT)数据,但获取高质量的 SFT 数据成本高昂。
OpenAI 的 o1 系列模型通过增加思维链(Chain-of-Thought, CoT)推理过程的长度来提升推理能力,但如何有效进行测试时(test-time)扩展仍是开放问题。
一些研究尝试使用基于过程的奖励模型、强化学习和搜索算法来解决推理问题,但没有达到 OpenAI 的 o1 系列模型的通用推理性能水平。
8.10 DeepSeek-R1-Zero 的「顿悟」时刻 aha moment
在大规模强化学习中,模型的「思考过程」会不断与最终的正确率奖励相互作用。当模型最初得出的答案并未得到较高奖励时,它会在后续的推理中「回头反省」,尝试补充或修正先前的思路,从而获得更高的奖励。随着强化学习的迭代,这种「主动回溯、推翻先前想法并重新推理」的行为逐渐巩固,便在输出中表现为所谓的「aha moment」。本质上,这是RL为模型「留出了」足够的思考和试错空间,当模型自行发现更优思路时,就会出现类似人类「恍然大悟」的瞬间。
这也展示了 RL 的强大潜力,它可以让模型在没有明确指导的情况下,自主学习并改进。
8.11 DeepSeek-R1相比DeepSeek-R1-Zero 做出的改进
引入冷启动数据:使用了数千条带详细推理过程(长CoT)的数据先做一次SFT,让模型初始时就具备一定可读性与写作风格。
分阶段RL:在推理收敛后,通过拒绝采样等手段获得更多优质监督样本,再进行SFT,再全场景RL,不断修正模型的正确性与通用能力。
语言一致性奖励:避免模型出现大量的拼写或中英文混杂,从而保证可读性。
8.12 DeepSeek-R1 要使用冷启动数据
DeepSeek-R1 使用冷启动数据的主要目的是为了解决 DeepSeek-R1-Zero 在训练早期出现的训练不稳定问题。相比于直接在基础模型上进行 RL,使用少量的 SFT 数据进行冷启动,可以让模型更快地进入稳定训练阶段:
- 可读性:冷启动数据使用更易于理解的格式,输出内容更适合人类阅读,避免了 DeepSeek-R1-Zero 输出的语言混合、格式混乱等问题。
- 潜在性能:通过精心设计冷启动数据的模式,可以引导模型产生更好的推理能力。
- 稳定训练:使用 SFT 数据作为起始点,可以避免RL 训练早期阶段的不稳定问题。
8.13 DeepSeek-R1 的多阶段训练框架中每个阶段的侧重点
冷启动(Cold Start):使用少量高质量的 CoT 数据对基础模型进行微调,作为 RL 训练的初始起点。侧重点是让模型掌握基本的 CoT 推理能力,并使模型的输出更具可读性。
推理导向的强化学习(Reasoning-oriented RL):在冷启动模型的基础上进行 RL 训练,侧重点是提升模型在推理任务上的性能。在这个阶段,会引入语言一致性奖励,以减少推理过程中的语言混合问题。
拒绝采样和监督微调(Rejection Sampling and SFT):使用上一阶段的 RL 模型进行拒绝采样,生成高质量的推理和非推理数据,并用这些数据对模型进行微调。侧重点是提升模型的综合能力,使其在写作、事实问答等多种任务上表现良好。
所有场景下的强化学习(RL for all scenarios):在上一阶段 SFT 模型的基础上进行 RL 训练,侧重点是使模型在所有场景下都能表现良好,包括推理任务和非推理任务,并且保证模型的安全性和无害性。
8.14 DeepSeekMath Corpus 的构建过程,需要迭代式地收集数据
迭代式地收集数据可以帮助不断优化 FastText 模型,从而发现更多高质量的数学网页。
- 第一轮,使用 OpenWebMath 作为种子数据训练了一个 FastText 模型。但是这个模型只学到了一部分数学网页的特征,还有很多数学网页没有被识别出来。
- 为了让 FastText 模型更强大,分析第一轮收集到的网页的来源,找到一些可能包含更多数学网页的网站,比如 http://mathoverflow.net。然后,人工标注这些网站中的数学网页,将他们加入到种子数据中,用新的种子数据训练新的 FastText 模型,这个新模型就可以识别更多的数学网页。
- 通过多轮迭代,FastText 模型越来越强大,可以找到更多高质量的数学网页。就像我们学习一个新知识一样,先从简单的概念入手,然后不断深入,才能全面掌握。
8.15 DeepSeekMath-Base 从 DeepSeek-Coder-Base 模型开始进行数学预训练
使用 DeepSeek-Coder-Base-v1.5 7B 作为初始化模型,并在 DeepSeekMath Corpus 上进行预训练。因为发现代码训练有助于提升模型的推理能力,特别是数学推理能力。具体来说,代码训练可以让模型更好地理解逻辑和结构化的思维,这对于解决数学问题至关重要。先进行代码训练,再进行数学训练,可以获得更好的数学推理能力。
- 逻辑思维:代码的执行需要精确的逻辑,这与数学推理非常相似。代码训练可以帮助模型学习和掌握逻辑思维的能力,从而更好地解决数学问题。
- 结构化思维:代码具有严谨的结构,这与数学证明的结构类似。代码训练可以让模型更好地理解和运用结构化思维,这有助于模型更好地分析和解决数学问题。
- 抽象能力:代码中的变量和函数是对现实世界事物的抽象,这与数学中的符号和公式类似。代码训练可以帮助模型提高抽象能力,从而更好地理解数学概念和公式。
- 解决问题的能力:代码的目的是解决问题,数学的目的是解决数学问题,这个过程都需要很强的解决问题的能力,代码训练可以帮助模型提高解决问题的能力,从而更好地解决数学问题。
8.16 DeepSeekMath-RL 通过 GRPO 强化学习进一步优化的模型
GRPO 算法减少计算资源消耗。GRPO 的核心在于它避免了像 PPO 那样训练一个额外的 value 模型,而是通过 group scores 来估计 baseline。
PPO 需要训练一个额外的 value 模型来估计状态的价值,这个 value 模型通常和 policy 模型规模相当,所以训练过程很耗费计算资源。
GRPO 则不同,它不需要训练额外的 value 模型。对于每个问题,GRPO 会从 policy 模型中采样多个输出,然后将这些输出的奖励值进行归一化,并以此作为 baseline。这样,GRPO 可以省去训练 value 模型的开销,从而大大减少计算资源的消耗。
更形象地说,PPO 要给每个学生都找一个辅导老师(value model),而 GRPO 是让学生之间互相评价(group score),然后进行自我调整,显然后者更节省资源。
8.17 RL 的未来方向
总的来说,未来的研究方向将集中于如何让 RL 更有效地利用数据,更可靠地学习,以及更准确地评估。
数据源:
探索更多样的训练数据,包括分布外的问题和高级解码策略;
优化模型探索效率。
算法:
- 开发更鲁棒的 RL 算法,以应对训练信号中的噪声,比如使用弱监督方法。
奖励函数:
提高奖励函数的泛化能力,使其能够处理分布外问题和高级解码输出;
反映奖励函数的不确定性,将其与弱监督方法连接起来;
构建高质量的过程奖励模型,为推理过程提供细粒度的训练信号。
12-Docker容器中解决Shared Memory不足问题
11-理解GridSample
10-Ascend C环境下调试手段
9-GirdSample算子预分析
整理了从环境安装、ONNX 导出、OM 模型转换、推理验证到算子支持查询的完整流程,并针对 GridSampler2D/3D 的关键问题和解决思路进行了说明。
1. 参考资料
2. 安装环境
1 | pip install torch>=1.9 onnx==1.12.0 onnxruntime==1.14.0 |
- Opset v16
3. 导出 2D GridSample 的 ONNX 模型
- 编写导出脚本
export_grid_sample_onnx.py
1 | vim export_grid_sample_onnx.py |
1 | import torch |
- 运行导出脚本
1 | python3 export_grid_sample.py |
4. 转换成om模型
- 使用 ATC 工具将 ONNX 模型转换为 OM 模型:
1 | atc --model=grid_sample_model.onnx --framework=5 --output=grid_sample_model --input_shape="input_x:1,1,64,64;input_grid:1,64,64,2" --soc_version=Ascend910B3 |
5. 开始推理验证
- 安装ais_bench推理工具:从tools: Ascend tools - Gitee.com,通过源代码编译安装
1 | cd tools-master/ais-bench_workload/tool/ais_bench |
- 生成输入数据
generate_bin.py
1 | mkdir prep_dataset |
1 | import torch |
运行脚本生成二进制输入文件,并创建相应目录:
1 | python3 generate_bin.py |
- 使用 ais_bench 进行推理
1 | cd .. |
6. 更多性能数据
创建或编辑 acl.json
文件:
1 | vim acl.json |
1 | { |
执行推理并采集性能数据:
1 | python3 -m ais_bench --model ./grid_sample_model.om --acl_json_path ./acl.json |
7. 算子支持与注意事项
- 查看CANN算子规格
如果使用GridSampler3D:
1 | vim export_grid_sample_3D.py |
1 | import torch |
1 | python3 export_grid_sample_3D.py |
GridSampler2D 与 GridSampler3D 的限制
PyTorch ONNX 导出限制:目前
torch.onnx.export
仅支持 2D GridSample(4D 输入),不支持 3D(5D)输入,会报错。Ascend AI Core 支持:
- GridSampler3D 有 AI Core Kernel 实现,需 float32 前向;
- GridSampler2D 目前仅支持在 AICPU 上执行,无法使用 AI Core。
3D grid_sample 的计算量通常远大于 2D,如果本来只是个 2D 任务,用 3D 人工加一维度可能并不能带来真正的功能收益,只是为了能够在 AI Core上执行。
这是一个前向支持 / 后向不支持的状况。如果要在 Ascend AI Core 上做推理,又通过 ONNX/OM 流程,目前没有官方开箱可行的方案。
8. 解决思路:
面对上述限制,以下是可能的应对思路:
使用 2D GridSample:如果不强制使用 AI Core 加速,可使用 2D GridSample,会在 AICPU 上运行,性能较低但流程简单。
直接在 PyTorch + Ascend NPU 上推理:跳过 ONNX/OM 转换,使用
torch_npu
在 Ascend NPU 上直接运行模型。使用 GridSampler3D:
构造 5D 输入
x
(形状[N, C, D, H, W]
,dtype float32)和 5D 网格grid
(形状[N, D, H, W, 3]
,dtype float32)。在计算图中添加 GridSampler3D 节点,并设置相关属性。
使用 ATC 或其他编译器,将计算图编译为
.om
文件,在 AI Core 上执行。注意这种方式需要深入了解 Ascend 图编译流程。
自定义实现:自行实现 3D GridSample 的 ONNX symbolic 函数或 Ascend 自定义算子,但工作量较大。
9. 查询算子支持
- 使用
ms_fast_query
工具查询算子支持情况:
1 | cd /usr/local/Ascend/ascend-toolkit/latest/tools/ms_fast_query |
查询结果会生成在指定的 op.json
文件中,可用于查看算子支持详情。
10. 查看算子原型
1 | cd /usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_proto/ |