NVIDIA显卡驱动旧版本下载安装+CUDA下载+cudnn下载+解决CUDNN_STATUS_INTERNAL_ERROR+Failed to call ThenRnnForward

本文详细描述了解决CUDNN_STATUS_INTERNAL_ERROR和FailedtocallThenRnnForwardwithmodelconfig错误的过程,涉及显卡驱动降级、CUDA+CUDNN版本匹配及安装步骤,包括卸载高版本驱动、安装431.60版本、调整神经网络参数,最终实现华硕2080Ti显卡配合CUDA10.1+cudnn7.6的稳定运行。
部署运行你感兴趣的模型镜像


重新配置 华硕2080Ti+CUDA10.1+cudnn7.6+431.60显卡驱动

1. 程序出的错误

程序跑十几个或者几百个Epoch后出现以下错误,后面有具体内容

1. CUDNN_STATUS_INTERNAL_ERROR

CUDNN_STATUS_INTERNAL_ERROR
Check failed: status == CUDNN_STATUS_SUCCESS (7 vs. 0)Failed to set cuDNN stream.

2021-02-17 23:11:16.512092: E tensorflow/stream_executor/dnn.cc:616] CUDNN_STATUS_EXECUTION_FAILED
in tensorflow/stream_executor/cuda/cuda_dnn.cc(2049): 'cudnnRNNBackwardWeights( cudnn.handle(), rnn_desc.handle(), model_dims.max_seq_length, input_desc.handles(), input_data.opaque(), input_h_desc.handle(), input_h_data.opaque(), output_desc.handles(), output_data.opaque(), workspace.opaque(), workspace.size(), rnn_desc.params_handle(), params_backprop_data->opaque(), reserve_space_data->opaque(), reserve_space_data->size())'
2021-02-17 23:11:16.512120: F tensorflow/stream_executor/cuda/cuda_dnn.cc:190] Check failed: status == CUDNN_STATUS_SUCCESS (7 vs. 0)Failed to set cuDNN stream.
2021-02-17 23:11:16.512663: W tensorf
Process finished with exit code -1073740791 (0xC0000409)

2.Failed to call ThenRnnForward with model config

循环神经网络代码是RNN+RNN的形式,如图,中间设计拼接函数:layers.concatenate()
在这里插入图片描述

tensorflow.python.framework.errors_impl.InternalError: Failed to call ThenRnnForward with model config: [rnn_mode, rnn_input_mode, rnn_direction_mode]: 3, 0, 0 , [num_layers, input_size, num_units, dir_count, max_seq_length, batch_size, cell_num_units]: [1, 1, 8, 1, 200, 1000, 0]

Epoch 19/5000
13/13 - 0s - loss: 3.4908 - rc1_loss: 0.4597 - rs1_loss: 0.5614 - rc2_loss: 0.8750 - rs2_loss: 1.5947 - rc1_accuracy: 0.1037 - rs1_accuracy: 0.1252 - rc2_accuracy: 0.0384 - rs2_accuracy: 0.0628
Epoch 20/5000
13/13 - 0s - loss: 3.3443 - rc1_loss: 0.4318 - rs1_loss: 0.5309 - rc2_loss: 0.8040 - rs2_loss: 1.5776 - rc1_accuracy: 0.1124 - rs1_accuracy: 0.1254 - rc2_accuracy: 0.0429 - rs2_accuracy: 0.0663
Epoch 21/5000
2021-02-18 20:34:41.296881: E tensorflow/stream_executor/dnn.cc:616] CUDNN_STATUS_INTERNAL_ERROR
in tensorflow/stream_executor/cuda/cuda_dnn.cc(1892): 'cudnnRNNForwardTraining( cudnn.handle(), rnn_desc.handle(), model_dims.max_seq_length, input_desc.handles(), input_data.opaque(), input_h_desc.handle(), input_h_data.opaque(), input_c_desc.handle(), input_c_data.opaque(), rnn_desc.params_handle(), params.opaque(), output_desc.handles(), output_data->opaque(), output_h_desc.handle(), output_h_data->opaque(), output_c_desc.handle(), output_c_data->opaque(), workspace.opaque(), workspace.size(), reserve_space.opaque(), reserve_space.size())'
2021-02-18 20:34:41.297557: W tensorflow/core/framework/op_kernel.cc:1767] OP_REQUIRES failed at cudnn_rnn_ops.cc:1517 : Internal: Failed to call ThenRnnForward with model config: [rnn_mode, rnn_input_mode, rnn_direction_mode]: 3, 0, 0 , [num_layers, input_size, num_units, dir_count, max_seq_length, batch_size, cell_num_units]: [1, 1, 8, 1, 200, 1000, 0] 
Traceback (most recent call last):
  File "D:/Users/cici/ProjectWork/1MatlabWorks/CGLE/三孤子/TS_PD_3SMPredict2/MainmultLSTM02.py", line 138, in <module>
    callbacks=Mycallback.LRschedule(0.93, 18)
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\keras\engine\training.py", line 108, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1098, in fit
    tmp_logs = train_function(iterator)
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\def_function.py", line 807, in _call
    return self._stateless_fn(*args, **kwds)  # pylint: disable=not-callable
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\function.py", line 2829, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\function.py", line 1848, in _filtered_call
    cancellation_manager=cancellation_manager)
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\function.py", line 1924, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\function.py", line 550, in call
    ctx=ctx)
  File "C:\Users\OFC\Anaconda3\envs\tf23\lib\site-packages\tensorflow\python\eager\execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.InternalError:    Failed to call ThenRnnForward with model config: [rnn_mode, rnn_input_mode, rnn_direction_mode]: 3, 0, 0 , [num_layers, input_size, num_units, dir_count, max_seq_length, batch_size, cell_num_units]: [1, 1, 8, 1, 200, 1000, 0] 
	 [[{{node CudnnRNN}}]]
	 [[Multi_model1/gru_2/PartitionedCall]] [Op:__inference_train_function_17546]

出错后本人做了以下改进
(1)将程序中的LSTM的隐藏神经元减少32-----8,可能是超出了GPU运算空间。
(2)结构是多输入多输出,连接多输出用了拼接函数, 在concatenate后添加激活函数有几率不报错,仍然有问题啊。

 out1 = layers.concatenate([x0, x], axis=-1)
 out1 = Activation('relu')(out1 )

(3)成功方法: 卸载了高版本的显卡驱动,以及更新后的Anaconda,CUDA,cudnn等,重新按照华硕2080Ti+CUDA10.1+cudnn7.6+431.60显卡驱动配置

2. 显卡驱动降版本及下载低版本方法

根据https://www.cnblogs.com/xiaojieshisilang/p/13636648.html
提供的方法,降低显卡驱动版本

1)首先卸载原高版本的显卡驱动

卸载原先版本,本人安装431版本一直出错,无法安装成功,且每次重启后452版本的显卡驱动又会自动安装上,需要先卸载NVIDIA。后面有如何下载431版本显卡驱动的方法
在控制面板的程序中卸载如框中的两个程序(截图中为已经安装成功后的,只是为了表示需要卸载哪些才能重新安装),卸载后重启,再安装431.60-desktop-win10-64bit-international-dch-whql.exe(后面详解)
在这里插入图片描述

2)下载低版本的方法:前提:知道具体要下载的版本

下面是根据已知版本下载方法
1) 首先进入NVIDIA官网

https://www.nvidia.cn/geforce/drivers/

2)根据自己电脑选择搜索驱动程序
在这里插入图片描述
下滑,点击任意版本的获取下载
在这里插入图片描述
获取下载后,立即下载,然后选择复制链接
在这里插入图片描述
3)修改下载链接
将链接复制到搜索框中(2021/2/20号最新版本显卡驱动下载链接如下)
https://cn.download.nvidia.com/Windows/461.40/461.40-desktop-win10-64bit-international-dch-whql.exe
假设安装431.60版本,则修改版本如下,回车,开始下载
https://us.download.nvidia.cn/Windows/431.60/431.60-desktop-win10-64bit-international-dch-whql.exe

最后正常安装后重启即可。

3. CUDA+cudnn下载及安装

1)NVIDIA与CUDA版本对应关系

链接:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
在这里插入图片描述

2)GPU和CUDA+cudnn版本匹配查询

链接: https://tensorflow.google.cn/install/source_windows#gpu
在这里插入图片描述

3)CUDA+cudnn官网下载地址

CUDA下载地址:https://developer.nvidia.com/cuda-toolkit-archive
下载10.1版本
cudnn下载地址:https://developer.nvidia.com/rdp/cudnn-archive
下载7.6.5版本
cudnn-10.1-windows10-x64-v7.6.5.32解压后复制到安装的CUDA路径下
同样正常安装即可。重启

4 安装Anaconda+添加国内镜像

安装Anaconda

本人安装回之前的Anaconda旧版本:Anaconda3-5.2.0-Windows-x86_64.exe
试过安装最新版本的Anaconda(2021/2/20号官网最新),但是在安装tensorflow2.3时一直安装不对。还是用回旧版本吧。

添加国内镜像

一直听说清华镜像失效,所以添加以下中科大的镜像吧

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls: yes

更新conda:conda update -n base conda

5 安装tensorflow-gpu=2.3

1)首先创建虚拟环境

conda create -n tf23 python=3.7
  1. 激活虚拟环境
conda activate tf23

3)安装tensorflow2.3

pip install tensorflow-gpu=2.3

4)安装cudatoolkit

conda install cudatoolkit=10.1

5) 安装cudnn=7.6.5/7.6.4

conda install cudnn=7.6.5

或者

conda install cudnn=7.6.4

若cudnn安装失败,根据warning,删除conda路径(C:\Users\OFC\Anaconda3\pkgs\)下的cudnn压缩安装包,根据提示重启,重新按照以上方法安装cudnn

6)测试

python
import tensorflow as tf
print(tf.__version__)
print(tf.test.is_gpu_available())

显示ture,安装成功

6 安装pydot的同时安装graphviz-2.38

在以上添加了国内镜像后安装pydot是不会自动安装graphviz-2.38的。需要先删除添加的镜像,再conda安装pydot,如下:

# 删源(换回conda的默认源)
conda config --remove-key channels
# 删源后才能找到graphviz-2.38安装包
conda install pydot
# 安装pydot-ng才能正常使用
pip install pydot-ng

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>好的,用户遇到了PyTorch训练时的cuDNN错误,具体是CUDNN_STATUS_INTERNAL_ERROR_HOST_ALLOCATION_FAILED。我需要帮他解决这个问题。首先,我得回忆一下这个错误通常的原因。cuDNN相关的错误很多都是内存问题,或者是版本不兼容,或者是配置问题。 用户之前提到过NCCL的错误,但现在的问题是关于cuDNN的。首先,我应该检查内存分配的问题。可能用户的内存不足,或者显存不够。这时候应该建议检查GPU内存的使用情况,看看是否有其他进程占用了显存。比如,可以用nvidia-smi命令来查看显存占用情况。 然后,可能需要调整batch size。如果batch size太大,导致显存不足,就会出现这种错误。所以建议用户减小batch size,或者使用梯度累积来减少内存压力。 接下来,考虑CUDAcuDNN版本兼容性。PyTorch版本CUDAcuDNN版本不匹配会导致各种问题。用户需要确认他们的PyTorch版本是否与安装的CUDAcuDNN版本兼容。可以建议用户到PyTorch官网查看版本对应关系,并升级或降级相应的库。 另外,有时候设置环境变量可以解决cuDNN的问题。例如,设置CUDA_LAUNCH_BLOCKING=1可以让错误更早地暴露出来,或者调整cuDNN的优化选项,比如CUDNN_BATCHNORM_SPATIAL_PERSISTENT=0,这可能避免一些内部错误。 还有,代码层面的问题也可能导致这个错误。比如,模型中的某些操作可能不兼容当前的cuDNN版本,或者存在内存泄漏。建议用户检查模型结构,特别是自定义的层或者操作,是否有潜在的问题。另外,使用torch.cuda.empty_cache()手动释放缓存可能有帮助。 用户之前提到过visdom的问题,可能他们在使用可视化工具,这时候如果visdom占用了资源,也可能导致内存不足。可以建议他们暂时关闭可视化,看看问题是否解决。 最后,如果所有方法都试过还是不行,可能需要考虑硬件问题,比如GPU驱动有问题,或者显存损坏。这时候建议更新驱动,或者测试其他GPU任务是否能正常运行。 总结下来,解决方案应该包括检查内存使用、调整batch size、验证版本兼容性、设置环境变量、检查代码、释放缓存以及可能的硬件检查。同时,生成的相关问题要围绕这些点展开,比如如何监控显存、如何调整batch size、环境变量的作用等等。</think>#### PyTorch cuDNN错误`CUDNN_STATUS_INTERNAL_ERROR_HOST_ALLOCATION_FAILED`解决方案 --- ##### **错误原因** 此错误通常与**显存/内存分配失败**或**cuDNN版本兼容性**相关,具体原因包括: 1. **显存不足**:GPU显存被其他进程占用,或当前任务请求显存超过物理限制[^1] 2. **内存泄漏**:代码中存在未释放的Tensor缓存或循环引用 3. **cuDNN版本冲突**:PyTorch与CUDA/cuDNN版本不兼容(常见于混合编译环境) 4. **硬件限制**:GPU驱动异常或显存硬件故障 --- ##### **分步解决方案** 1. **检查显存占用** - 使用`nvidia-smi`查看显存占用情况: ```bash watch -n 1 nvidia-smi ``` - **终止占用进程**:若发现其他Python进程占用显存,执行: ```bash kill -9 <PID> ``` 2. **降低显存需求** - **减小Batch Size**:将`batch_size`减半测试 ```python train_loader = DataLoader(dataset, batch_size=64) # 原为128则改为64 ``` - **使用梯度累积**:通过多次小批量计算等效大batch ```python optimizer.zero_grad() for i, (inputs, labels) in enumerate(train_loader): outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() if (i+1) % 4 == 0: # 每4个batch更新一次 optimizer.step() optimizer.zero_grad() ``` 3. **验证版本兼容性** - 检查PyTorch与CUDA/cuDNN版本对应关系(官方要求): | PyTorch版本 | 推荐CUDA版本 | cuDNN最低版本 | |-------------|-------------|---------------| | 1.12+ | 11.6 | 8.3.2 | | 2.0+ | 11.7/11.8 | 8.5.0 | - 更新驱动和库: ```bash conda install cudatoolkit=11.8 cudnn=8.6.0 ``` 4. **设置环境变量** - 在代码开头添加: ```python import os os.environ['CUDA_LAUNCH_BLOCKING'] = "1" # 精确报错定位 os.environ['CUDNN_BATCHNORM_SPATIAL_PERSISTENT'] = "0" # 关闭优化 ``` 5. **代码层修复** - **显式释放缓存**:在训练循环中添加: ```python torch.cuda.empty_cache() # 每个epoch后执行 ``` - **禁用非确定性算法**(仅限调试): ```python torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False ``` --- ##### **进阶排查** 若仍出现错误: 1. **内存分析工具**:使用`py-spy`检测内存泄漏 ```bash pip install py-spy py-spy top --pid <PID> ``` 2. **单卡测试**:禁用多GPU训练(若使用`DataParallel`或`DistributedDataParallel`) 3. **硬件检测**:运行`nvidia-smi dmon`监控显存波动,或使用`cuda-memcheck`工具 --- ##### **关键引用** - cuDNN错误码定义表明`CUDNN_STATUS_INTERNAL_ERROR`通常由库内部资源分配失败触发[^2] - NVIDIA官方建议对批量归一化层进行显存优化时需启用`allow_growth`模式[^3] ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值