PyTorch深度学习框架:便捷性+实用性
2019年12月17日 由 KING 发表
701303
0
深度学习在文字语音的识别、图像的描述、进行复杂的游戏等方面几乎达到了人类水平。然而,深度学习是计算密集型的,并且在深度学习框架的开发中出现了一些矛盾:可用性的提高往往会对速度产生负面影响,反之亦然。
流行的框架Caffe、Tensorflow和Theano提供了快速的计算性能,但它们是以牺牲简便性和灵活性为代价。
然后是主要由Facebook AI开发并于2016年推出的PyTorch。PyTorch是一个高效的库,用于促进深度学习项目的构建。它允许深度学习模型以惯用的Python编程语言表示,这对于可用性而言是一个巨大的优势。PyTorch设计遵循四个主要原则。首先,考虑到大多数数据科学家都熟悉Python,PyTorch留在了这个生态系统中,以保持界面简单和一致。其次,它在直观的API之后隐藏了机器学习固有的许多复杂性。第三,它允许研究人员手动控制代码的执行以提供实用的性能。最后,与更全面,更复杂的框架相反,PyTorch的实现被设计为简单但有些“不完整”。这使得在PyTorch中更容易实现附加功能并适应新情况,从而增加了灵活性。
PyTorch采用基于图元编程的方法,用于定义层组成模型,加载数据和运行优化器的执行代码全部由通用编程表示。这样的设计确保可以使用PyTorch轻松推广和实现任何新的神经网络体系结构。
互操作性和可扩展性是PyTorch的其他首要任务,它可以与外部库进行双向数据交换。用户可以自由更换PyTorch组件,以更好地满足他们的特定项目需求。PyTorch的出色表现在很大程度上归功于以下五个策略:
- PyTorch核心用于实现张量数据结构,CPU和GPU运算符,基本并行基元和自动微分计算。由于最密集的计算操作由内核处理,因此可以用高效的C ++编程语言编写它们以提高性能。
- 控制和数据流之间要严格分开。尽管控制流是在Python中进行的,但是优化的C ++代码可以在主机CPU上执行。
- 自定义分配器以增量方式建立CUDA内存的缓存,并将其重新分配给后面的分配,从而阻止进一步使用CUDA API。
- Torch.multiprocessing使用户可以在多个GPU上实现高度并行的程序。
- 引用计数方案监视每个张量的使用次数,一旦计数达到零,就会立即释放基础内存。
与主流的深度学习框架Chainer、CNTK、MXNet、PaddlePaddel和TensorFlow相比,PyTorch在所有六个基准测试中的最快框架得分均在17%之内。