通过这款名为PlaidML的工具,无论是NVIDIA、AMD还是Intel显卡都可以轻松搞定深度学习训练。众所周知,由于2010年代NvidiaGPU计算能力的提升,深度学习发展迅速。不过现在市面上的显卡品牌还是很多的,而且性能也都不错。后者能否成为AI模型算力的基础??如果答案是肯定的,那么我们的笔记本电脑就可以用来运行深度学习模型,尤其是我们花了钱的MacBookPro。MacBookPro在科技圈的覆盖面很广,质量也不错。可惜不能用于深度学习。在购买MacBook的过程中,有些人会花更多的钱买独立显卡,但是到了深度学习,他们发现这是浪费钱,因为长期以来,大多数机器学习模型只能通过通用GPU库进行处理。CUDA使用NVIDIAGPU。但我们真的别无选择吗?一位媒体博主表示,并非如此。一个名为PlaidML的深度学习框架可以解决这个难题。为什么使用GPU进行并行计算?以盖房子为例:如果你一个人做,需要400个小时,但如果你雇一个建筑商,时间可以缩短一半。你雇佣的工人越多,你的房子就会建得越快。这就是阿姆达尔定律所揭示的。它是计算机科学界的一个经验法则,它代表了处理器在并行运算后提高效率的能力。那么为什么要使用GPU?本来GPU并不是专门为深度学习设计的,但并行计算的本质似乎与图形处理类似。虽然单个GPU的核心在性能上较弱,但由于其具有高度并行的结构和大量的核心,因此在处理大数据块的算法上比CPU更高效。由于图形处理和深度学习在本质上的相似性,GPU成为深度学习和并行计算的首选。除了CUDA别无选择吗?但是,如果要利用GPU的并行能力,NVIDIA的CUDA是绕不开的。这个通用的并行计算库是深度学习所必需的。目前,高性能云计算和DL服务器使用NVIDIAGPU的主要原因还是CUDA。如果你想充分发挥笔记本的并行能力,而N卡不够用,那么本文介绍的PlaidML就非常适合。项目地址:https://github.com/plaidml/plaidmlPlaidML是Vertex.AI于2017年开源的深度学习工具包,2018年Intel收购了Vertex.AI。PlaidML0.3.3发布后,开发者可以使用Keras在自己的AMD和IntelGPU上完成并行深度学习任务。上个月,Vertex.AI发布了PlaidML0.7.0版。PlaidML是一种便携式张量编译器,用于在笔记本电脑、嵌入式设备或其他设备上进行深度学习。重要的是,它不依赖于CUDA,而是OpenCL等开放标准。OpenCL通用并行计算开放标准并不是专门为N卡设计的,所以无论你的笔记本GPU是AMD、Intel还是NVIDIA,它都能支持。很多读者可能会觉得OpenCL的生态没有CUDA那么成熟,在稳定性和开发速度上可能没有CUDA那么快。但是,我们可以将复杂的底层机制留给PlaidML,我们只需要使用它即可。我们甚至不需要接触PlaidML,它已经集成到常见的深度学习框架中,并允许用户在任何硬件中调用它。目前PlaidML已经支持Keras、ONNX、nGraph等工具,直接使用Keras建立模型,MacBook可以轻松调用GPU。现在让我们进入正题:如何在笔记本电脑的GPU上运行简单的CNN。使用笔记本电脑GPU运行神经网络安装和设置PlaidML及相关组件首先,我们需要确保我们的笔记本电脑上安装了Python3工作环境。作者推荐在虚拟环境中运行如下代码:#installpython3virtualenvifyouhaven'tdoneso:pip3installvirtualenv#Nowcreateandactivateavirtualenvironmentforthecasepython3-mvenvplaidml-venvsourceplaidml-venv/bin/activate#InstallPlaidMLwithKeraspiinstall-Uplaidml-keras记住,标准TensorFlowKeras框架下无法安装的ML自定义Keras通过PlaidML。#NowsetupPlaidMLtousetherightdeviceplaidml-setup设置PlaidML第二步。您现在可以获得您选择的设备列表。以笔者电脑MacbookPro15’2018为例,设备列表如下:CPUIntelUHDGraphics630显卡AMDRadeonpro560x显卡最后输入“y”或“nothing”返回保存设置。至此,我们已经安装好一切并准备好使用GPU运行深度学习项目。在fashionmnist上创建一个CNN分类器首先,启动JupyterNotebook。JupyterNotebook然后依次运行以下代码,使用PlaidML作为Keras后端,否则默认使用TensorFlow。#ImportingPlaidML.Makesureyoufollowthisorderimportplaidml.kerasplaidml.keras.install_backend()importosos.environ["KERAS_BACKEND"]="plaidml.keras.backend"现在您可以导入包并下载时尚数据集。importkerasfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Flattenfromkeras.layersimportConv2D,MaxPooling2DfromkerasimportbackendasK#DownloadfashiondatasetfromKerasfashion_mnist=keras.datasets.fashion_mnist(x_train,y_train),(x_test,y_test)=keras.datasets.fashion_mnistdata_normal.trainask()#下载时尚数据集float32').reshape(60000,28,28,1)/255x_test=x_test.astype('float32').reshape(10000,28,28,1)/255接下来使用Keras的sequential模块创建一个简单的CNN,并编译它。#BuildaCNNmodel.Youshouldsee"INFO:plaidml:Openingdevicexxx"afteryourunthischunkmodel=keras.Sequential()model.add(keras.layers.Conv2D(filters=64,kernel_size=2,padding='same',activation='relu',input_shape=(28,28,1)))model.add(keras.layers.MaxPooling2D(pool_size=2))model.add(keras.layers.Dropout(0.3))model.add(keras.layers.Conv2D(filters=32),kernel_size=2,padding='same',activation='relu'))model.add(keras.layers.MaxPooling2D(pool_size=2))model.add(keras.layers.Dropout(0.3))model.add(keras.layers.Flatten())model.add(keras.layers.Dense(256,activation='relu'))model.add(keras.layers.Dropout(0.5))model.add(keras.layers.Dense(10,activation='softmax'))#Compilethemodelmodel.compile(optimizer='adam',loss=keras.losses.sparse_categorical_crossentropy,metrics=['accuracy'])现在我们模拟模型,测试一下它的准确率。#Fitthemodelontrainingsetmodel.fit(x_train,y_train,batch_size=64,epochs=10)#Evaluatethemodelontestsetscore=model.evaluate(x_test,y_test,verbose=0)#Printtestaccuracyprint('\n','Testaccuracy:',score[1])更多结果。我们训练的卷积神经网络模型仅用2分钟的训练就在时尚分类任务上达到了91%的准确率!这个数字可能看起来并不惊人,但想想CPU训练需要多长时间:用CPU完成同样的任务需要2219秒(约37分钟),MAC粉丝的输出会很疯狂。从上面的结论我们可以看出,在MacbookPro上用GPU进行深度学习计算比单纯用CPU快15倍。使用PlaidML,在您自己的笔记本电脑上训练深度学习模型变得更加容易。截至目前(2020年2月),PlaidML兼容各种品牌的GPU,并且在使用Nvidia显卡时可以在没有CUDA/cuDNN的情况下实现类似的性能。您可以在PlaidML的GitHub页面上查看更多演示和相关项目。相信随着这个工具的不断发展,它可以支持越来越多的算法。我们也可以在自己的笔记本上快速试验一个小模型。
