在 Ubuntu 14.04 上安裝 Theano 並配置 GPU
你可以使用以下說明安裝 Theano 並配置 GPU(假設新安裝的 Ubuntu 14.04):
# Install Theano
sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev git
sudo pip install Theano
# Install Nvidia drivers, CUDA and CUDA toolkit, following some instructions from http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb # Got the link at https://developer.nvidia.com/cuda-downloads
sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
sudo apt-get update
sudo apt-get install cuda
sudo reboot
此時,執行 nvidia-smi
應該可以工作,但執行 nvcc
將無法正常工作。
# Execute in console, or (add in ~/.bash_profile then run "source ~/.bash_profile"):
export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
那時,nvidia-smi
和 nvcc
都應該工作。
要測試 Theano 是否能夠使用 GPU:
在 gpu_test.py
中複製貼上以下內容:
# Start gpu_test.py
# From http://deeplearning.net/software/theano/tutorial/using_gpu.html#using-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')
# End gpu_test.py
並執行它:
THEANO_FLAGS='mode=FAST_RUN,device=gpu,floatX=float32' python gpu_test.py
哪個應該返回:
f@f-Aurora-R4:~$ THEANO_FLAGS='mode=FAST_RUN,device=gpu,floatX=float32' python gpu_test.py
Using gpu device 0: GeForce GTX 690
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.658292 seconds
Result is [ 1.23178029 1.61879349 1.52278066 ..., 2.20771813 2.29967761
1.62323296]
Used the gpu
要了解你的 CUDA 版本:
nvcc -V
例:
username@server:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Tue_Aug_11_14:27:32_CDT_2015
Cuda compilation tools, release 7.5, V7.5.17
新增 cuDNN
要新增 cuDNN(來自 http://deeplearning.net/software/theano/library/sandbox/cuda/dnn.html 的說明 ) :
- 從 https://developer.nvidia.com/rdp/cudnn-download 下載 cuDNN (需要註冊,免費)
tar -xvf cudnn-7.0-linux-x64-v3.0-prod.tgz
- 執行以下操作之一
選項 1:將*.h
檔案複製到 CUDA_ROOT/include
,將*.so*
檔案複製到 CUDA_ROOT/lib64
(預設情況下,CUDA_ROOT
是 Linux 上的/usr/local/cuda
)。
sudo cp cuda/lib64/* /usr/local/cuda/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
選項 2:
export LD_LIBRARY_PATH=/home/user/path_to_CUDNN_folder/lib64:$LD_LIBRARY_PATH
export CPATH=/home/user/path_to_CUDNN_folder/include:$CPATH
export LIBRARY_PATH=/home/user/path_to_CUDNN_folder/lib64:$LD_LIBRARY_PATH
預設情況下,Theano 將檢測它是否可以使用 cuDNN。如果是這樣,它將使用它。如果沒有,Theano 優化將不會引入 cuDNN 操作。因此,如果使用者沒有手動引入它們,Theano 仍然可以工作。
要在 Theano 無法使用 cuDNN 時出現錯誤,請使用此 Theano 標誌:optimizer_including=cudnn
。
例:
THEANO_FLAGS='mode=FAST_RUN,device=gpu,floatX=float32,optimizer_including=cudnn' python gpu_test.py
要了解你的 cuDNN 版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
新增 CNMeM
該 CNMeM 庫是一個“簡單的庫,以幫助深學習框架管理 CUDA 記憶。”
# Build CNMeM without the unit tests
git clone https://github.com/NVIDIA/cnmem.git cnmem
cd cnmem
mkdir build
cd build
sudo apt-get install -y cmake
cmake ..
make
# Copy files to proper location
sudo cp ../include/cnmem.h /usr/local/cuda/include
sudo cp *.so /usr/local/cuda/lib64/
cd ../..
要與 Theano 一起使用,你需要新增 lib.cnmem
標誌。例:
THEANO_FLAGS='mode=FAST_RUN,device=gpu,floatX=float32,lib.cnmem=0.8,optimizer_including=cudnn' python gpu_test.py
指令碼的第一個輸出應該是:
Using gpu device 0: GeForce GTX TITAN X (CNMeM is enabled with initial size: 80.0% of memory, cuDNN 5005)
lib.cnmem=0.8
意味著它可以使用高達 80%的 GPU。
據報道,CNMeM 提供了一些有趣的速度改進,並得到了 Theano,Torch 和 Caffee 的支援。
加速取決於許多因素,如形狀和模型本身。速度從 0 加快到 2 倍。
如果你不改變 Theano 標誌 allow_gc,你可以期望在 GPU 上加速 20%。在某些情況下(小型號),我們看到了 50%的加速。
常見問題: