沉迷单车的追风少年
CSDN博客专家,CSDN商业化专家,官方内容合作伙伴,官方认证“人工智能领域优质创作者”,入选2023年中国开发者影响力年度榜单。
代表专栏《Diffusion Models与深度学习》、《手把手写深度学习》、《深度学习-计算机视觉》、《手把手写C++服务器》等。
展开
-
NCNN源码学习(1):Mat详解
最原始的发行版本代码比较简洁,我们从2017年ncnn第一次开源的版本阅读mat的源码。阅读源码味如嚼蜡,下面就开始吧!构造函数内存分配数据成员申请和释放内存引用计数辅助函数填充函数fill原创 2024-07-12 21:30:00 · 1115 阅读 · 2 评论 -
如何在手机端部署大型扩散模型?
部署扩散模型面临着两个棘手的挑战:参数过大和推理时间过长,因此目前想在手机端用上扩散模型看似“奢不可求”。最近谷歌研究院的最新一项研究研究了如何把端侧部署大型扩散模型的梦想变成现实,这篇博客就和大家一起学习一下。原创 2023-05-04 07:45:00 · 676 阅读 · 4 评论 -
KuiperInfer深度学习推理框架-源码阅读和二次开发(3):计算图
KuiperInfer是一个从零实现一个高性能的深度学习推理库,中文教程已经非常完善了。本系列博客主要是自己学习的一点笔记和二次开发的教程,欢迎更多的AI推理爱好者一起来玩。这篇写一下计算图相关的知识点,重点说明ONNX有什么缺点?为什么选择PNNX?如何构建计算图?PNNX的计算图里有哪些优化手段值得学习?原创 2023-05-22 10:55:02 · 581 阅读 · 4 评论 -
《美团机器学习实践》读后感和一点思考
最近拜读了美团算法团队出品的《美团机器学习实践》,这本书写于2018年,一个大模型还没有标配的时代。这本书侧重于工业界的实践,能清楚地让我们了解到工业界和学术界对机器学习的关注方向上的差异,值得一读。因为我是重点做模型工程/模型部署方向的,所以重点关注这个方面,汲取美团技术团队的经验。原创 2023-04-29 07:45:00 · 1975 阅读 · 8 评论 -
KuiperInfer深度学习推理框架-源码阅读和二次开发(2):算子开发流程(以sigmoid为例)
KuiperInfer是一个从零实现一个高性能的深度学习推理库,中文教程已经非常完善了。本系列博客主要是自己学习的一点笔记和二次开发的教程,欢迎更多的AI推理爱好者一起来玩。这篇写一下算子开发流程,以sigmoid算子为例,为下一节我们自己手写算子打下基础。原创 2023-04-24 07:45:00 · 857 阅读 · 10 评论 -
KuiperInfer深度学习推理框架-源码阅读和二次开发(1):算子开发流程之算子注册机制详解
KuiperInfer是一个从零实现一个高性能的深度学习推理库,中文教程已经非常完善了。本系列博客主要是自己学习的一点笔记和二次开发的教程,欢迎更多的AI推理爱好者一起来玩。这篇写一下算子开发流程,重点是算子注册机制和背后的知识点,并和其他的深度学习框架(如AI编译器CINN、paddle推理inference等)对比,总结其中的异同点。原创 2023-04-14 21:57:45 · 1377 阅读 · 19 评论 -
深度学习编译器CINN(3):编译过程中遇到的问题总结
这是因为cinn的build.sh里面写的是python3.6环境,而自己的python环境是python3.7。但是如果改变build.sh,编译的时候代码检查会无法通过,所以只能改变本机的python版本。这里其实是官方写错了,如果不熟悉docker的同学肯定很懵逼。这是因为编译后的环境变量没有设置,需要export进来。然后重新执行所有的编译步骤。官方给的代码写错了,真拉……成功后才能执行这一步。需要重新编译一下ci。原创 2023-03-02 15:42:31 · 321 阅读 · 10 评论 -
深度学习编器CINN(2):以reciprocal算子为例看算子开发方法
必看的一些参考资料:1、匿名函数C++知识:匿名函数Lambda_c++ 匿名函数_无水先生的博客-CSDN博客CINN中用了大量的匿名函数,需要掌握其用法。2、官方教程《深度学习编译器算子应用与开发介绍》飞桨AI Studio - 人工智能学习与实训社区3、《手把手教你为神经网络编译器CINN增加One-Hot算子》手把手教你为神经网络编译器CINN增加One-Hot算子_飞桨PaddlePaddle的博客-CSDN博客官方出品,必看。4、官方 CINN基础算子代码开发示例大概就这些,原创 2023-02-27 11:07:46 · 959 阅读 · 21 评论 -
深度学习编译器CINN(1):框架概览和编译安装
不同于深度学习框架算子,深度学习编译器算子的粒度更细,算子数目也更少,因此在算子融合和自动调优方面具有更大的优势。在对接上层框架时,编译器会将上层的框架算子进一步拆分为若干基础算子,这样做的目的一方面是为了减少算子开发的工作量,仅实现有限的基础算子便可以组合出大量的上层框架算子;另一方面便于算子融合技术在编译器中可以实现跨算子自动融合,减少最终执行时的kernel数目和访存开销,达到更好的性能;此外,结合自动调优技术使得编译器可以自动优化融合后的kernel,提升kernel性能。原创 2023-02-24 10:41:03 · 909 阅读 · 23 评论 -
记录Android Studio连接华为(nova)手机鸿蒙系统踩过的坑
鸿蒙系统的华为老机子比较麻烦,坑有点多,兄弟们加油!原创 2022-12-22 07:45:00 · 6678 阅读 · 20 评论 -
记录NCNN Yolov5部署华为鸿蒙系统踩过的坑
上网搜索后会有很多乱七八糟的配置过程,很多居然需要从yolo模型导出、修改层参数等步骤,非常劝退啊。进行就可以了,只需要三步即可。当然会遇到很多坑,我都记录下来了。特别是作为一个客户端开发0基础的人,有点懵。放一张我的效果图,希望大家学习ncnn能够顺利!原创 2023-01-01 12:50:52 · 1868 阅读 · 12 评论 -
《机器学习系统:设计和实现》读后感和一些思考
编译器后端处于前端和硬件驱动层中间,主要负责计算图优化、算子选择和内存分配的任务。首先,需要根据硬件设备的特性将IR图进行等价图变换,以便在硬件上能够找到对应的执行算子,该过程是计算图优化的重要步骤之一。前端IR生成是解析用户代码,属于一个较高的抽象层次,隐藏一些底层运行的细节信息,此时无法直接对应硬件上的算子(算子是设备上的基本计算序列,例如MatMul、Convolution和ReLU等),需要将细节信息进行展开后,才能映射到目标硬件上的算子。原创 2023-02-15 11:15:40 · 940 阅读 · 21 评论