如何在 Ubuntu 14.04 x64 上安装 Theano 并配置它以使用 GPU?

2023-12-05

我尝试按照以下说明进行操作在当前 Ubuntu 上轻松安装优化的 Theano但它不起作用:每当我使用 GPU 运行 Theano 脚本时,它都会给我错误消息:

CUDA已安装,但设备gpu不可用(错误:无法获取可用gpu的数量:未检测到支持CUDA的设备)


更具体地说,按照链接网页中的说明,我执行了以下步骤:

# 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 and CUDA
sudo apt-get install nvidia-current
sudo apt-get install nvidia-cuda-toolkit

然后我重新启动并尝试运行:

THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python gpu_test.py # gpu_test.py comes from http://deeplearning.net/software/theano/tutorial/using_gpu.html

但我得到:

f@f-Aurora-R4:~$ THEANO_FLAGS=’mode=FAST_RUN,device=gpu,floatX=float32,cuda.root=/usr/lib/nvidia-cuda-toolkit’ python gpu_test.py WARNING (theano.sandbox.cuda): CUDA is installed, but device gpu is not available (error: Unable to get the number of gpus available: no CUDA-capable device is detected) [Elemwise{exp,no_inplace}(<TensorType(float32, vector)>)] Looping 1000 times took 2.199992 seconds Result is [ 1.23178029 1.61879337 1.52278066 ..., 2.20771813 2.29967761 1.62323284] Used the cpu

(我在 Ubuntu 14.04.4 LTS x64 和 Kubuntu 14.04.4 LTS x64 上测试了以下内容,我想它应该适用于大多数 Ubuntu 变体)

安装 Theano 并配置 GPU (CUDA)

官方网站上的说明已过时。相反,您可以使用以下说明(假设新安装的 Kubuntu 14.04 LTS x64):

# 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 and 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

Example:

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):

  1. 从以下位置下载 cuDNNhttps://developer.nvidia.com/rdp/cudnn-download(需要注册,免费)
  2. tar -xvf cudnn-7.0-linux-x64-v3.0-prod.tgz
  3. 执行以下操作之一

选项 1:复制*.h文件到CUDA_ROOT/include*.so*文件到CUDA_ROOT/lib64(默认情况下,CUDA_ROOT is /usr/local/cuda在 Linux 上)。

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.

Example:

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

The 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 的支持。

Theano - 来源 1:

速度取决于许多因素,例如形状和模型本身。速度从 0 倍提高到 2 倍。

Theano - 来源 2:

如果您不更改 Theano 标志 allowed_gc,则 GPU 速度预计可提高 20%。在某些情况下(小型模型),我们看到速度提高了 50%。


在多个 CPU 核心上运行 Theano

附带说明一下,您可以使用以下命令在多个 CPU 内核上运行 TheanoOMP_NUM_THREADS=[number_of_cpu_cores] flag。例子:

OMP_NUM_THREADS=4 python gpu_test.py 

剧本theano/misc/check_blas.py输出有关使用哪个 BLAS 的信息:

cd [theano_git_directory]
OMP_NUM_THREADS=4 python theano/misc/check_blas.py

运行 Theano 的测试套件:

nosetests theano

or

sudo pip install nose-parameterized
import theano
theano.test()

常见问题:

  • 导入theano:AttributeError:'module'对象没有属性'find_graphviz'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 14.04 x64 上安装 Theano 并配置它以使用 GPU? 的相关文章

  • ubuntu 16.04.1 LTS 启动 Android 模拟器时崩溃

    我已经尝试过 Android studio 上的 AVD 和 Genymotion 模拟器 我的 ubuntu 16 04 1 在启动 android 模拟器时崩溃 冻结 我的电脑内存是16G 在我于 2016 年 9 月 19 日安装了
  • 没有名为“PIL”的模块

    当我尝试时遇到错误 from PIL import Image ImageFilter 在 Python 文件中我收到一条错误消息ModuleNotFoundError No module named PIL 到目前为止 我已经尝试卸载 重
  • 在初始化脚本中切换用户?

    这是我的 Ubuntu 工作站上的初始化脚本 我需要以除 root 之外的其他用户身份运行命令 但我就是不知道应该如何完成它 两者都不sudo u or su newuser似乎有效 剧本 respawn console none star
  • Docker 错误绑定:地址已在使用中

    当我跑步时docker compose up在我的 Docker 项目中 它失败并显示以下消息 启动用户层代理时出错 监听 tcp 0 0 0 0 3000 绑定 地址已在使用中 netstat pna grep 3000 显示这个 tcp
  • opencv_contrib编译错误:类没有成员

    我必须实现 SURF 算法来进行图像拼接 我在使用列出的库时遇到了问题here https stackoverflow com questions 33560251 opencv 3 0 0 ubuntu 14 04 nonfree non
  • 什么是 TTY?如何在 Ubuntu 上启用它?

    我目前正在设置一个 Node js 服务器 并且在这里使用调试模块https github com visionmedia debug https github com visionmedia debug 我正在尝试启用它 以便我可以在输出
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • Cordova 构建 - 无法解析 com.android.tools.build:gradle:1.5.0

    升级我的机器 Ubuntu 15 10 的 cordova 和 npm 后 我无法使用 cordova 构建新项目 构建指责 graddle 中存在错误 我做了一些研究并找到了一些可能的解决方案 解决方案例如更改版本和 url graddl
  • OpenSSL 未签名证书静默

    遇到了麻烦 还有其他一些相关的帖子 但没有那么具体 我正在尝试为开发机器默默地生成证书 这些是我最初运行的命令 但被要求输入密码 openssl genrsa des3 out server key 1024 openssl req new
  • 如何在特定的Java版本上运行应用程序?

    如何运行具有特定 Java 版本的应用程序 我安装了三个 Java 版本 myuser mysystem sudo update alternatives config java There are 3 choices for the al
  • Docker Desktop 未安装,提示 docker-ce-cli 无法安装

    在一次在线培训课程中 讲师提到他有 安装了 Docker Desktop 的 Ubuntu 虚拟机 因此 我尝试在 Windows 10 物理主机上安装相同的程序指示 https docs docker com desktop linux
  • 无法连接到 Azure Ubuntu VM - 公钥被拒绝

    我们在 Azure 上使用 Ubuntu VM 一段时间了 很少遇到任何问题 然而 其中一台虚拟机最近出现了问题 出乎意料的是 Ubuntu VM 开始拒绝公钥 ssh i azure key email protected cdn cgi
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • Ubuntu 上的 Tomcat8 .log.gz 已存在且未覆盖

    在我们的 Tomcat 服务器上 我经常看到如下警告 etc cron daily tomcat8 gzip var log tomcat8 app1 app1 log gz already exists not overwritten g
  • Keras IndexError:索引超出范围

    我是 Keras 新手 我尝试在数据集上执行二进制 MLP 并且不断使索引超出范围 但不知道为什么 from keras models import Sequential from keras layers core import Dens
  • 早于 0.4.12 的 Node.js 无法在 AWS EC2 上正常工作。为什么?

    我无法在 AWS EC2 Ubuntu 或 CentOs 没关系 上安装 node js v0 6 1 安装后我输入node 处理器负载达到100 但 v0 4 12 工作正常 可能只有我有这个问题 那不好意思了 请告诉我我做错了什么 提前
  • mongodb 无法在 ubuntu 18.04 上启动

    我在 Windows 10 上运行 ubuntu 18 04 我在 cli 上运行 mongod mongodb 正常启动 然后我尝试运行 mongo 并收到此错误 MongoDB shell version v4 0 2 connecti
  • matplotlib 中没有绘图窗口

    我刚刚使用 synaptic 软件包系统在 Ubuntu 9 10 中安装了 matplotlib 但是 当我尝试以下简单示例时 gt gt gt from pylab import plot gt gt gt plot 1 2 3 1 2
  • 终止 ssh 会话会终止正在运行的进程

    我正在使用 ssh 连接到我的 ubuntu 服务器 我使用命令启动编码程序 然而 似乎当我的 ssh 会话关闭时 因为我在进入睡眠状态的笔记本电脑上启动它 有没有办法避免这种情况 当然 阻止我的笔记本电脑休眠并不是永久的解决方案 运行你的

随机推荐

  • 在javascript中创建带有下拉框的提示输入对话框?

    有谁知道如何在javascript中创建带有下拉框的提示输入对话框 Example 我认为这是不可能的 您可能必须使用某种模式框 查看 jQuery UI 的模式框 http jqueryui com demos dialog
  • Java if 与 try/catch 开销

    Java 中使用 a 是否有任何开销试着抓块 而不是if block 假设所附代码不要求如此 例如 采用以下两个字符串 安全修剪 方法的简单实现 public String tryTrim String raw try return raw
  • 使用“IN”SQL 函数中的值将逗号分隔值从 .NET 传递到存储过程

    我有一个类似于以下的 SQL 查询 create procedure test param1 nvarchar max as begin select from table where column1 in param1 end 现在我需要
  • 如何使用相同的对象属性创建多个关系?

    我正在使用 protege 5 来开发本体 我创造了has composition作为对象属性 在我的本体中 相同的 object property 用于不同的域及其各自的范围 例如has compositionA 是 B 并且has co
  • 是否可以使用Python的默认互联网浏览器打开某些网址?

    我希望 python 使用计算机默认的网络浏览器打开某个地址 这可能吗 绝对可以 使用网页浏览器 module
  • 当调用 Activity 被销毁时,Android 新 Activity 上的 getIntent 为 NULL

    你们有解决以下问题的方法吗 在注册活动的 onDestroy 中 当用户按下后退按钮时 我调用一个新活动 以便用户可以输入当天的一些最终生产数据 然后通过电子邮件发送报告 问题是 在刚刚启动的活动中 对 getIntent 的调用返回 nu
  • 删除表中过滤的行而不是整个行

    过滤表格时 如何仅删除表格行而不删除整个工作表行 Dim TradeTable As Excel ListObject Set TradeTable Sheets Pre Trade ListObjects PreTradeTable On
  • 如何在 git 中强制执行作者/提交者身份验证?

    目前我们的项目中使用git进行版本控制 开发环境是内网 带有AD的Windows服务器 无法访问Internet 有没有办法配置 git 以使用作者和提交者的开发者域登录名 我们希望阻止开发人员自己提供这些信息 我在谷歌搜索这个问题时发现了
  • iPhone中非系统字体的名称

    我想向我的 iPhone iPad 应用程序添加非系统字体 我已将字体文件添加到项目中 并将字体添加到UIAppFontsinfo plist 的属性 加载我正在使用的字体fontWithName of UIFont 但是name字体的名称
  • 使用 nvd3 库显示单系列多条形图

    Does anyone know how I would go making a multi bar graph to be single series In a working example that i ve seen of how
  • C:为什么我们要包含声明但不定义的头文件?

    在较高的层面上 我知道我们使用 include使其他文件中的代码可用于当前文件的语句 但我不明白为什么我们要包含一个头文件 其中包含声明但没有定义 也许我需要更多地了解编译 链接过程才能完全理解其机制 但是是否有一个我一开始就未能掌握的高级
  • ASP.Net Web API OData - 消费者可以自由地查询他们想要的任何内容?

    我刚刚阅读了有关 OData 查询的 ASP Net Web API 支持的内容 并且在协调查询过滤的外部暴露方面遇到了麻烦 这本质上为集成商提供了向数据库抛出任意查询过滤器的能力 而不考虑最佳查询计划 不应查询的字段等等 如何清理 ODa
  • 截断小数不四舍五入[重复]

    这个问题在这里已经有答案了 可能的重复 c 如何将小数值四舍五入到小数点后两位 用于页面上的输出 我想像下面这样截断小数 i e 2 22939393 gt 2 229 2 22977777 gt 2 229 您可以使用数学轮 decima
  • 角度 $interval 在超过“count”参数后是否会自行取消?

    关于 Angular 中的 interval 服务的快速问题 查看文档 间隔 它们警告您手动取消间隔 但您可以选择在初始化时提供计数参数 一旦计时器 滴答作响 超过了分配的计数 它会自行取消还是只是停止调用该函数并在后台继续运行 TL 博士
  • 带有深思熟虑的冠层的 scipy

    我正在评估 Enthought 包 我安装了32位canopy 从下载https www enthought com downloads 在Ubuntu中 sudo bash canopy 1 0 1 rh5 32 sh 经过测试我没有看到
  • Symfony 在预持久上将数据添加到对象

    我有一个用于创建文档的表格 一方面 我可以添加名称和描述 在旁边我可以选择一个或多个机构创建的文档属于谁 每个机构被分配一个specific市场 一共有7个市场 所以一个市场可以有多个代理机构 但一个代理机构只能属于一个市场 我想要实现的是
  • 如何使用c++运行批处理文件?

    如何使用c 运行批处理文件 我对此一无所知 请参阅 system 函数 http www cplusplus com reference clibrary cstdlib system
  • 将函数保留在头文件中还是源文件中更好

    是将函数保留在头文件中并将它们包含到主源文件中更好 还是将函数保留在源文件中并将它们链接到主源文件中更好 一些库将函数保存在单独的源文件中 这些源文件在特殊的头文件中声明 当您将该头文件包含在主源文件中时 您就链接了所有这些函数 但是 它为
  • ActionBarSherlock 不支持浅色主题警报对话框?

    正如标题所说 我正在使用 actionBarSherlock 库和浅色主题 有时我需要使用alertDialog Builder 类显示一个对话框 问题是 无论我尝试什么 主题都不适用于对话框本身 该主题应该适用于新 API 和旧 API
  • 如何在 Ubuntu 14.04 x64 上安装 Theano 并配置它以使用 GPU?

    我尝试按照以下说明进行操作在当前 Ubuntu 上轻松安装优化的 Theano但它不起作用 每当我使用 GPU 运行 Theano 脚本时 它都会给我错误消息 CUDA已安装 但设备gpu不可用 错误 无法获取可用gpu的数量 未检测到支持