简介
在深度学习过程中经常会遇到GPU, Tensorflow, Docker, CUDA, CPU, CUDNN, Keras, Anaconda, PyTorch等名次概念,也一直理不清这些编程环境的层次,所以做一个总结
总览
越往下越底层
解释
CPU
中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
GPU
图形处理器(英语:Graphics Processing Unit,缩写:GPU)。GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作
OS
操作系统(Operating System)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。
CUDA
全称Compute Unified Device Architecture,是一个并行计算平台,同时也是一个API模型,支持C,C++和Fortarn。CUDA定义了GPU的虚拟指令集,使得用户可以直接控制GPU的并行计算单元,编写高效的并行程序。
cuDNN
全称CUDA Deep Neural Network library,基于CUDA提供高度调优的神经网络底层实现,例如卷积、池化、归一化和激活函数。支持TensorFlow和PyTorch等多种框架。
简单来说,CPU适合串行计算,擅长逻辑控制。GPU擅长并行高强度并行计算,适用于AI算法的训练学习
CUDA 是NVIDIA专门负责管理分配运算单元的框架
cuDNN是用于深层神经网络的gpu加速库
conda
Conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换;
• Conda 是为 Python 程序创建的,用于管理版本和Python环境;
• 目前主流的Conda软件是:Anaconda 和Miniconda;
• Conda的两个重要功能:(1)环境管理 (2)Python包管理;
anaconda与miniconda
Anaconda 是 一 个 开 源 的Python发行版本,其包含了Conda 、 Python 、 Numpy 、Pandas等180多个科学包及其依赖项。
Miniconda 是 Anaconda 的轻量级替代,默认只包含了Python 和 Conda,但是可以通过 Pip 和 Conda 指令来安装所需要的包。
就是说miniconda是简约型anaconda
conda功能
重要功能一:环境管理
– 创建环境:conda create …
– 激活环境:activate …
– 返回主环境:deactivate …
– 删除环境:conda remove …
– 查看系统中的所有环境:conda info –e
重要功能二:包管理
– 安装库:conda install …
– 查看已经安装的库:conda list
– 查 看 某 个 环 境 的 已 安 装 包 :conda list –n…
– 搜 索 package 的 信 息 : conda search …
conda和pip
总之,建议将Conda 与Pip 结合起来以创建数据科学环境
docker
容器
传统的虚拟化方式(虚拟机)占用资源多、启动时间长。针对这个问题Linux中发展出了轻量级虚拟化技术——Linux容器(Linux Container, LXC)。LXC不模拟完整的物理机系统,而是通过对进程隔离实现虚拟化。
Docker
Docker是Linux容器的一种封装。Docker将应用程序和需要的所有依赖打包到一个文件里(镜像)。Docker加载镜像可以创建Container(镜像的实例),运行Container后,可以提供同样的应用体验。
TensorFlow
一个端到端的开源机器学习平台
端到端:该框架可以完成机器学习模型的全部流程,使得训练时可以同时优化整个模型 。
Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。它可看作一个自动求导工具,在此基础上该平台实现了许多深度学习的基本函数和模型。
Keras
一个高层的神经网络API,用python实现并且能在TensorFlow、CNTK或者Theano框架上运行。 Keras 的开发重点是支持快速的深度学习实验。
需要注意Keras 2.2.5. 以后的版本仅支持TensorFlow ,并且被封装为TensorFlow的一个模块 tf.keras
pytorch
特点
• 简洁:Pytorch的设计追求最少的封装,尽量避免重复造轮子;
• 高速:Pytorch的灵活性不以速度为待见,在评测中有良好表现;
• 易用:Pytorch的设计遵循“所思即所得”的理念;
• 扩展性好:Pytorch能无缝接入 Python 生态圈;
• 活跃的社区:Pytorch有完整的使用文档,Facebook人工智能研究院对Pytorch提供了强力的支持。
Pytorch的设计遵循“tensor -> variable(autograd) -> nn.Module”这三个由低到高的抽象层次,分别代表高维数组(张量),自动求导(变量)和神经网络(层/模块):
– 张量(tensor):类似于Numpy的ndarray,可以在GPU上使用来加速计算;
– 自动求导( autograd ):为张量上的所有操作提供了自动求导机制,它是一个在运行时定
义(define-by-run)的框架;
– 神经网络(nn.Module):依赖于autograd包来定义模型并对它们进行求导。