自然语言处理学习之路-基于深度模型纠错--环境和工具

目录

〇、Python

一、Anaconda

1. 简介

2. 特点

3、conda

二、cuda和cudnn

1 什么是CUDA?

2 什么是CUDNN?

3 CUDA与CUDNN的关系

4 总结

三、pytorch和tensorflow

1 TensorFlow

2 PyTorch

3、pytorch和tensorflow有什么区别?

四、显卡驱动,cuda,cudnn,深度学习库(pytorch和tensorflow)的关系

显卡驱动

cuda与cudnn

cudnn

cuda


〇、Python

Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以在Linux、macOS以及Windows系统中搭建环境并使用,其编写的代码在不同平台上运行时,几乎不需要做较大的改动,使用者无不受益于它的便捷性。

此外,Python的强大之处在于它的应用领域范围之广,遍及人工智能、科学计算、Web开发、系统运维、大数据及云计算、金融、游戏开发等。实现其强大功能的前提,就是Python具有数量庞大且功能相对完善的标准库和第三方库。通过对库的引用,能够实现对不同领域业务的开发。然而,正是由于库的数量庞大,对于管理这些库以及对库作及时的维护成为既重要但复杂度又高的事情。

一、Anaconda

1. 简介

Anaconda(官方网站)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。

2. 特点

Anaconda具有如下特点:

▪ 开源

▪ 安装过程简单

▪ 高性能使用Python和R语言

▪ 免费的社区支持

其特点的实现主要基于Anaconda拥有的:

▪ conda包

▪ 环境管理器

▪ 1,000+开源库

如果日常工作或学习并不必要使用1,000多个库,那么可以考虑安装Miniconda(下载界面请戳),这里不过多介绍Miniconda的安装及使用。

3、conda

conda是包及其依赖项和环境的管理工具。

▪ 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。

▪ 适用平台:Windows, macOS, Linux

▪ 用途:

① 快速安装、运行和升级包及其依赖项。

② 在计算机中便捷地创建、保存、加载和切换环境。

如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。—— Conda官方网站

▪ conda为Python项目而创造,但可适用于上述的多种语言。

▪ conda包和环境管理器包含于Anaconda的所有版本当中。

二、cuda和cudnn

1 什么是CUDA?

CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。

2 什么是CUDNN?

NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。

3 CUDA与CUDNN的关系

CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。

4 总结

1.CUDNN是一个常见的神经网络层加速库文件,能够很大程度把加载到显卡上的网络层数据进行优化计算。而CUDA就像一个很粗重的加速库,其主要依靠的是显卡。

2.CUDNN需要在有CUDA的基础上进行。

3.CUDNN可以在CUDA基础上加速。
 

三、pytorch和tensorflow

1 TensorFlow

TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief 。

Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究  。

TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目以及各类应用程序接口(Application Programming Interface, API) 。自2015年11月9日起,TensorFlow依据阿帕奇授权协议(Apache 2.0 open source license)开放源代码  。

2 PyTorch

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。

2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络。

3、pytorch和tensorflow有什么区别?

创建和运行计算图可能是两个框架最不同的地方。在PyTorch中,图结构是动态的,这意味着图在运行时构建。而在TensorFlow中,图结构是静态的,这意味着图先被“编译”然后再运行。

而TensorFlow中,这需要使用“控制流操作”来构建图,例如tf.while_loop。TensorFlow确实提供了dynamic_rnn用于常见结构,但是创建自定义动态计算真的更加困难。

PyTorch中简单的图结构更容易理解,更重要的是,还更容易调试。调试PyTorch代码就像调试Python代码一样。你可以使用pdb并在任何地方设置断点。调试TensorFlow代码可不容易。要么得从会话请求要检查的变量,要么学会使用TensorFlow的调试器(tfdbg)。

灵活性

tensorflow:静态计算图,数据参数在CPU与GPU之间迁移麻烦,调试麻烦

pytorch:动态计算图,数据参数在CPU与GPU之间迁移十分灵活,调试简便

计算速度

同等条件下:

tensorflow 在CPU上运行速度比 pytorch 快

tensorflow 在GPU上运行速度和 pytorch 差不多

依赖库

tensorflow:支持更多库函数,比如图像数据预处理方式会更多

pytorch:正在扩充,未来和tensorflow应该差别不大

数据加载

tensorflow:API设计庞大,使用有技巧,但有时候不能直接把数据加载进TensorFlow

pytorch:API整体设计粗糙,但加载数据的API设计很友好。加载数据的接口由一个数据集、一个取样器和一个数据加载器构成。

设备管理


tensorflow:不需要手动调整,简单

pytorch:需要明确启用的设备
 

四、显卡驱动,cuda,cudnn,深度学习库(pytorch和tensorflow)的关系

这四者从底层(硬件)到上层(软件)的顺序是:驱动->cuda(->cudnn)->深度学习库。cudnn加括号是因为cudnn的版本和cuda版本是一一对应的,深度学习库的版本依赖往往是直接看cuda版本,而不需要关注cudnn。

这其中最重要的问题是版本依赖。

显卡驱动

显卡驱动是告诉系统如何调用显卡这个硬件,

  • 驱动版本越新越好,都是向下兼容的。新的驱动仍然支持旧的cuda,但旧的驱动就无法支持新版本的cuda。比如430.26的驱动只能支持到10.1的cuda,10.2和11.0的就不行。具体对应关系参照英伟达的说明。
  • 如果你使用的是脱胎换骨的显卡系列比如30系列,那么以上规则可能不适用。比如3090只支持11.1的cuda。有钱人的玩具我不懂:)
  • 同一个驱动版本可以用在不同型号的显卡(前提是这个型号的显卡有更新到该版本的驱动)。比如我一开始在1080上安装430.26的驱动,后来我把TITAN X (Pascal)装上去,一样可以正常用,不需要针对TITAN重装驱动。但是我为了支持cuda11想把驱动更新到450,这就行不通。因为NVIDIA已经停止对TITAN X (Pascal)更新驱动了,TITAN X (Pascal)最新驱动版本停留在2019年的436.15。

cuda与cudnn

cuda是构筑在显卡驱动之上的工具库(toolkit),cudnn是构筑在cuda之上的深度学习相关的工具库。因此,不管是做graphics(3D渲染等)还是搞深度学习,想要使用显卡都必须安装cuda,但做graphics的朋友就不需要安装cudnn。

cudnn

由于cudnn的关系更简单,因此这里放在前面说。如上所述,cudnn和cuda的版本一般是一一对应的(加上一般是因为低于对应版本的cudnn也可以使用,但是可能性能会有差),甚至于cudnn只不过是解压出来放在cuda文件夹里的一个文件夹。装好就不用再管它。

cuda

cuda和驱动,cuda和cudnn的关系在上面已经说过了。那么它和我们工作的核心——深度学习库是什么关系呢。

  • 一般来说,深度学习库的开发者每发布一个新版本的深度学习库,都会让它同时兼容好几代的cuda,但太旧的就不会再支持。如pytorch1.6已经不支持cuda8了。因此需要一定程度上保持cuda的与时俱进。(除非由于显卡型号太老,没有新的驱动支持了,也就装不了新的cuda。比如我的TITAN X Pascal)
  • 在安装tensorflow和pytorch时,它实际上会同时在conda的虚拟环境里帮你安装cudatoolkit,但注意这个cudatoolkit并不能等同于系统里的cuda。原因是cudatoolkit只支持pytorch或tensorflow等部分库的使用,实际上它只是整个cuda的一部分,即pytorch的库要用到的部分。如果你要在虚拟环境里编译其他要用到cuda的库,是没办法用到cudatoolkit的,只能用系统里的cuda。用实际案例来解释一下:假设现在系统里安装了10.0的cuda,你在conda虚拟环境里安装了cuda10.2的pytorch1.6,那么pytorch确实可以正常使用没毛病。但是此时你需要自己编译一个同时基于pytorch和cuda的库,由于它没法用到pytorch的cudatoolkit,而只能使用系统cuda,而系统cuda版本和pytorch对应的cuda版本又不相同,那么它很有可能就会编译失败。我已经碰过好几次这种坑了。
  • 那么以上问题是不是就没有办法了呢。也不是。因为在ubuntu里,cuda的路径/usr/local/cuda实际上是一个软链接(类似windows里的快捷方式),它链接了另一个同目录下的另一个cuda文件夹,比如/usr/local/cuda-10.0。更方便的是,它只需简单两行代码(直接搜多cuda切换就能找到)就可以链接到同目录下的其他cuda文件夹,比如/usr/local/cuda-10.2。(当然是在你显卡型号够新才能支持。)这就意味着我们可以轻易地改变系统cuda版本。不过如果你只是希望使用pytorch或者tensorflow一个库,而不需要其他依赖于pytorch和cuda的库,那么不需要这一步,有了cudatoolkit即可。
  • what if 你不是root用户,就没法把cuda装在/usr/local/cuda,或者你在公用服务器上跑代码,也不好直接把所有人的cuda都换成另一个。此时应该把cuda装在用户目录下,更改~/.bashrc中的cuda路径,把所有/usr/local/cuda改成你的实际安装路径。那么其他库安装时就会链接到你的用户目录下安装的cuda。注意此时安装时要点进options,把Library install path 和Toolkit Options中的Toolkit Install Path都改成相同的用户目录下的文件夹。最后把对应的cudnn复制到cuda文件夹中即可。

综上,为了更可能高的兼容性和更方便的操作,我们需要:

  1. 用尽可能新的或者流行的显卡,这样才能获取NVIDIA最新的驱动版本支持(显然这一点主要是老板控制)
  2. 装尽可能新的驱动,从而获得最新的cuda版本支持。
  3. 装尽可能多的cuda放着,以免不时之需。
  4. 换环境时要留意cuda是否需要更换

你可能感兴趣的:(自然语言处理,自然语言处理)