- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 NPU上如何使能pytorch图模式
PyTorch 的 torch.compile 是一个强大的功能,用于优化 PyTorch 模型的性能。它通过将 PyTorch 的动态图转换为静态图,并利用 Just-In-Time(JIT)编译技术,显著提高模型的推理速度和训练效率。
2025-03-24 15:27:48
716
原创 NPU上运行onnxruntime
显示的是cuda的组件找不到。由于是Ascend环境,肯定是没有GPU的,很明显是onnxruntime的包装错了。那么该如何才能构建onnxruntime适配Ascend上的whl包呢?通过如上命令,可以看到环境上确实安装的是gpu版本的。注意**–use_cann**参数。
2025-03-10 19:45:36
244
原创 MindIE BenchMark
服务化MindIE Benchmark工具是通过部署昇腾服务化配套包后,以调用终端命令的方式测试大语言模型在不同配置参数下的推理性能和精度,并通过表格的形式展示模型在各个阶段的推理耗时(例如FirstTokenTime、DecodeTime等),以及对应时延的平均值、最小值、最大值、75分位(P75)、90分位(P90、SLO_P90)和99分位(P99)概率统计值,最后将计算结果保存到本地csv文件中。它包括:需要计算和推理的自然科学,需要知识的人文科学和社会科学,以及需要生活常识的中国驾驶规则等。
2025-02-24 19:44:27
921
原创 Ascend+FastAPI+ Uvicorn 实现推理
Uvicorn是一个基于ASGI(AsynchronousServerGatewayInterface)的轻量级异步服务器,用于运行PythonWeb应用程序,特别是那些基于ASGI的现代异步框架,如FastAPI、Starlette等。在这个例子中,我们定义了两个路由:一个根路由/和一个带参数的路由/items/{item_id}。然后就是,以FastAPI+Uvicorn启动一个web服务,通过generate_chat_output运行推理,获取推理结果。
2025-01-20 09:13:48
993
原创 MindIE推理采样后处理参数temperature和top_k的引发的精度问题
使用MindeIE进行推理,后采样参数temperature的和top_k设置。
2025-01-14 09:55:12
376
原创 Attention计算中的各个矩阵的维度都是如何一步步变化的?
在Transformer模型中,各个矩阵的维度变化是一个关键的过程,涉及到输入、编码器、解码器和输出等多个阶段。
2025-01-09 15:57:51
735
原创 解决Ascend上vllm运行时出现urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
在Ascend上运行vllm测试
2024-12-25 17:27:04
449
原创 AscendC编程中的double buffer是什么?
在此过程中,数据搬运与Vector计算串行执行,Vector计算单元无可避免存在资源闲置问题。举例而言,若CopyIn、Compute、CopyOut三阶段分别耗时t,则Vector的时间利用率仅为1/3,等待时间过长,Vector利用率严重不足。如图1所示,考虑一个完整的数据搬运和计算过程,CopyIn过程将数据从Global Memory搬运到Local Memory,Vector计算单元完成计算后,经过CopyOut过程将计算结果搬回Global Memory。
2024-12-24 10:03:31
449
原创 AscendC从入门到精通系列(五)调用基于工程开发AscendC算子
单算子API调用方式,是指直接调用单算子API接口,基于C语言的API执行算子。算子工程创建完成后,基于工程代码框架完成算子原型定义、kernel侧算子实现、host侧tiling实现,通过工程编译脚本完成算子的编译部署,之后再进行单算子API的调用。
2024-11-09 14:12:24
636
原创 AscendC从入门到精通系列(四)使用Pybind调用AscendC算子
通过PyTorch框架进行模型的训练、推理时,会调用很多算子进行计算,其中的调用方式与kernel编译流程有关。对于自定义算子工程,需要使用PyTorch Ascend Adapter中的OP-Plugin算子插件对功能进行扩展,让torch可以直接调用自定义算子包中的算子,详细内容可以参考PyTorch框架;对于KernelLaunch开放式算子编程的方式,通过适配Pybind调用,可以实现PyTorch框架调用算子kernel程序。
2024-11-09 13:59:59
799
原创 AscendC从入门到精通系列(三)基于自定义算子工程开发AscendC算子
``yaml```java"ND"],"type": ["fp16"},"ND"],"type": ["fp16"],"ND"],"type": ["fp16"核函数的定义,并在核函数中调用算子类的Init和Process函数。// 获取Host侧传入的Tiling参数// 初始化算子类// 算子类的初始化函数,完成内存初始化相关工作// 完成算子实现的核心逻辑。
2024-11-09 13:47:48
1237
原创 AscendC从入门到精通系列(二)基于Kernel直调开发AscendC算子
首先要根据核函数定义 核函数-编程模型-Ascend C算子开发-算子开发-开发指南-CANN社区版8.0.RC3.alpha003开发文档-昇腾社区 (hiascend.com) 的规则进行核函数的定义,并在核函数中调用算子类的Init和Process函数。// 给CPU调用// 给NPU调用#endifpublic:// 初始化函数,完成内存初始化相关操作// 核心处理函数,实现算子逻辑,调用私有成员函数CopyIn、Compute、CopyOut完成矢量算子的三级流水操作。
2024-11-09 13:27:04
788
原创 AscendC从入门到精通系列(一)初步感知AscendC
Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,兼具开发效率和运行性能。基于Ascend C编写的算子程序,通过编译器编译和运行时调度,运行在昇腾AI处理器上。使用Ascend C,开发者可以基于昇腾AI硬件,高效的实现自定义的创新算法。
2024-11-08 16:49:50
724
原创 如何在c++侧编译运行一个aclnn(AOL)算子?
CANN(Compute Architecture for Neural Networks)提供了算子加速库(Ascend Operator Library,简称AOL)。该库提供了一系列丰富且深度优化过的高性能算子API,更亲和昇腾AI处理器,调用流程如图1所示。开发者可直接调用算子库API使能模型创新与应用,以进一步提升开发效率和获取极致模型性能。其中aclnnXxxGetWorkspaceSize为第一段接口,主要用于计算本次API调用计算过程中需要多少的workspace内存。
2024-11-08 16:46:41
813
原创 Ascend推理组件MindIE LLM
是MindIE解决方案下的大语言模型推理组件,基于昇腾硬件提供业界通用大模型推理能力,同时提供多并发请求的调度功能,支持Continuous Batching、PageAttention、FlashDecoding等加速特性,使能用户高性能推理需求。MindIE LLM主要提供大模型推理。
2024-11-08 16:40:36
838
原创 ATB概念之:算子tiling
在计算机科学和深度学习领域,算子 tiling(有时也被称作操作符 tiling 或者循环 tiling)是一种优化技术,主要用于提高计算效率,尤其是在处理大规模张量运算时。Tiling 技术通常用于将大的计算任务分解成更小的块,这些小块可以在内存中更高效地处理,或者更适合并行计算环境。需要注意的是,“tiling”一词在不同的上下文中可能有不同的含义。在图像处理中,tiling 也可能指的是将图像分割成多个小块(tiles),以便于独立处理或存储。
2024-11-08 16:35:46
916
原创 如何使用Ascend的ATB加速库?
Ascend Transformer Boost加速库(下文简称为ATB加速库)是一款高效、可靠的加速库,基于华为Ascend AI处理器,专门为Transformer类模型的训练和推理而设计。具体请阅读:ATB是什么?- 知乎 (zhihu.com)那么程序猿小白如何实现一个ATB算子呢?
2024-11-08 16:29:11
1011
原创 ATB算子实现原理解读
Context类是用于存放与管理ATB内各种公共资源的类,其包含了以下资源:两条stream、控制时序的事件、host内存池、device内存池、Runner池、溢出检测张量。两条stream分别用于kernel执行与tiling data的拷贝,kernel执行的stream由用户设置,tiling data拷贝的stream则由ATB本身来创建。当不开启多stream功能时,用于tiling data拷贝的stream将不会创建。
2024-11-08 16:10:12
1011
原创 ATB是什么?
Ascend Transformer Boost加速库(下文简称为ATB加速库)是一款高效、可靠的加速库,基于华为Ascend AI处理器,专门为Transformer类模型的训练和推理而设计。ATB加速库采用了一系列优化策略,包括算法优化、硬件优化和软件优化,能够显著提升Transformer模型的训练和推理速度,同时降低能耗和成本。具体来说,ATB加速库通过优化矩阵乘法等核心算子和注意力机制的实现方式,实现了对Transformer模型的高效加速。
2024-11-08 15:54:20
1285
原创 Ascend上的PageAttention
Paged Attention 是一种较为高级的技术,它的实现通常需要在具体的应用框架中找到相关的API支持,或者自己编写代码来实现这种机制。在华为昇腾AI处理器的API文档中提到的 PagedAttentionOperation 就是这样一种操作,它提供了分页注意力机制的具体实现方式。通过这些架构和优化,PageAttention显著提高了大型语言模型的服务效率,降低了延迟,提升了整体性能。ascend上的PagedAttention实现为,它是可通过atb算子实现。
2024-11-08 15:48:36
927
原创 SelfAttention在Ascend上的实现
Query (Q):查询向量,代表了模型需要关注的部分。Key (K):键向量,代表了输入序列中各个位置的信息。Value (V):值向量,包含了实际的信息内容。线性变换:首先将输入数据通过三个不同的线性变换(即三个权重矩阵)得到 Query、Key 和 Value 向量。计算注意力分数:将 Query 向量与所有 Key 向量进行点积操作,并将结果除以 Key 向量的维度开根号,以获得未归一化的注意力得分(有时称为注意力分数)。Softmax 归一化。
2024-11-08 15:34:52
1042
原创 Ascend上的FlashAttention实现
FlashAttention是一种优化Transformer模型计算效率和内存使用的技术。它通过减少存储访问开销(Memory Access Cost,MAC),而非降低FLOPS(浮点运算次数),来提升性能。
2024-11-08 15:10:37
1176
原创 Ascend Extension for PyTorch是个what?
Ascend Extension for PyTorch 插件是基于昇腾的深度学习适配框架,使昇腾NPU可以支持PyTorch框架,为PyTorch框架的使用者提供昇腾AI处理器的超强算力。项目源码地址请参见LINK。昇腾为基于昇腾处理器和软件的行业应用及服务提供全栈AI计算基础设施。您可以通过访问昇腾社区,了解关于昇腾的更多信息。
2024-11-08 15:02:13
1293
原创 Ascend Extension for PyTorch的源码解析
Ascend对pytorch代码的适配,可从以下链接中获取。执行如下命令即可。
2024-11-08 14:57:18
600
原创 msprofiler前置知识:如何看懂tracing profile文件?
Tracing 是一种收集程序执行过程中事件的技术。它记录了程序运行时发生的事件,如函数调用、I/O操作、系统调用等。在Web开发中,Tracing 通常用于收集浏览器渲染页面时的性能数据,包括CPU活动、内存使用情况、网络请求等。点击Load,可以导入profiler生成的JSON文件。操作:按键盘w, a, s, d键,可以对profiler的结果进行缩放和移动。
2024-11-08 14:48:26
690
原创 Ascend C的编程模型
Ascend C和cudnn相似,都是一种多核心编程的范式。想要了解Ascend C,必须得先掌握这种“多核”是怎么实现得。
2024-11-08 14:42:20
911
原创 什么是CANN和Ascend C
异构计算架构CANN(Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构,向上支持多种AI框架,包括MindSpore、PyTorch、TensorFlow等,向下服务AI处理器与编程,发挥承上启下的关键作用,是提升昇腾AI处理器计算效率的关键平台。同时针对多样化应用场景,提供多层次编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。
2024-11-08 14:35:12
1492
原创 VIM快捷键收藏
vim括号匹配和跳转技巧% 跳转到相配对的括号gd 跳转到局部变量的定义处‘’ 跳转到光标上次停靠的地方, 是两个’, 而不是一个"mx 设置书签,x只能是a-z的26个字母`x 跳转到书签处("`"是1左边的键)> 增加缩进,"x>"表示增加以下x行的缩进< 减少缩进,"x<"表示减少以下x行的缩进{ 跳到上一段的开头} 跳到下一段的的开头( 移到这个句子的开头) 移到下一个句子的开头[[ 跳转至上一个函数(要求代码块中’{‘必须单独占一行)]] 跳转至下
2021-11-09 14:56:21
138
原创 为clion添加cpplint cppcheck
cpplintroot=src --extensions=cxx,cu,hh,cpp,hxx,cuh,h++,cc,c,hpp,c++,h --filter=-build/header_guard,-build/c++11 --quiet --linelength=120cppcheckenable=warning,performance,portability,style --language=c++ --force --enable=style --inline-suppr
2021-10-27 20:16:48
867
原创 桶映射
我们将 int范围内的每一个整数 x 表示为 x = (t + 1) *a + b(0<=b <=t)的形式,这样 x即归属于编号为 a的桶,桶的大小为t+1,int getID(int x, long w) { return x < 0 ? (x + 1ll) / w - 1 : x / w;}如w=10, 因为非负数是09,1019…这种一组,而负数是-1~-10, -11-20…这些是一组,如果-1~-10直接除以10,会被分到两组中,而不是-1这一组,所以先+1变成-0–
2021-04-17 21:42:17
150
原创 防止大数相加或相减溢出
1、nums[r]与t相减,可能会溢出2、nums[r]与t相加,可能会溢出auto iter = rec.lower_bound(max(nums[r], INT_MIN + t) - t); if (iter != rec.end() && *iter <= min(nums[r], INT_MAX - t) + t) { return true; }...
2021-04-17 12:53:51
336
原创 理解十大排序算法
十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。1、冒泡排序1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最.
2021-04-14 21:34:01
92
原创 二叉树的四种迭代遍历方式
1、先序遍历首先访问根节点,然后根据栈后进先出的特点,访问右节点,左节点。void iterativePreorder(Node *node){ if (node == nullptr) { return; } stack<BinaryTreeNode> stack; stack.push(node); while (!stack.empty()) { node = stack.top(); stack
2021-04-13 21:32:12
280
原创 滑动窗口
无重复最长字串class Solution {public: int lengthOfLongestSubstring(string s) { if(s.size() == 0) return 0; unordered_set<char> lookup; int maxStr = 0; int left = 0; for(int i = 0; i < s.size(); i++){
2021-04-13 20:24:55
88
原创 c++左值和右值
https://blog.youkuaiyun.com/xuwqiang1994/article/details/79924310
2021-04-09 14:41:03
96
原创 c++ const
1、函数前后的const函数前面的const: 返回值为const,const的对象,不能引用非const的成员函数。函数后面的const: const函数,const的函数不能对其数据成员进行修改操作。class A{public: int a1() { _a = 10; return _a; } int a2()const { return _a; } int a3()const { //_a = 30; //报错 const的函数不能对其数据成员进行修改操作。
2021-04-09 14:27:24
72
原创 自定义priority_queue,equal_range比较函数
1、自定义priority_queue通过decltype来声明cmp类型 auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1);}; std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);2、自定义equal_rangestruct S{ int number; char name;
2021-04-08 14:37:09
262
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人