Tensorflow、Pytorch和Ray(张量,计算图)

1.深度学习框架(Tensorflow、Pytorch)

1.1由来

      可以追溯到2016年,当年最著名的事件是alphago战胜人类围棋巅峰柯洁,在那之后,学界普遍认为人工智能已经可以在一些领域超过人类,未来也必将可以在更多领域超过人类,所以时隔多年,人工智能再次成为业界研究的热点,但因为深度学习需要的计算量很大,对硬件要求高,过高的门槛很不利于技术的研发和推广,所以出现了国外包括:Tensorflow(谷歌)、Pytorch(脸书),Mxbet(亚马逊);国内包括:MegEngine(旷视天元),paddlepaddle(百度),Mindspore(华为),TNN(腾讯),Jittor(清华)等开源深度学习框架,可以提高计算速度,减轻对硬件的依赖。

1.2作用

      首先我们要明确,深度学习是一个计算问题,我们所采取的一切策略都是为了提高计算的便利性和速率。在这个基础上有了深度学习框架,那么深度学习框架又是如何简化计算的呢,通常可以归为三类:

1.代替numpy(numpy能实现数值计算)使用GPU对Tensor进行操作,实现神经网络的操作

      补充1:NumPy 是 Python 语言的一个第三方库,其支持大量高维度数组与矩阵运算。此外,NumPy 也针对数组运算提供大量的数学函数。机器学习涉及到大量对数组的变换和运算,NumPy 就成了必不可少的工具之一。

      补充2:随着数据爆炸式增长,尤其是图像数据、音频数据等数据的快速增长,NumPy的计算能力遇到了瓶颈,迫切需要突破NumPy性能上的瓶颈,最终在硬件和软件上都有了突破,如硬件有GPU,软件有Theano(早期框架)、TensorFlow,算法有卷积神经网络、循环神经网络等。

      GPU和CPU:简单理解,CPU一般由4或6个核组成,以此模拟出8个或12个处理进程来运算。但普通的GPU就包含了几百个核,高端的有上万个核,如果把一个核视为一个并行计算路径,CPU仅可以提供几个或者几十个并行计算的能力,GPU可以提供几万个并行计算的能力。所以说GPU专门为人工智能开发并不为过。


2.提供自动求导/求微分/求梯度的机制,让神经网络实现变得容易


3.内置许多基本网络组件,比如全连接网络,CNN,RNN/LSTM等,简化代码工作,让研究者可以专注于模型设计等其他步骤,减少编程。
 

1.3框架分析

一般来讲深度学习框架都包含以下五个核心组件:

1.张量(Tensor)

      补充:可以简单理解为,标量是0维张量,向量是1维张量,矩阵是二维张量,将多个矩阵组合成一个新的数组,可以得到一个 3维张量,将多个 3维 张量组合成一个数组,可以创建一个 4维 张量,以此类推。深度学习处理的一般是 0维到 4维的张量,但处理视频数据时可能会遇到5维张量。

      延深
              时间序列数据或序列数据:3D 张量,形状为 (samples, timesteps, features) 。
              图像:4D张量,形状为 (samples, height, width, channels) 或 (samples, channels,
height, width) 。
              视频:5D张量,形状为 (samples, frames, height, width, channels) 或 (samples,frames, channels, height, width) 。
 

2.基于张量的各种操作

      补充:由于张量和张量的操作很多,难以理清关系的话可能会引发许多问题,比如:多个操作之间应该并行还是顺次执行,如何协同各种不同的底层设备,以及如何避免各种类型的冗余操作等等。这些问题有可能拉低整个深度学习网络的运行效率或者引入不必要的Bug,所以有了计算图的诞生。

3.计算图(Computation Graph)

      补充:计算图支持并行计算,如下图所示为一个简单的计算图,我们希望可以有固定的计算框架,仅输入相应值便可以得到计算结果,下图所包含的公式包括:

GPU1:① x*x=a ② x+y=b

GPU2 :③y+2=c

结果:④b+c=d

      简单理解:计算图可以简单理解为下图的计算框架,我们仅用输入x=3,y=4就可以通过并行计算快速得到结果,而如果没有并行计算,通常会按照①②③④的顺序,进行串行计算,效率就会大大下降。在深度学习计算中,计算过程被分为无数个小模块进行并行计算,大大提高了计算速率。

      结论:计算图的引入,使得开发者可以从俯瞰神经网络的内部结构,类似于编译器可以从整个代码的角度决定如何分配寄存器,计算图也可以决定代码运行时的GPU内存分配,以及分布式环境中不同底层设备间的相互协作方式。除此之外,现在也有许多深度学习框架将计算图应用于模型调试,可以实时输出当前某一操作类型的文本描述。
 

张量+基于张量的各种操作+计算图=加速计算

4.自动微分(Automatic Differentiation)工具

      传统求解微分方式的缺点:针对一些非线性过程(如修正线性单元ReLU)或者大规模的问题,使用符号微分法成本高,甚至无法微分。

      自动微分:相对于传统符号微分法,更加简单、高效、适应面更广。

5.BLAS、cuBLAS、cuDNN等拓展包(运算库)

      问题:人工智能编程现在主要使用Python,虽然简单方便,但高级语言也会比底层语言(C++)消耗更多的CPU周期,更这在深度神经网络上尤为明显,因此运算缓慢就成了高级语言的缺陷。

      解决:为了提高运算速度,就有了拓展包。最初用Fortran实现的BLAS( basic linear algebra subroutine,基础线性代数子程序),是一个非常优秀的基本矩阵(张量)运算库,此外还有英特尔的MKL(Math Kernel Library)等,开发者可以根据个人喜好灵活选择。一般的BLAS库只是针对普通的CPU场景进行了优化,但目前大部分的深度学习模型都已经开始采用并行GPU的运算模式,因此利用诸如NVIDIA推出的针对GPU优化的cuBLAS和cuDNN等更据针对性的库可能是更好的选择。
 

      最后:要注意一些部署模型加速的工具GPU(英伟达的TensorRT),CPU(英特尔公司的OpenVINO)

2.Ray

      简介:下一代人工智能应用程序将不断与环境交互,并从这些交互中学习。这些应用程序在性能和灵活性方面都对系统提出了新的和苛刻的要求。在本文中,我们考虑了这些需求,并提出了一个分布式系统来解决这些需求。ray实现了一个统一的接口,该接口可以表示任务并行计算和基于actor的计算,并由单个动态执行引擎支持。为了满足性能要求,Ray采用分布式调度程序和分布式容错存储来管理系统的控制状态。在我们的实验中,我们展示了超越每秒180万个任务的扩展能力,并且在一些具有挑战性的强化学习应用程序中比现有的专业系统具有更好的性能。

      问题:在强化学习中的进化策略(论文《Evolution Strategies as a Scalable Alternative to Reinforcement Learning》)中算法包含数十行伪代码,其中的 Python 实现也并不多。然而,在较大的机器或集群上运行它需要更多的软件工程工作。作者的实现包含了上千行代码,以及必须定义的通信协议、信息序列化、反序列化策略,以及各种数据处理策略。
      解决:Ray 可以实现让一个运行在笔记本电脑上的原型算法,仅需添加数行代码就能轻松转为适合于计算机集群运行的(或单个多核心计算机的)高性能分布式应用。这样的框架需要包含手动优化系统的性能优势,同时又不需要用户关心那些调度、数据传输和硬件错误等问题。
      与深度学习框架:Ray 与 TensorFlow、PyTorch 和 MXNet 等深度学习框架互相兼容,可以,在很多应用上,在 Ray 中使用一个或多个深度学习框架都是非常自然的(例如,UC Berkeley 的强化学习库就用到了很多 TensorFlow 与 PyTorch)。
 

参考文献

1.深度学习框架有什么作用?_深度学习框架有什么用-CSDN博客

2.python学习笔记之numpy库的使用——超详细_手机插上u盘怎么传文件-CSDN博客

3. 什么是GPU?跟CPU有什么区别?终于有人讲明白了-CSDN博客

4.如何理解TensorFlow计算图? - 知乎 

5.为什么Tensorflow需要使用"图计算"来表示计算过程-CSDN博客 

6.什么是张量(Tensor)_醉Dowry的博客-CSDN博客 

7.[深度学习]TensorRT为什么能让模型跑快快 - 知乎 

8.PyTorch & 分布式框架 Ray :保姆级入门教程_分布式自然进化策略使用pytorch和ray构建_HyperAI超神经的博客-CSDN博客9.伯克利AI分布式框架Ray,兼容TensorFlow、PyTorch与MXNet-CSDN博客

 

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

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

相关文章

【“栈、队列”的应用】408数据结构代码

王道数据结构强化课——【“栈、队列”的应用】代码&#xff0c;持续更新 链式存储栈&#xff08;单链表实现&#xff09;&#xff0c;并基于上述定义&#xff0c;栈顶在链头&#xff0c;实现“出栈、入栈、判空、判满”四个基本操作 #include <stdio.h> #include <…

Linux——指令初识

Linux下基本指令 前言一、 ls 指令二、 pwd命令三、cd 指令四、 touch指令五、mkdir指令六、rmdir指令 && rm 指令七、man指令八、cp指令九、mv指令十、cat指令十一、.more指令十二、less指令十三、head指令十四、tail指令总结 前言 linux的学习开始啦&#xff01; 今…

SpringBoot结合Redisson实现分布式锁

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

计算机竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

【应用层协议】初始Http,fiddler的使用

文章目录 1. HTTP概念2. 下载fiddler及使用获得HTTP协议格式2.1 fiddler的下载2.2 fiddler使用 3. HTTP请求&#xff08;Request&#xff09;3.1 请求行3.1.1 URL3.1.2 方法3.1.2.1 GET3.1.2.2 POST3.1.2.3 其他方法 3.2 报头&#xff08;header&#xff09;3.3 空白行3.4 正文…

逐步解决Could not find artifact com:ojdbc8:jar:12

Could not find artifact com:ojdbc8:jar:12 in central (https://repo.maven.apache.org/maven2) 原因&#xff1a; ojdbc8:jar:12 属于Oracle 数据库链接的一个程序集&#xff0c;缺失的话很有可能会影响数据库链接&#xff0c;蝴蝶效应产生不可预测的BUG&#xff01;但是版…

buuctf-[GXYCTF2019]禁止套娃 git泄露,无参数rce

用dirsearch扫一下&#xff0c;看到flag.php 访问一下没啥东西&#xff0c;使用githack python2 GitHack.py http://8996e81f-a75c-4180-b0ad-226d97ba61b2.node4.buuoj.cn/.git/查看index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;…

基于transformer的心脑血管心脏病疾病预测

视频讲解:基于transformer的心脑血管疾病预测 完整数据代码分享_哔哩哔哩_bilibili 数据展示: 完整代码: # pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ # pip install optuna -i https://pypi.tuna.tsinghua.edu.cn/simple/ import numpy as np …

计算机视觉顶尖期刊和会议的段子

CVPR/ICCV/ECCV常见论文: 我们在imagenet上提升了0.1%&#xff01; 研究梯度下降(graduate student descent)是最重要的技术&#xff01; 我们很快将释放代码&#xff0c;也可能用很长时间。 我们是第一个把transformer用到这个任务的&#xff01; 我们采用了更多的计算资源…

【kylin】【ubuntu】搭建本地源

文章目录 一、制作一个本地源仓库制作ubuntu本地仓库制作kylin本地源 二、制作内网源服务器ubuntu系统kylin系统 三、使用内网源ubuntukylin 一、制作一个本地源仓库 制作ubuntu本地仓库 首先需要构建一个本地仓库&#xff0c;用来存放软件包 mkdir -p /path/to/localname/pac…

VBA技术资料MF66:使用代码插入行或列

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

SpringCloud(二)Docker、Spring AMQP、ElasticSearch

文章目录 DockerDocker与虚拟机Docker架构镜像、容器、镜像托管平台Docker架构Docker实践 Spring AMQP简单使用案例工作队列- WorkQueue发布订阅服务FanoutExchangeDirectExchangeTopicExchange 消息转换器 ElasticSearch倒排索引IK分词器IK分词拓展与停用字典 操作索引库mappi…

批量剪辑技巧:视频去色处理,让色彩焕然一新!

你是否曾经遇到过这样的问题&#xff1a;大量视频需要处理&#xff0c;但色彩总是达不到你的要求&#xff1f;现在&#xff0c;我们将向你展示如何通过批量剪辑技巧&#xff0c;轻松去除视频原色&#xff0c;让色彩焕然一新&#xff01; 首先&#xff0c;我们要进入【视频剪辑…

(粗糙的笔记)动态规划

动态规划算法框架&#xff1a; 问题结构分析递推关系建立自底向上计算最优方案追踪 背包问题 输入&#xff1a; n n n个商品组成的集合 O O O&#xff0c;每个商品有两个属性 v i v_i vi​和 p i p_i pi​&#xff0c;分别表示体积和价格背包容量 C C C 输出&#xff1a; …

Linux学习之悟空派上实现OLED的无线网IP及CPU温度显示【守护进程】

起因 最近各种网购平台似乎都在推送99元的悟空派全志H3的开发板&#xff0c;出于好奇就买了一块来试试水&#xff0c;由于这块板子基本上和orangepi-Zero的硬件结构一模一样&#xff0c;所以设备树、boot这些就用orangepi现成的部件了。 因为本人比较喜欢使用SSH操作&#xff…

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测 目录 回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测预测效果基本介绍模型描述程序设计预测效果 <

【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门

大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

华为云云耀云服务器L实例评测|安装搭建学生成绩管理系统

1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格&#xff0c;满足您对成本、性能及技术创新的诉求。云耀云服务器L实例提供丰富严选的应用镜像&#xff0c;实现应用一键部署&#xff0c;助力客户便捷高效的在…

全排列[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个不含重复数字的数组nums&#xff0c;返回其所有可能的全排列。你可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例…

JAVA面经整理(8)

一)为什么要有区&#xff0c;段&#xff0c;页&#xff1f; 1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式&#xff0c;不过索引信息以及数据记录都是记录在文件上面的&#xff0c;确切来说是…