Mac 上机器学习 Machine Learning 使用GPU加速

Mac上使用GPU进行机器学习加速

2017年时,初次接触机器学习,当时不记得tensorflow是什么版本了,是不支持AMD GPU进行加速的,对于一个是Macbook Pro 15寸带AMD独显的人来说,入门训练很不友好。

我相信只要试过GPU加速训练的感觉,是绝对不会再想使用CPU进行训练了,即使是验证想法,CPU训练也太慢了。想起了多年前为了让本机的Tensorflow支持Intel的向量指令集,还要本地编译源码好久,然后比起原来也没多大提升,甚至浮点运算精度还下降了,都是泪。

使用Mac的GPU进行ML训练的意义

相信很多人会说,有谁会用Mac进行训练?Mac写代码,服务器多个卡一起跑不好吗?

的确,对于有这个多卡服务器资源的人来说,Mac训练毫无意义,装了科学计算卡的服务器显存大得多,浮点计算能力也强。但是对于刚刚入门的新手,很少的实验室老板不会爽快地给你服务器资源进行训练,很多学生都是在自己的电脑上折腾入门的,这时只有Mac的同学就欲哭无泪的。

我之前入门的一些ML课,服务资源有这样几个来源

  1. Google Cloud Platform 提供300刀的免费额度,可以开带科学计算卡GPU的云服务器,这个很爽。
  2. 一些课提供GPU平台,这个是良心的。
  3. 厚脸皮地问实验室老师蹭服务器,但是很少会爽快地给资源来提升你个人

对于很多人来说,有自己的电脑的一个GPU可以加速训练,无论是入门学习,还是验证想法都是有益的。

支持Mac的GPU的机器学习后端 PlaidML 前端Keras

PlaidML 是Intel开发的机器学习后端,2018年发布。目前支持Keras、nGraph等前端平台。github网址为https://github.com/plaidml/plaidml
这意味着,使用Keras的项目几乎可以无成本地将后端从tensorflow切换到PlaidML。 使用Tesorflow的Keras前端的项目,迁移也是较容易的。2019年末看到了PlaidML社区中关于对tensorflow支持的讨论,但是目前还没有发布成果。
PlaidML 支持Metal、OpenCL等并行计算框架,这意味着Mac上的显卡(包括核显、A卡、N卡)都能得到很好的支持。

PlaidML安装流程

macOS官方安装教程https://plaidml.github.io/plaidml/docs/install.html#macos
十分简单,就四五行shell命令,我的Macbook Pro安装时没有碰到bug。
首先创建一个python虚拟环境,如果还不知道什么是python虚拟环境的建议先去搜索virtualenv是什么,虚拟环境十分有用,可以避免把你电脑上的python环境搞乱,我见过很多入门的人各种包版本出错(包括使用conda的),因此了解python虚拟环境的使用是必要的,也很简单。
下面的代码做了两件事,第一行创建虚拟环境,环境文件在名为plaidml-venv的文件目录中,第二行是激活该环境,激活之后的python调用都是使用的该目录下的python环境,pip安装也都是安装到该目录下。

python3 -m venv plaidml-venv
source plaidml-venv/bin/activate

然后安装带PlaidML的Keras

pip install -U plaidml-keras

然后设置PlaidML

plaidml-setup

然后会有三个选择,
第一个是问你要不要Dev模式,如下

Default Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
   metal_amd_radeon_pro_560.0 : AMD Radeon Pro 560 (Metal)
   metal_intel(r)_hd_graphics_630.0 : Intel(R) HD Graphics 630 (Metal)

Experimental Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
   opencl_amd_radeon_pro_560_compute_engine.0 : AMD AMD Radeon Pro 560 Compute Engine (OpenCL)
   opencl_intel_hd_graphics_630.0 : Intel Inc. Intel(R) HD Graphics 630 (OpenCL)
   metal_amd_radeon_pro_560.0 : AMD Radeon Pro 560 (Metal)
   metal_intel(r)_hd_graphics_630.0 : Intel(R) HD Graphics 630 (Metal)

Using experimental devices can cause poor performance, crashes, and other nastiness.

Enable experimental device support? (y,n)[n]:

为了速度与稳定性,当然是选择n

第二个问题问你用什么设备进行默认计算,如下

Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:

   1 : llvm_cpu.0
   2 : metal_amd_radeon_pro_560.0
   3 : metal_intel(r)_hd_graphics_630.0

Default device? (1,2,3)[1]:

为了速度,选择amd显卡
最后一个问题问你是不是保存设置到用户文件夹,保存就是了

Save settings to /Users/***/.plaidml? (y,n)[y]:y

然后就安装好了,可以用下面的命令测试一下MobileNet的运行效果

pip install plaidml-keras plaidbench
plaidbench keras mobilenet

测试训练神经网络

当然要用一个简单的神经网络训练一下测试
就使用mnist数据机跑个简单的cnn测试一下,测试代码如下

import numpy as np
import os
import time

os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

import keras

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers 
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值