深度学习:从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点?

深度学习工具潮流滚滚,各种工具层出不穷。也有各种文章从易用性,可移植性,灵活性和效率方面对于各个系统进行比较。这篇文章希望从系统设计上面来讲来回答这个讨论这个问题:如果想到从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点。

计算单元:从layer abstraction到operator

大家熟悉的第一代深度学习系统,以cuda-convnet21caffe为代表。这些系统主要的一大特点是提出了一个以深度学习计算层次layer为基本单元的计算单位。不同的layer可以包含权重,并且相互组合。因为有了可以被组合的概念,不同的层次可以被组合在一起,从而可以比较灵活地尝试各种网络结构。

包括Tensorflow在内的比较新的系统一般都采用了和layer稍微有一些区别的模式: operator。operator和layer最大的差别就是不再区分参数和数据,并且参数本身不再是layer的一个成员。这样的好处是可以很容易地实现如不同层之间共享参数的目标。并且可以使得某一层的参数本身也是由某个网络预测得到。当然和layer的模式相比,因为operator本身一般不带有内部状态,会对于一些实现造成一定困难。

更多资源:自动并行调度

新一代系统的一个必不可少的元素就是并行调度算法。 开始的深度学习系统都是针对一个GPU来进行设计。当多卡并行的需求出现之后,并行调度算法的需求就开始体现出来了。一开始的cuda-convnet2和cxxnet都是采取手工编写并行模式的方法。采用多线程进行显卡之间的通信。随着并行模式的多样性和多机多卡等复杂需求的出现,一个系统的调度算法开始变得必不可少。一个深度学习的调度算法需要具有这些特点:

  • 自动并行可以并行执行的程度
  • 同时进行参数拷贝,网络传播和显卡计算
  • 及时触发相关依赖的状态。

具一个简单的例子,在一般的数据并行的场景下,当最高层的梯度被计算完毕之后,我们可以继续反向传播计算更低层的梯度,而与此同时我们必须直接开始吧这个高层计算的梯度拷贝到其他显卡进行梯度的整合。当整合完毕之后又必须马上触发参数更新。这一系列的过程都是和梯度计算同时在不同的显卡下完成的。并行调度算法可以自动地分析计算之间的依赖关系,并且实现这一系列复杂的调度过程,把用户从并行编程的枷锁下解放出来,从而可以实现各种奇葩的并行模式。

更少损耗:基于图的优化

因为引入了计算图的概念。我们可以先像优化数据库系统一样对于计算流图进行各种优化。一个最常见的优化就是通过分析依赖关系来减少深度学习的内存损耗,利用更少的显卡资源来跑更深的网络,或者在资源有限的移动资源上面部署。这一点Tensorflow做的暂时并不好。MXNet在这个方面做了一系列领先的工作,相信未来这样的思想也会被吸收到各个其他工具中去。

灵活性和更快速的交互: TensorFlow欠缺的元素

基于计算图声明的方式虽然可以获得比较多的优化空间。但是这样的编程模式需要用户把所有的操作都声明在一张图里面。与之相对的,像torch, numpy这样直接通过把计算拆开一步一步命令声明的方式更加灵活。命令声明的方式可以允许我们在多个图之间相互交互,并且根据当前的情况运行不同的来决定到底要运行哪一部分。虽然Tensorflow这样的图计算框架也可以分步执行多种操作,但是每个图操作之间的时间损耗相对很大,也无法得到有效的并行。

一边是可以增加效率的声明式图编程,另外一边是更加灵活的过程式编程。如何把这两者有机地结合在一起是包括Tensorflow在内的所有深度学习系统需要思考,并行进行重新设计的问题。

整理这些架构思想?学习MXNet

不管你使用什么框架。如果大家对这些设计感兴趣,并且希望学习如何架构一个包含这些思想的深度学习系统,不妨学习一下MXNet17 。 MXNet利用更加简洁的设计实现了这里介绍的所有思想。并且引入了包括内存优化和灵活交互调度等Tensorflow不具备的元素。 同时MX也具有更多的可扩展性,比较容易引入如Torch1直接整合,分布式parameter server3等各种新特性。

和一般深度学习系统不同的是。除了使用文档,MXNet本身的文档包含了对于模块设计,模块关系和设计算法的具体介绍,并且也有一些同学参与了中文版本的翻译。因为有了这些材料,基于mxnet可以更加容易地掌握所有这些核心的设计思路,并且更加轻便地打造和TF一样甚至超越它的的新一代深度学习系统。

MXnet: https://github.com/dmlc/mxnet

写在最后FOR Freedom 看看外边的世界,以及IT这一行,少不了去Google查资料,最后,安利一个V——PN代理。一枝红杏 VPN,去Google查资料是绝对首选,连接速度快,使用也方便。我买的是99¥一年的,通过这个链接(http://my.yizhihongxing.com/aff.php?aff=2509)注册后输上会员中心得优惠码,平摊下来,每月才7块钱,特实惠。

本文标签: 深度学习 TensorFlow3 架构思想 MXNet

转自 SUN‘S BLOG - 专注互联网知识,分享互联网精神!

原文地址 : 《深度学习:从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点?》
相关阅读:网站环境apache + php + mysql 的XAMPP,如何实现一个服务器上配置多个网站?

相关阅读:什么是工程师文化?各位工程师是为什么活的?作为一个IT或互联网公司为什么要工程师文化?

相关阅读: 对程序员有用:2017最新能上Google的hosts文件下载及总结网友遇到的各种hosts问题解决方法及配置详解

相关阅读:win10永久激活教程以及如何查看windows系统是不是永久激活?

相关BLOG:SUN’S BLOG - 专注互联网知识,分享互联网精神!去看看:www.whosmall.com

时间: 2024-10-08 17:02:52

深度学习:从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点?的相关文章

设计一个电商平台的积分兑换系统

1.业务需求的描述 假设面试官现在给出来对于这个电商平台的积分兑换系统的相关需求如下: 用户在电商平台里平时通过购买商品.晒单评论可以有不断的积累积分积累到足够的积分后,就可以在电商平台的积分兑换页面中,选择使用自己的积分来兑换一些礼品. 需求其实就这么简单,那么面试官说了,针对这个业务场景给出你对这个机制实现的思考过程以及这里要注意的一些地方. 2.对业务流程的思考 如何思考?首先,用户不停的购买商品以及晒单评论,会不断的获取积分,那么是不是需要一张积分表,专门用来存储每个用户的积分呢?没错,

设计一个百万级的消息推送系统

原文链接:https://crossoverjie.top/2018/09/25/netty/million-sms-push/ 前言 首先迟到的祝大家中秋快乐. 最近一周多没有更新了.其实我一直想憋一个大招,分享一些大家感兴趣的干货. 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两天??). 先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互. 最主要的工作就是要有一个系统来支持设备的接入.向设备推送消息:同时还得满足大量设备接入

设计一个百万级的消息推送系统----转

技术选型 要满足大量的连接数.同时支持双全工通信,并且性能也得有保障. 在 Java 技术栈中进行选型首先自然是排除掉了传统 IO. 那就只有选 NIO 了,在这个层面其实选择也不多,考虑到社区.资料维护等方面最终选择了 Netty. 最终的架构图如下: 协议解析 既然是一个消息系统,那自然得和客户端定义好双方的协议格式. 常见和简单的是 HTTP 协议,但我们的需求中有一项需要是双全工的交互方式,同时 HTTP 更多的是服务于浏览器.我们需要的是一个更加精简的协议,减少许多不必要的数据传输.

一篇文章教你如何设计一个百万级的消息推送系统

前言 先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互. 最主要的工作就是要有一个系统来支持设备的接入.向设备推送消息:同时还得满足大量设备接入的需求. 所以本次分享的内容不但可以满足物联网领域同时还支持以下场景: 基于 WEB 的聊天系统(点对点.群聊). WEB 应用中需求服务端推送的场景. 基于 SDK 的消息推送平台. 技术选型 要满足大量的连接数.同时支持双全工通信,并且性能也得有保障. 在 Java 技术栈中进行选型首先自然是排除掉了传统 IO

goweb-如何设计一个Web框架

如何设计一个Web框架 前面十二章介绍了如何通过Go来开发Web应用,介绍了很多基础知识.开发工具和开发技巧,那么我们这一章通过这些知识来实现一个简易的Web框架.通过Go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容:第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑:第三小节介绍处理逻辑,如何设计一个公共的controller,对象继承之后处理函数中如何处理response和r

系统设计题:如何设计一个电商平台积分兑换系统!

1.拉开差距的一类面试题 现在面试经常会遇到一类问题,面试官让你现场设计出某个业务场景下的一个系统,这个系统往往在业务或者技术上有一定难度,主要考察的是你多年积淀下来的系统设计的能力以及技术思维的能力. 类似的这类系统设计题目很多,比如: 请你设计一个秒杀系统 请你设计一个支撑百万用户的IM消息系统 请你设计一个微信红包系统 请你设计一个电商平台积分兑换系统 这些题目本身都是开放式命题,没有固定答案.遇到这种问题,一定不要慌,关键是在现场要思路清楚,有理有据,慢慢分析. 本文就其中一个问题:设计

8.如何自己设计一个类似 Dubbo 的 RPC 框架?

作者:中华石杉 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 MQ 一样的道理,就考两个: 你有没有对某个 rpc 框架原理有非常深入的理解. 你能不能从整体上来思考一下,如何设计一个 rpc 框架,考考你的系统设计能力. 面试题剖析 其实问到你这问题,你起码不能认怂,因为是知识的扫盲,那我不可能给你深入讲解什么 kafka 源码剖析,dubbo 源码剖析,何况我就算讲了,你要真的消化理解和吸收,起码个把月以后了.

如何设计一个秒杀系统----学习总结

第一章学习总结--概览https://time.geekbang.org/column/article/40153 1.秒杀主要解决问题--并发读和并发写.并发读的核心优化理念是尽量减少用户到服务端来读取数据,或者让他们读更少的数据.并发写的处理原则是在数据库层面独立出一个库,做特殊的处理.另外针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生. 2.从一个架构师的角度来看,要想打造并维护一个超大流量并发读写.高性能.高可用的系统,在整个用户请求路径上从浏览器到服务端我

深度学习的下一个大热门——Swift

来源商业新知网,原标题:为什么Swift会是深度学习的下一个大热门? 如果你喜欢编程,当你听到Swift,你可能会想到iOS或MacOS的应用程序开发.如果你正在进行深度学习,那么你一定听说过Swift for Tensorflow(缩写为S4TF).然后,你可以问自己:“为什么谷歌要为Swift创建一个TensorFlow版本?”Python和c++已经有了版本;为什么要添加另一种语言?在这篇文章中,我将试着回答这个问题,并概述为什么你应该认真遵循S4TF以及Swift语言本身的原因.这篇文章