MacOS PyCUDA Python Pyenv

Mac系统下使用Pyenv管理Python多版本,并且给各个版本安装PyCUDA

本文是针对PyCUDA的新手用户。此处特点是使用了Pyenv构建了多个工作环境,并且指导如何在各个不同的Python环境中安装PyCUDA。

安装Git和Pyenv

下载PyCUDA代码需要用Git,管理多版本的Python需要Pyenv,而这两个的安装就都需要用Brew 了。在终端输入下面的命令就可以安装Brew了:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后再接着在终端陆续输入下面两个命令来安装Git和Pyenv:

brew install git
brew install pyenv

最最重要的一步

这一步是最重要的了,决定了你能否成功安装和运行CUDA以及PyCUDA。要运行Brew,你就被迫要安装最新版本的Xcode和配套的Command Line Tools,但是CUDA很可能和这个最新版本不兼容。所以如果你有旧版本的Xcode,一定要备份一下,改个名字别被替换了啥的。然后安装最新的Xcode和配套的Command Line Tools之后,赶紧用Brew安装好Git和Pyenv。安装好了这两个之后,就降级回到能兼容CUDA的旧版本Xcode,重新下载安装旧版本的Command Line Tools。并且绝对别在App Store里面把它升级到最新版。

只有安装好了Pyenv和能够支持运行CUDA的旧版本Xcode以及Command Line Tools ,我们才能完成CUDA的安装.

安装Xcode, Command Line Tools以及CUDA

我之前的文章中更详细地讲解了关于CUDA和Xcode的兼容情况以及解决方案,我正打字这回,情况依然还是跟这篇文章中一样。最先帮你把的CUDA依然不能使用Xcode8,需要安装Xcode7.3.1 和 Command Line Tools for XCode 7.3.1,可以在 这里 找到官方提供的下载链接。

一定要确保你安装的Xcode是能够支持CUDA运行的。然后才能成功安装 CUDA,安装CUDA之后运行下面这个命令来检查一下环境变量是否设置正确:

nvcc --version

没问题的话应该显示类似下面的结果:

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Sun_Sep_18_22:16:08_CDT_2016
Cuda compilation tools, release 8.0, V8.0.46

使用Pyenv安装一个Python副本

在终端中输入下面的命令查看可以用Pyenv安装的全部Python版本:

pyenv install --list

这里我用3.5.2做一个例子:

pyenv install 3.5.2

输入上述命令,等待完成之后,我们就有了一个全新的Python环境了,怎么折腾都可以,不会影响系统的Python配置。

安装PyCUDA

把下面的命令粘贴到终端中来下载PyCUDA的源代码:

git clone --recursive http://git.tiker.net/trees/pycuda.git

进入到pycuda的目录并且设置目录内的Python为刚刚咱们安装的3.5.2版本:

cd pycuda
pyenv local 3.5.2

接下来用下列命令来配置、编译、安装:

python configure.py
sudo make
sudo make install

如果没有发现报错,就应该是成功了。把下面的代码保存到一个名为test.py的文件中,然后咱们来测试一下:

# Sample source code from the Tutorial Introduction in the documentation.
import pycuda.gpuarray as gpuarray
import pycuda.driver as cuda
import pycuda.autoinit
import numpy
a_gpu = gpuarray.to_gpu(numpy.random.randn(4, 4).astype(numpy.float32))
a_doubled = (2*a_gpu).get()

print("original array:")
print(a_gpu)
print("doubled with gpuarray:")
print(a_doubled)

在终端中运行这个test.py,如果得到类似下面这样的结果,就是成功了:

$ python test.py
original array:
[[ 0.27740544 -1.44831014  0.6379782   0.15358959]
 [-0.21130283 -0.19202329 -2.23594046  0.14036565]
 [-0.69078982 -0.44290611  1.2644769   1.55474603]
 [-1.08704031  2.22870898  0.85237521  0.15609477]]
doubled with gpuarray:
[[ 0.55481088 -2.89662027  1.27595639  0.30717918]
 [-0.42260566 -0.38404658 -4.47188091  0.28073129]
 [-1.38157964 -0.88581222  2.52895379  3.10949206]
 [-2.17408061  4.45741796  1.70475042  0.31218955]]

更多版本

如果你要安装PyCUDA到更多版本的Python中,只要用Pyenv来安装更多版本的Python,然后把pycuda所在目录设置为对应版本的Python,之后重复上面的配置、编译、安装的步骤就可以了。例如下面就用3.5.1做例子示范了一下:

pyenv install 3.5.1
cd ~/pycuda
pyenv local 3.5.1
python configure.py
sudo make
sudo make install

就是这样了。

Category
Tagcloud
Telescope Life FuckChunWan Server Geology RTL-SDR Hack RaspberryPi Python Pyenv macOS GeoPython Communicate IDE Lesson Story Mount&Blade Visualization ChromeBook GIS VTK Camera VirtualBox Translation Junck Disease Raspbian QEMU Science MayaVi NAS Kivy University Software Poem Scholar FckZhiHu Game Learning Xcode Hadoop DIY Hardware Video Linux Book Photo Shit Memory Microscope Hackintosh Chat Programming Radio Virtualization Hate Photography PHD Mac CUDA GlumPy Translate PyOpenCL Moon QGIS Lens Discuss HBase FuckZhihu Download Library OpenCL Data Conda QT VisPy