当前位置:嗨网首页>书籍在线阅读

19-为神经网络提速

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.6 为神经网络提速

神经网络需要用到很多向量/矩阵方面的数学知识。从本质上说,这意味着要读取数据列表并立即对所有数据项进行某种操作。随着机器学习在社会生活中不断推广应用,经过优化的高性能向量/矩阵数学库变得越来越重要了。其中有很多库充分利用了GPU,因为GPU对上述用途进行过优化。向量/矩阵是计算机图形学的核心内容。大家可能对一个较早的库规范已有所耳闻,这个库规范就是基础线性代数子程序(Basic Linear Algebra Subprogram,BLAS)。NumPy是一种流行的Python数值库,它就是以BLAS为基础的。

除GPU之外,CPU还具有能够加速向量/矩阵处理的扩展指令。NumPy中就包括一些函数,这些函数采用了单指令多数据(Single Instruction, Multiple Data,SIMD)指令集。SIMD指令是一种特殊的微处理器指令,允许一次处理多条数据。有时SIMD会被称为向量指令(vector instruction)。

不同的微处理器包含的SIMD指令也不一样。例如,G4的SIMD扩展指令(21世纪00年代早期Mac中的PowerPC架构处理器)被称为AltiVec。与iPhone中的微处理器一样,ARM微处理器具有名为NEON的扩展指令。现代Intel微处理器则包含名为MMX、SSE、SSE2和SSE3的SIMD扩展指令。幸运的是,大家不需要知道这些指令有什么差异。NumPy之类的库会自动选择正确的指令,以便基于程序当前所处的底层架构实现高效计算。

因此,现实世界中的神经网络库(与本章的玩具库不同)会采用NumPy数组作为基本的数据结构,而不用Python标准库中的列表,这并不令人意外,但它们做的远不止这些。像TensorFlow和PyTorch这类流行的Python神经网络库,不仅采用SIMD指令,而且大量运用GPU进行计算。由于GPU明确就是为快速向量计算而设计的,因此与只在CPU上运行相比,GPU能将神经网络的运行速度提升一个数量级。

请明确一点:绝不能像本章这样只用Python的标准库来简单地实现神经网络产品,而应采用经过高度优化的、启用了SIMD和GPU的库,如TensorFlow。只有以下情况是例外,即为教学而设计或是只能在没有SIMD指令或GPU的嵌入式设备上运行的神经网络库。