Python 大规模机器学习(四)

部署运行你感兴趣的模型镜像

原文:Large Scale Machine Learning with Python

协议:CC BY-NC-SA 4.0

十、附录 a:图形处理器和硬件介绍

到目前为止,我们使用常规的中央处理器执行神经网络和深度学习任务。然而最近,图形处理器的计算优势变得广泛。本章深入探讨了图形处理器的基础知识以及深度学习的人工智能框架。

GPU 计算

当我们使用常规的 CPU 计算包进行机器学习时,例如 Scikit-learn,并行化的数量惊人地有限,因为默认情况下,即使有多个可用的内核,一个算法也只利用一个内核。在关于分类回归树 ( CART )的章节中,我们会看到一些加速 Scikit-learn 算法的高级例子。

与中央处理器不同,图形处理器单元被设计成从头开始并行工作。想象通过图形卡在屏幕上投影图像;GPU 单元必须能够同时处理和投影大量信息(运动、颜色和空间性),这并不奇怪。另一方面,CPU 是为顺序处理设计的,适合需要更多控制的任务,如分支和检查。与中央处理器相反,图形处理器由许多可以同时处理数千个任务的内核组成。GPU 可以以更低的成本胜过 CPU 100 倍。另一个优势是,与最先进的中央处理器相比,现代图形处理器相对便宜。

所以这一切听起来很棒,但是请记住,图形处理器只擅长执行特定类型的任务。中央处理器由几个为顺序串行处理而优化的内核组成,而图形处理器由数千个更小、更高效的内核组成,旨在同时处理任务。

中央处理器和图形处理器有不同的体系结构,使它们更适合不同的任务。仍然有很多任务,如检查、调试和切换,由于其体系结构,GPU 无法有效地完成。

了解中央处理器和图形处理器之间区别的一个简单方法是比较它们处理任务的方式。经常做的一个类比是分析和顺序左脑和整体右脑。这只是一个类比,不应该太认真。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/large-scale-ml-py/img/B05135_Appendix_01.jpg

在以下链接中查看更多信息:

为了利用图形处理器进行机器学习,需要一个特定的平台。遗憾的是,到目前为止,除了 CUDA,还没有稳定的 GPU 计算平台;这意味着您必须在计算机上安装 NVIDIA 图形卡。没有 NVIDIA 卡,图形处理器计算将无法工作。是的,我知道这对大多数苹果用户来说是个坏消息。我真的希望它是不同的,但这是我们必须忍受的限制。还有其他一些项目,比如 OpenCL,通过BLAS(https://github.com/clMathLibraries/clBLAS等举措,为其他 GPU 品牌提供 GPU 计算,但这些项目都在繁重的开发中,并且没有针对 Python 中的深度学习应用进行完全优化。OpenCL 的另一个限制是只有 AMD 积极参与,这样才会对 AMD GPUs 有利。在接下来的几年(甚至十年)里,不依赖硬件的机器学习 GPU 应用是没有希望的!).不过,看看 OpenCL 项目(https://www.khronos.org/opencl/的新闻和动态。考虑到媒体的广泛关注,这种对图形处理器可访问性的限制可能并不令人满意。似乎只有 NVIDIA 将他们的研究工作放在了开发 GPU 平台上,在未来几年内,该领域极不可能出现任何新的重大发展。

对于 CUDA 的使用,您将需要以下东西。

你需要测试你电脑上的显卡是否适合 CUDA。它至少应该是一个 NVIDIA 卡。您可以在终端中用这一行代码测试您的 GPU 是否适用于 CUDA:

$ su

现在在根目录下键入您的密码:

$ lspci | grep -i nvidia

如果你有一个基于 NVIDIA 的 GNU,你可以下载 NVIDIA CUDA 工具包(http://developer.nvidia.com/cuda-downloads)。

在撰写之时,NVIDIA 即将发布 CUDA 8 版本,会有不同的安装程序,建议大家按照 CUDA 网站上的说明进行操作。有关进一步的安装程序,请参考英伟达网站:

http://docs . NVIDIA . com/cuda/cuda-入门-linux 指南/#axzz3xBimv9ou

图形处理器上的并行计算

antao 是最初由蒙特利尔大学的詹姆斯·伯格斯特拉开发的 Python 库。它旨在为用符号表示法编写数学函数提供更具表现力的方法(F. Bastien,P. Lamblin,R. Pascanu,J. Bergstra,I. Goodfellow,A. Bergeron,N. Bouchard,d . ward-Farley 和 Y. Bengio。安诺:新功能和速度提升。NIPS 2012 深度学习研讨会)。有趣的是,安蒂诺是以希腊数学家 T2 的名字命名的,他可能是毕达哥拉斯的妻子。它的最大优点是快速的 c 编译计算、符号表达式和图形处理器计算,并且正在积极开发中。通过新功能定期进行改进。antao 的实现比可扩展的机器学习要广泛得多,所以我将缩小范围并使用 antao 进行深度学习。更多信息请访问安诺网站—http://deeplearning.net/software/theano/

当我们想要在多维矩阵上执行更复杂的计算时,基本的 NumPy 将求助于昂贵的循环和迭代,如前所述,这会增加 CPU 负载。安诺的目标是通过将这些计算编译成高度优化的 C 代码,并在可能的情况下利用图形处理器来优化这些计算。对于神经网络和深度学习,人工神经网络具有自动区分数学函数的有用能力,这对于使用反向传播等算法计算偏导数非常方便。

目前,该平台已应用于各种深度学习项目,并成为该领域使用最多的平台。最近,为了让我们更容易地利用深度学习功能,新的软件包已经被建立在 antio 之上。考虑到茶氨酸陡峭的学习曲线,我们将使用基于茶氨酸构建的包,如茶氨酸、派尔恩 2 和千层面。

安装天线

首先,确保你从安诺页面安装了开发版本。请注意,如果您执行“$ pip install an ao”,您可能会遇到问题。直接从 GitHub 安装开发版本更安全:

$ git clone git://github.com/Theano/Theano.git
$  pip install Theano

如果要升级音频,可以使用以下命令:

$ sudo pip install --upgrade theano

如果您有疑问想联系安诺社区,可以参考https://groups.google.com/forum/#!forum/theano-users

就这样,我们准备出发了!

为了确保我们将目录路径设置为“无”文件夹,我们需要执行以下操作:

#!/usr/bin/python
import cPickle as pickle
from six.moves import cPickle as pickle
import os

#set your path to the theano folder here
path = '/Users/Quandbee1/Desktop/pthw/Theano/'

让我们安装所有需要的软件包:

from theano import tensor
import theano.tensor as T
import theano.tensor.nnet as nnet
import numpy as np
import numpy

为了让 antio 在 GPU 上工作(如果你安装了 NVIDIA 卡+ CUDA),我们需要先配置 antio 框架。

通常情况下,NumPy 和 antao 使用双精度浮点格式(float64)。然而,如果我们想利用图形处理器来实现运算,就要使用 32 位浮点。这意味着我们必须根据需要在 32 位和 64 位浮点之间更改设置。如果您想查看系统默认使用的配置,请键入以下内容:

print(theano.config.floatX)
output: float64

您可以将 GPU 计算的配置更改为 32 位,如下所示:

theano.config.floatX = 'float32'

有时通过终端更改设置更为实际。

对于 32 位浮点,键入如下内容:

$ export THEANO_FLAGS=floatX=float32

对于 64 位浮点,键入如下内容:

$ export THEANO_FLAGS=floatX=float64

如果您希望将某个设置附加到特定的 Python 脚本,您可以这样做:

$ THEANO_FLAGS=floatX=float32 python you_name_here.py

如果您想查看您的系统正在使用哪种计算方法,请键入以下内容:

print(theano.config.device)

如果要更改特定脚本的所有设置,包括位浮点和计算方法(GPU 或 CPU),请键入以下内容:

$ THEANO_FLAGS=device=gpu,floatX=float32 python your_script.py

这对于测试和编码来说非常方便。你可能不想一直使用图形处理器;有时最好使用 CPU 进行原型制作和草图绘制,并在脚本准备就绪后在 GPU 上运行。

首先,让我们测试一下 GPU 是否适合您的设置。如果您的计算机上没有 NVIDIA GPU 卡,您可以跳过此步骤:

from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in xrange(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

既然我们已经知道了如何配置茶诺,让我们通过一些简单的例子来看看它是如何工作的。基本上,每段安诺代码都由相同的结构组成:

  1. 在类中声明变量的初始化部分。
  2. 形成函数的编译。
  3. 函数应用于数据类型的执行。

让我们在向量计算和数学表达式的一些基本例子中使用这些原理:

#Initialize a simple scalar 
x = T.dscalar()

fx = T.exp(T.tan(x**2)) #initialize the function we want to use.

type(fx)            #just to show you that fx is a theano variable type

#Compile create a tanh function
f = theano.function(inputs=[x], outputs=[fx])

#Execute the function on a number in this case

f(10)

正如我们之前提到的,我们可以用 Anano 来表示数学表达式。看看这个例子,我们使用了一个强大的名为自动分化的 antio 特性,这个特性对于反向传播非常有用:

fp = T.grad(fx, wrt=x)
fs= theano.function([x], fp)

fs(3)

output:] 4.59

现在我们已经理解了使用变量和函数的方式,让我们执行一个简单的逻辑函数:

#now we can apply this function to  matrices as well  
x = T.dmatrix('x')
s = 1 / (1 + T.exp(-x))
logistic = theano.function([x], s)
logistic([[2, 3], [.7, -2],[1.5,2.3]])

output:
array([[ 0.88079708,  0.95257413],
       [ 0.66818777,  0.11920292],
       [ 0.81757448,  0.90887704]])

我们可以清楚地看到,与 NumPy 相比,antio 提供了更快的方法将函数应用于数据对象。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为种: 无监督(unsupervised) 训练数据没有给定...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值