You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras中CNN代码无法并行运行,NVIDIA K40 GPU调用异常求助

解决Theano无法识别GPU(CUDA unavailable)的问题

针对你使用NVIDIA K40远程服务器、无root权限、virtualenv+Python3.4、Theano后端Keras的场景,咱们一步步排查解决:

1. 先确认服务器是否存在可用的CUDA环境

你不确定服务器是否安装了CUDA,先在终端执行以下命令验证:

  • 检查NVIDIA驱动状态:nvidia-smi,如果能显示K40的硬件信息,说明驱动正常;如果报错,大概率是驱动未安装或你无访问权限(远程GPU服务器一般会预装驱动)
  • 查找CUDA编译器路径:which nvcc,如果返回类似/usr/local/cuda/bin/nvcc的路径,说明CUDA已安装;如果找不到,要么未安装,要么环境变量未配置
  • 查看CUDA版本:若找到nvcc,执行nvcc --version,记下版本号(K40最高支持CUDA 10.2,别用太新的版本)

2. 让虚拟环境继承系统CUDA环境变量

virtualenv默认不会继承系统环境变量,需要手动把CUDA相关变量加到虚拟环境的激活脚本里:

  • 进入你的虚拟环境目录,比如cd ~/your_venv/bin
  • 编辑activate脚本,在末尾添加:
    export PATH=/usr/local/cuda/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    
    (如果which nvcc返回的路径不是/usr/local/cuda/bin,替换成实际路径即可)
  • 重新激活虚拟环境:source ~/your_venv/bin/activate,再执行nvcc --version确认虚拟环境能访问到CUDA

3. 修正Theano配置文件(.theanorc)

你的.theanorc可能配置不全,建议替换成以下内容(放在用户主目录~/.theanorc):

[global]
device = gpu0
floatX = float32

[cuda]
root = /usr/local/cuda  # 替换成你实际的CUDA根目录,即nvcc路径的上一级

[dnn]
enabled = True
include_path = /usr/local/cuda/include
library_path = /usr/local/cuda/lib64

注意:如果服务器装了cuDNN,要确保include_path和library_path包含cuDNN的文件(比如include下有cudnn.h,lib64下有libcudnn.so);如果没装cuDNN,可删除[dnn]部分,或设置enabled = False

4. 验证Theano的GPU识别能力

在虚拟环境里运行这段测试代码,确认GPU是否被正常识别:

import time
from theano import function, config, shared, tensor
import numpy as np

vlen = 10 * 30 * 768  # 适配GPU核心数的测试数据量
iters = 1000

rng = np.random.RandomState(22)
x = shared(np.asarray(rng.rand(vlen), config.floatX))
f = function([], tensor.exp(x))
print(f.maker.fgraph.toposort())

t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()

print(f"Looping {iters} times took {t1 - t0:.2f} seconds")
print(f"Result sample: {r[:5]}")

# 判断是否使用GPU
if np.any([isinstance(x.op, tensor.Elemwise) and ('Gpu' not in type(x.op).__name__) 
           for x in f.maker.fgraph.toposort()]):
    print('ERROR: Theano did not use the GPU')
else:
    print('SUCCESS: Theano used the GPU')

如果输出SUCCESS: Theano used the GPU,说明配置生效了

5. 特殊情况:服务器未装CUDA,无root权限的解决办法

如果服务器确实没装CUDA,你可以手动下载适配K40的CUDA版本到个人目录,无需root权限:

  • 下载CUDA 10.2的runfile安装包(NVIDIA官网选择Linux、x86_64、runfile(local))
  • 执行安装命令:sh cuda_10.2.89_440.33.01_linux.run --silent --toolkit --toolkitpath=~/cuda-10.2,将CUDA安装到个人目录
  • 按照步骤2,把~/cuda-10.2/bin和~/cuda-10.2/lib64加到虚拟环境的环境变量里,同时修改.theanorc的root路径为~/cuda-10.2
  • cuDNN同理:下载对应版本的tar包,解压后将include和lib64下的文件复制到你的CUDA目录对应位置即可

内容的提问来源于stack exchange,提问作者Syed Nauyan Rashid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:59:07