推出自己的梯度计算模块通常不是一个好主意,因为由工具包来提供显然更容易,atv,更快速地。所以,要么有自己的计算图工具包和自动分化模块或使用外部包。 由于每个节点处的导数必须仅相对于其相邻节点计算,所以可以将计算梯度的方法添加到类中并且可以由微分模块调用。 5. BLAS / cuBLAS和cuDNN扩展 使用所有上述组件,你可以拥有一个功能齐全的深度学习框架。它将能够将数据作为输入并转换为张量,以有效的方式对它们执行操作、计算梯度以学习并返回测试数据集的结果。然而,问题在于,因为你最有可能在高级语言(Java / Python / Lua)中实现它,所以你可以得到的加速 是有上限的。这是因为即使在高级语言中最简单的操作也比在低级语言中完成时花费更多的时间(CPU周期)。 在这些情况下,我们可以采取两种不同的方法。 第一个是来自编译器的另一个类推。编译过程的最后一步是 Assembly中生成的特定的硬件代码。类似地,不是运行以高级语言编写的图,而是在C中生成用于网络的相应代码,并且其被编译和执行。它的代码存储在每个Ops中,并且可以在编译阶段合并在一起。通过包装器 (wrappers)(如pyCUDA和Cython)实现从低级到高级代码数据传输。 第二种方法是使用像C ++这样的低级语言实现后端,这意味着低级语言 - 高级语言交互内部框架是与前面的方法不同的,并且可以更快,因为我们不需要每次都编译整个图。相反,我们可以使用适当的参数调用编译的方法。 非最优行为的另一个来源来自低级语言的缓慢实现。编写高效的代码十分困难,我们更好优化了这些方法实现的库。 BLAS或基本线性代数子程序是优化矩阵运算的集合,最初用Fortran 编写。这些可以用于做非常快的矩阵(张量)操作,并且可以提供显著的加速。还有许多其他软件包,如英特尔MKL,ATLAS也执行类似的功能。你可以根据自己的偏好进行选择。 BLAS包通常是已经优化的,其前提假设是指令将在CPU上运行。在深度学习中,情况并非如此,BLAS可能无法充分利用GPU提供的并行性。为了解决这个问题,NVIDIA发布了针对GPU优化的cuBLAS,现在包括在CUDA工具包中。最后,cuDNN是一个基于cuBLAS的功能集的库,并提供优化的神经网络特定操作,如Winograd卷积和RNN。 因此,通过使用这些软件包就可以框架中获得显著的加速。加速在DL中十分要,这是你训练神经网络只花费四个小时而不是四天的原因。在快速变化的AI创业公司中,速度就是你能成为领跑的还是追赶别人的关键。 总结 现在,你已经了解了不同框架之间的相似的特性,可以更好地认识和使用一个深度学习框架。对于不仅对学会使用深度学习框架感兴趣,了解各个常用框架的内部组成和共性特征,还有助于你自己动手搭建深度框架。 优秀的工程师/研究员不仅要知道自己该使用哪种工具,还应该知道为什么这个工具才是最好的选择。 深度学习框架基本要素编译自:https://medium.com/@gokul_uf/the-anatomy-of-deep-learning-frameworks-46e2a7af5e47#.x8ilbhdqv 【进入新智元公众号,在对话框输入“谷歌MLppt”下载文档】
【寻找AI独角兽】新智元联手10大资本 启动2017创业大赛 AI 创业大赛由新智元与10 家主流 AI 创投机构:蓝驰创投、红杉资本中国基金、高瓴智成人工智能基金、蓝湖资本、蓝象资本、IDG资本、高榕资本、中信建投证券、明势资本、松禾远望基金携手发起,由新智元主办,北京市中关村科技园区管理委员会、中关村科技园区海淀园管理委员会支持,是一场聚合了 AI 技术领袖和投资领袖的盛会。新智元向满怀雄心的未来AI独角兽提供强大的创投资源对接机会,顶级风投 TS 等你来拿。 点击文章下方阅读原文,在线填写报名申请报名表。该报名表为参与评选必填资料。 如有更多介绍资料(例如BP等),可发送至 [email protected],邮件标题请注明公司名称。如有任何咨询问题,也欢迎向该邮箱发信联系。 大赛咨询,请添加新智元微信号: (责任编辑:本港台直播) |