我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在macOS10.12系统上给thea

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在macOS10.12系统上给thea

首先查了一下,cuda只支持Nvida显卡,所以只好放弃了。转而选择gpuarray backend,这个版本还没有release,都是开发版。

根据官网提示,首先你需要先安装cmake、cython、nose等软件和py库。因为我之前安装过cmake,而且我使用的是anaconda,所以这些py库也都有。真是非常方便。

下面开始安装:

# 后面会发现这其实是一个大坑!
git clone https://github.com/Theano/libgpuarray.git
cd libgpuarray

mkdir Build
cd Build

cmake .. -DCMAKE_BUILD_TYPE=Release
make
make install
cd ..

这一步看起来还算简单。
make install会在/usr/local/include/下创建gpuarray/目录,这里面有下面?build所需的一些头文件,同时在libgpuarray/lib下面会创建libgpuarray.dylib和libgpuarray-static.a这两个特别重要的动态链接库。

下一步安装pygpu,注意,可能需要先改一下setup.py中的include_dirslibrary_dirs2个变量如下:

include_dirs = ["/usr/local/include", np.get_include()]
library_dirs = ["lib"]

否则可能提示找不到头文件或者动态链接库。然后运行:

python setup.py build
python setup.py install

这样pygpu就算安装完成了。

下一步就是测试gpu是否正常工作。
创建如下check1.py文件, 它的功能很简单,就是计算长度为vlen的随机数组每个元素的exp值。

### check1.py
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 range(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')

测试cpu性能:

THEANO_FLAGS=device=cpu python check1.py

结果:

[Elemwise{exp,no_inplace}(<TensorType(float32, vector)>)]
Looping 1000 times took 3.219283 seconds
Result is [ 1.23178029  1.61879337  1.52278066 ...,  2.20771813  2.29967761
  1.62323284]
Used the cpu

测试gpu性能:

THEANO_FLAGS=device=opencl0:1 python check1.py

结果出现如下错误:

Wrong major API version for gpuarray:-9997 Make sure Theano and libgpuarray/pygpu are in sync.

看样子应该是版本不符合。google了很久,发现原因是:我刚才从github上安装的是最新的gpuarray,而我的theano是0.8.2,可能不是最新的了,于是我只好更新一下theano:

pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

更新好theano,下面再执行上面的命令,还是有问题:

clang++ -dynamiclib -g -O3 -fno-math-errno -Wno-unused-label -Wno-unused-variable -Wno-write-strings -march=haswell -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -fPIC -undefined dynamic_lookup -I/Users/flybywind/anaconda3/lib/python3.5/site-packages/pygpu-0.2.1-py3.5-macosx-10.6-x86_64.egg/pygpu -I/Users/flybywind/anaconda3/lib/python3.5/site-packages/numpy/core/include -I/Users/flybywind/anaconda3/lib/python3.5/site-packages/numpy/core/include -I/Users/flybywind/anaconda3/include/python3.5m -I/Users/flybywind/anaconda3/lib/python3.5/site-packages/theano/gof -L/Users/flybywind/anaconda3/lib -fvisibility=hidden -o /Users/flybywind/.theano/compiledir_Darwin-16.0.0-x86_64-i386-64bit-i386-3.5.2-64/tmppv5z0wy8/mb4366a5a742592cc8864699a71f9f43c.so /Users/flybywind/.theano/compiledir_Darwin-16.0.0-x86_64-i386-64bit-i386-3.5.2-64/tmppv5z0wy8/mod.cpp -lgpuarray
/Users/flybywind/.theano/compiledir_Darwin-16.0.0-x86_64-i386-64bit-i386-3.5.2-64/tmppv5z0wy8/mod.cpp:4:10: fatal error: 'gpuarray/array.h' file not found

这个错误跟刚才类似,我也懒得去找-I是从哪里设置了,索性把/usr/local/include/gpuarray拷贝到/Users/flybywind/anaconda3/lib/python3.5/site-packages/pygpu-0.2.1-py3.5-macosx-10.6-x86_64.egg/pygpu下面了。

然后再运行,又挂了,这次提示:
ld: library not found for -lgpuarray
clang: error: linker command failed with exit code 1 (use -v to see invocation)

故技重施,把上面?libgpuarray/lib中的动态链接库拷贝到/Users/flybywind/anaconda3/lib下面好了。

继续试,终于好了:

Mapped name None to device opencl0:1: Iris
PCI Bus ID: (unsupported for device opencl0:1)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.042960 seconds
Result is [ 1.23178029  1.61879337  1.52278066 ...,  2.20771813  2.29967761
  1.62323284]
Used the gpu

好了,现在还有2个问题:

opencl0:1到底啥意思?

Device specifiers are composed of the type string and the device id like so:

"cuda0"
"opencl0:1"

For opencl the device id is the platform number, a colon (:) and the device number. There are no widespread and/or easy way to list available platforms and devices. You can experiement with the values, unavaiable ones will just raise an error, and there are no gaps in the valid numbers.

就是说,opencl表示类型,跟cuda类似。但是对于opencl,还要指定platform和设备编号,中间用":"分隔。编号都是连续的,所以这2个数从0开始往后试即可[来源]。一般platform就是0,所以我试了0:0, 发现不对,有问题:

Mapped name None to device opencl0:0: Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz
PCI Bus ID: (unsupported for device opencl0:0)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.459022 seconds
Result is [ 1.23178029  1.61879325  1.52278078 ...,  2.20771813  2.29967737
  1.62323272]
Used the gpu

这个很有意思!首先时间确实缩短了,graph也是GpuElem,最后numpy的检测也显示是gpu,但是device却显示的是CPU。好像是一种混合体。。。
于是再试一下0:1, 发现终于对了:

Mapped name None to device opencl0:1: Iris
PCI Bus ID: (unsupported for device opencl0:1)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.042960 seconds
Result is [ 1.23178029  1.61879337  1.52278066 ...,  2.20771813  2.29967761
  1.62323284]
Used the gpu

此时设备显示也是对的,而时间进一步缩短!

PCI Bus ID: (unsupported for device opencl0:1)什么意思?
如果是cuda,最新的gpuarray是可以显示PCI总线id的:

Mapped name None to device cuda: GeForce 840M;

PCI Bus ID: 0000:0A:00.0

但是opencl就是这幅德行。所以,the end! 我终于解决了所有问题了。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在macOS10.12系统上给thea

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在macOS10.12系统上给thea

首先查了一下,cuda只支持Nvida显卡,所以只好放弃了。转而选择gpuarray backend,这个版本还没有release,都是开发版。根据官网提示,首先你需要先安装cmake、cython、nose等软件和py库。因为我之前安装过
2023-01-31

写给正在入坑linux系统的伙伴

光阴似箭,时光如梭,转年出来工作已经3年了。从一个职场新人慢慢熟悉职场的工作方式,适应职场工作的环境,学习了很多知识,也总结了很多经验。现在的目标就是一步一个脚印,慢慢打磨自己,希望早日成为取代其他人后的无可取代。我的工作是运维工程师, 从
2023-06-06

sqlite3 在linux系统上的安装

sqlite3是一个小型关系型数据库,在嵌入式设备非常通用。下载地址:www.sqlite.org 完整包:Download -> Source Code -> sqlite-autoconf-3080704.tar.gz简易包:Downl
2023-01-31

如何在 Windows 7 系统下给磁盘进行清理?

在Windows 7系统下进行磁盘清理的方法如下: javascript1. 打开“计算机”,鼠标右键点击想要清理的磁盘,选择属性,可以看到常规中有js一项&ldqHJSPxzpuo;磁盘清理”。 2.
2023-05-25

在Linux系统中怎么给iptables规则添加注释

本篇内容主要讲解“在Linux系统中怎么给iptables规则添加注释”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在Linux系统中怎么给iptables规则添加注释”吧!给iptables规
2023-06-13

怎么在Ubuntu系统上部署分布式系统Ceph

这篇文章主要讲解了“怎么在Ubuntu系统上部署分布式系统Ceph”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Ubuntu系统上部署分布式系统Ceph”吧!Ceph是统一存储系统,支
2023-06-13

在Android手机上安装linux系统

在anroid手机中安装fedora系统。记住不只是教你安装fedora系统。需要的备注与软件1、一个已经root的Android手机,记住是root后的,root后的,root后的。(重要的事情说3遍)2、终端模拟器 :用于运行 shel
2022-06-06

如何在CentOS7系统上安装postgreSQL11

这篇文章主要介绍“如何在CentOS7系统上安装postgreSQL11”,在日常操作中,相信很多人在如何在CentOS7系统上安装postgreSQL11问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在
2023-06-05

如何在Linux系统上玩游戏

这篇文章跟大家分析一下“如何在Linux系统上玩游戏”。内容详细易懂,对“如何在Linux系统上玩游戏”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如何在Linux系统上玩游戏”
2023-06-28

装机吧装机工具给电脑上重装系统教程

当电脑操作系统的磁盘碎片整理增加运作卡顿,中毒了等状况产生的情况下,我们可以依靠装机软件重装系统修补,例如装机吧装机工具.那麼实际如何重装系统呢?下边演试下装机吧装机工具给电脑上重装系统教程.1.装机吧一键再次装进系统,电子计算机没有压力,
2023-07-17

系统win7网上邻居在哪里

网上邻居是显示指向共享计算机、打印机和网络上其他资源的快捷方式,我们要打开共享计算机的时候就需要通过网上邻居来打开,那么win7系统网上邻居在哪呢?下面我们就来看看win7系统电脑网络图标怎么显示出来吧。方法一:1、我们在win7电脑桌面空
2023-07-19

在CentOS系统上如何安装Docker

本篇内容介绍了“在CentOS系统上如何安装Docker”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Docker 是一个开源工具,它可以让
2023-06-10

在Windows系统上可以用Docker吗

这篇文章主要讲解了“在Windows系统上可以用Docker吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在Windows系统上可以用Docker吗”吧!Docker,或者准确一点说,容器
2023-06-04

如何在Linux 系统上安装Java

如何在Linux 系统上安装Java,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。导读在桌面上拥抱 Java 应用程序,然后在所有桌面上运行它们。无论你运行的是哪种操作系统,通
2023-06-05

怎么在Linux系统上升级OpenSSL

这篇文章主要讲解了“怎么在Linux系统上升级OpenSSL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Linux系统上升级OpenSSL”吧!我是用的Centos ,目前官方说受威
2023-06-13

win11系统怎么在vm上安装

这篇文章主要讲解了“win11系统怎么在vm上安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win11系统怎么在vm上安装”吧!win11可以在vm上装吗答:win11可以在vm上装。1
2023-07-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录