超简单的卷积和加法融合,伪代码版

原创文章请勿随意转载,如有需要,请于作者联系。

前几天写了一个卷积神经网络(CNN)中,卷积和加法融合的文章。有同学问,希望写一个带代码版本的,方便更好的理解。

我的第一反应是,代码版本的咋写,有那么多细节。后来一想,其实那位同学想知道的并不是那些细节,而是一个大致的流程。

那我就简单写一个伪代码版的吧,把大致的代码思路写一下。

至于具体卷积算法怎么实现的,建议chatGPT一下,或者看下开源深度学习仓库就行。

如果没看之前的文章,可以看上一看:超简单的卷积和加法融合

还是以 resnet50 中的图为例,做一个卷积和加法的融合。

正常情况下,上述网络片段在执行的时候大概是这样的:

BatchNorm -> Relu -> Conv -| Add的左分支|                -> Add-> Conv -| Add的右分支

写出伪代码,实际上就是一种顺序调用逻辑,比如

bn_out = Batch_normal();
relu_out = Relu(bn_out);
conv_out_left = Conv2d(relu_out)
conv_out_right = Conv2d(...)
add_out = Add(conv_out_left, conv_out_right)

而一旦融合完之后,上图红框中的Conv 和 Add 就变成了一个算子,这里暂且称这个融合之后的算子为 ConvAdd 算子。

于是,上述的图,就变成了如下的图:

此时,整个网络片段的调用逻辑变成了:

bn_out = Batch_normal();
relu_out = Relu(bn_out);
conv_out_right = Conv2d(...)
add_out = ConvAdd(relu_out, conv_out_right)

再把 ConvAdd 当做一个算子之后,便可以进行很多融合、拆图、流水并行操作。

假设现在这个网络运行在一个Asic芯片上,芯片上卷积计算模块和加法计算模块是互相独立的,没有任何依赖。

这里假设卷积输入的 Feature Map 的大小是 [n, hi, wi, ci],卷积核是[co, kh, kw, ci]。

其余参数简化一下,将卷积 pad 简化为0,stride 简化为1,dilation简化为1。

卷积的输出为[n, ho, wo, co]。

那么卷积后面的加法,执行的两个tensor相加,也就变成了 [n, ho, wo, co] + [n, ho, wo, co] = [n, ho, wo, co]。

那么,我们将卷积的输入(假设是下面的一张图),在H方向切成两份。

那么计算完一整张图,需要调用两次卷积运算,第一次计算上半部分,第二次计算下半部分。

两次计算中,大部分像素之间是没有关系的,仅仅在两部分交界的地方会有可能存在依赖。(存在依赖的条件为 kernel 大于1,或者 stride 大于1,这些情况先不考虑,暂时认为两部分像素没有关系)。

那么第一次卷积计算,计算的输入是 [n, hi/2, wi, ci],计算输出结果是 [n, ho/2, wo, co]。此时计算的是前半部分的 hi。用加黑表示。

那么第二次卷积计算,计算的输入是 [n, hi/2, wi, ci],计算输出结果是 [n, ho/2, wo, co]。此时计算的是后半部分的 hi。用斜体表示。

同理,加法也会被分成两次计算,分别对应计算卷积的两次输出:

第一次加法,计算的是第一次卷积的输出,即 [n, ho/2, wo, co]

第二次加法,计算的是第二次卷积的输出,即 [n, ho/2, wo, co]

那么,在两次计算的情况下,ConvAdd 这一个算子中,内部的实现逻辑大致应该是:

conv_out_part1 = Conv2d(part1)
conv_out_part2 = Conv2d(part2)
add_out_part1 = Add(conv_out_part1)
add_out_part2 = Add(conv_out_part2)

但是这样显然是不行的,因为这样写还是串行执行:执行完第一次卷积执行第二次卷积,执行完第二次卷积执行第一次加法...那怎么让 Conv 和 Add 并行起来呢?

通过观察可以发现,第一次的Add并不依赖第二次的Conv,并且我们已经假设了Asic芯片上Conv运算模块和Add模块完全独立。

那么让第二次Conv和第一次Add并行起来的方法就是:第一次Conv计算完之后,直接计算第一次Add,然后同时并行第二次Conv,这个时候,代码的实现大致是这样:

conv1 = Conv2d(part1)
-----------------------
add1 = Add(conv1)      
conv2 = Conv2d(part2) 
-----------------------
add2 = Add(conv2)

这个时候,Add 和 conv 在中间的一个流水级中并行起来了。

所谓的一个流水级,指的是上面代码段中两个“ ------ ” 之间的代码,称之为在一个流水级中。

那如果将图片拆成更多份,那可以并行的流水级就会更多。

比如拆成4份,那可以有3个流水级中的Conv和Add并行起来。

conv1 = Conv2d(part1)
-----------------------
add1 = Add(conv1)      
conv2 = Conv2d(part2) 
-----------------------
add2 = Add(conv2)
conv3 = Conv2d(part3) 
-----------------------
add3 = Add(conv3)      
conv4 = Conv2d(part4) 
-----------------------
add4 = Add(conv4)      
-----------------------

需要说明一点的是,上面伪代码中,每一个 “-----” 其实都代表了一个同步点。在实际部署到硬件上运行时,需要在这些同步点上设置同步操作,用来使上一个流水级中的所有计算操作全部完成即可。

常用的同步操作有一些同步指令或者barrier指令。假设我们使用barrier指令来进行同步,那么上述完整的伪代码便是:

conv1 = Conv2d(part1)
barrier()add1 = Add(conv1)      
conv2 = Conv2d(part2) 
barrier()add2 = Add(conv2)
conv3 = Conv2d(part3) 
barrier()add3 = Add(conv3)      
conv4 = Conv2d(part4) 
barrier()add4 = Add(conv4)      
barrier()

当然上述代码看起来太长了,可以写成循环的形式,还是以将H方向拆分 4 份为例:

conv1 = Conv2d(part1);
barrier();for i in range(1, 4):add_i = Add(convi)Conv_i+1 = Conv2d(part_i+1)barrier()add4 = Add(conv4)      
barrier()

伪代码的逻辑还是很简单的,关键是需要理解Conv和Add并行流水的思想。

这种方法可以用到的融合场景很多,并不仅仅局限于Conv和Add这两个算子,也不局限于某一个神经网络。

只要是在硬件上计算单元可以并行执行,并且在神经网络结构图上前后有依赖的层,几乎都可以这么进行融合来提升整体性能。



v v v v v v

本文为作者原创,请勿转载,转载请联系作者。
点击下方卡片,关注我的公众号,有最新的文章和项目动态。

v v v v v v

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10638.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习NLP】基于卷积神经网络(CNN)实现中文文本情感分析(分类)附代码以及数据集链接

【注】:本文所述的实验的完整实现代码包括数据集的仓库链接会在文末给出(建议读者自行配置GPU来加速TensorFlow的相关模型,运行起来会快非常多) 目录 一、研究的背景和目的 二、文本数据集描述 1、数据集来源以及使用目的 2、数据规模、以及如何划分…

Stability AI 创始人:大模型不应该只属于巨头

作者 | 凌梓郡 编辑 | 靖宇 追溯 ChatGPT 引发的 AI 军备竞赛,可以回到去年 7 月,图像生成模型 Stability Diffusion 开源(下文称 SD)。这个在 Open AI 的绘画模型 DALL- E2 之后发布的模型,因其源代码开源&#xff0c…

谷歌员工担心自家 AI 敌不过 ChatGPT,高管回应:其过快发展可能损害公司

来源:AI前线 整理:冬梅、核子可乐 谷歌的 Jeff Dean 表示,一旦提供错误信息、大企业所面临的“声誉风险”要比小公司更严重,所以谷歌自然“比小型初创公司更加保守”。 自 11 月底以来,AI 聊天机器人 ChatGPT 正式向公…

我让Chat GPT准备了几份SAP 顾问英文面试自我介绍的模板,大家感受一下

有个朋友说有个面试要用英文来做自我介绍,我灵机一动,不如让Chat GPT准备了几份SAP 顾问英文面试自我介绍的模板,大家感受一下。我看下来感觉写的还是中规中矩,可以一用,。 模板1 Sure, I can help you with that! Her…

从语言模型到ChatGPT:大型语言模型的发展和应用

前言 为获取最佳阅读格式体验,建议访问个人博客:从语言模型到ChatGPT:大型语言模型的发展和应用 | JMX Blog 大型语言模型(LLM)是指能够处理大量自然语言数据的深度学习模型,它已经在自然语言处理、文本生…

OpenAI2022年亏损5.4亿美元;GPT-4等大模型容易导致侵权和社会偏见问题;学而思研发大模型MathGPT丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 携程集团与亚马逊云科技成立联合创新实验室 日前,亚马逊云科技宣布与携程集团共同成立“联合创新实验室”,双方表示联合创新实验室将探索运用云计算、大数据、人工智能和机器学习等前沿技…

云原生周刊 | 使用 ChatGPT 协助解决 Prometheus 告警

开源项目推荐 kubernetes-chatgpt-bot 这是一个适用于 Slack 的 ChatGPT 机器人,只要有监控告警发送到 Slack 频道中,你就可以通过机器人向 ChatGPT 咨询如何解决这个告警,ChatGPT 将会给出一个较为详细的解决方案。 Copacetic Copacetic …

ChatGPT 引发AI服务器霸屏?AI服务器和普通服务器不同在哪?

​  近阶段,由于 ChatGPT 的横空问世,引发 AI 服务器再一次热潮来袭。随之而来的是,越来越多的企业和机构开始关注 AI 服务器和普通服务器之间的区别和对比。那么AI服务器到底是什么意思,它与普通服务器相比又有哪些差异呢? AI…

最全方案:升级成Plus会员,无法进入支付页面问题排查与解决

目录 问题复现 解决方案 更多内容 问题复现 当你帐号注册好了,想要升级成Plus的时候,却发现怎么也进不去支付页面:The payments page encountered an error. Please try again. If the problem continues, please email supportopenai.co…

利用催眠技巧绕开OpenAI的内容政策限制(仅供研究使用)

fork的仓库:https://github.com/JanYork/chatgpt-chinese-prompt-hack 声明:请仅作研究之用,不要违规使用! 在hack成功后,通过屏蔽moderetions的api请求,可以绕过OpenAI对于输出内容的审查. 地址为:https://chat.openai.com/back…

WeTab新标签页:一款可以使用的chatGPT的浏览器主页插件

AI工具 如果你还没有体验过chatGPT,那么Wetab新标签页应该是最方便快捷的一个方式了。Wetab新标签页整合了chatGPT的功能,自带6个源可以切换,日常使用完全够了。可以为你解答包括但不限于历史、科学、文化、社会等方面的问题。 你只需要在扩…

ChatGPT插件与Web网络浏览功能大揭秘!

ChatGPT自身进化速度之快让人常常感觉到惊叹,还在感慨GPT4的强大之时,插件以及web浏览功能已经正式发布。以前,它只能使用它在 2021 年之前学到的信息,但现在,OpenAI 开放了插件功能,让 ChatGPT 可以探索整…

ChatGPT连续宕机五次,是真不把高可用当回事?

最近一段时间以来,ChatGPT 火遍全球,然而在飞速的用户增长下,ChatGPT 却有点不堪重负,两天内宕机了五次。 这次宕机事件,再一次凸显了高可用架构的重要性,毕竟任何一个飞速发展的应用在两天内宕机五次&…

ChatGPT的API接口的模型有多少种?这些模型都有什么功能或者在应用场景上有什么区别?【模型介绍使用与调用接口方法】

OpenAI 的 API 接口提供了多个 GPT-3 模型,每个模型针对不同的应用场景和任务进行了优化。以下是目前可用的 GPT-3 模型: davinci: 这是最大和最全面的模型,具有最高的准确性和灵活性,用于多种自然语言处理任务,如文本生成、对话系统、翻译等。 curie: 这个模型比 davin…

20分钟轻松完成2篇申请文书?ChatGPT到底是黑科技还是黑名单?

自从ChatGPT与2022年底正式出道并走红之后,各大领域都纷纷浮现使用这款人工智能软件完成本属于人类工作的现象。如果你以为它就像手机上呼叫一声就能帮你查看天气或者设置闹钟的机器人一样那就错了,ChatGPT能够在一段对话中结合你给的信息生成复杂且具有…

快速拿下CKA认证考试,这些要求和tips你得知道

一、cka简介 K8S专业技术认证包含: CKA(Kubernetes 管理员认证) CKAD(Kubernetes 应用程序开发者认证) CKS(Kubernetes 认证安全专家。预计2020年11月开放,须先通过CKA认证) 什么…

考公机构用ChatGPT押题上热搜 网友戏称“还有什么是ChatGPT不会的吗?”

考前押题是每个老师在学生心中的“高光”时刻,对参加公务员考试的人来说,名师押题的重要性更加不言而喻。近日,在北京某公务员考试培训班上,一位申论老师使用ChatGPT预测申论考点,并直呼“这么快能答出来很难得”。用C…

电脑连不上网,浏览器网页打不开,但qq微信能发消息

这种情况一般是因为之前电脑挂了VPN或者梯子,未关闭/退出 就把电脑直接关机了,这样会导致电脑DNS域名出问题。 1. 打开Windows系统设置 2. 在搜索栏中搜索Internet选项 3. 点 连接,转到局域网设置 4. 把这一项(局域网(LAN)设置&a…

解决mac可以聊QQ微信不能浏览网页问题

最近用双系统的WINDOWS开了一个本地服务器,用于调试两台手机音视频通话,调试结束切回mac系统,发现浏览器无法打开网页了,而QQ微信还可以联网正常使用,经过一番摸索,解决方案做个记录。 打开 系统偏好设置--…

电脑问题:浏览器打不开网页,但是微信QQ等其他软件都可以联网正常运行

电脑问题:浏览器打不开网页,但是微信QQ等其他软件都可以联网正常运行 解决办法一: 现状一:浏览器不提示具体错误,单纯打不开 原因一:DNS域名解析出错 解决办法: 在WIFI标志处右键打开网络设…