keras 或 tensorflow 调用GPU报错:Blas GEMM launch failed

GPU版的tensorflow在模型训练时遇到Blas GEMM launch failed错误,或者keras遇到相同错误(keras 一般将tensorflow作为backend,如果安装了GPU版本的tensorflow,那么在使用keras时会优先使用GPU),类似报错如下:

InternalError (see above for traceback): Blas GEMM launch failed : a.shape=(300, 1), b.shape=(1, 10), m=300, n=10, k=1

这是调用GPU时,显存分配遇到了问题,有些解释说当前电脑其他程序占用显存(游戏等),所以发生错误,具体讨论见帖子。比较保险的方式是在模型训练之前为tensorflow或者keras分配显存空间,tensorflow就用如下语句创建session:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)  
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))  

而keras就在引入keras时进行参数设置:

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.allocator_type = 'BFC' #A "Best-fit with coalescing" algorithm, simplified from a version of dlmalloc.
config.gpu_options.per_process_gpu_memory_fraction = 0.3
config.gpu_options.allow_growth = True
set_session(tf.Session(config=config)) 

如果使用ipython notebook,做完上述设置后可能出现GPU sync failed,重启一下就应该没问题了。

2025-03-11 10:44:54.222546: E T:\src\github\tensorflow\tensorflow\stream_executor\cuda\cuda_blas.cc:654] failed to run cuBLAS routine cublasSgemm_v2: CUBLAS_STATUS_EXECUTION_FAILED Traceback (most recent call last): File "C:\Users\19124\anaconda3\envs\rl(tf1.x)\lib\site-packages\tensorflow\python\client\session.py", line 1322, in _do_call return fn(*args) File "C:\Users\19124\anaconda3\envs\rl(tf1.x)\lib\site-packages\tensorflow\python\client\session.py", line 1307, in _run_fn options, feed_dict, fetch_list, target_list, run_metadata) File "C:\Users\19124\anaconda3\envs\rl(tf1.x)\lib\site-packages\tensorflow\python\client\session.py", line 1409, in _call_tf_sessionrun run_metadata) tensorflow.python.framework.errors_impl.InternalError: Blas GEMM launch failed : a.shape=(128, 7), b.shape=(7, 128), m=128, n=128, k=7 [[Node: Critic/dense/MatMul = MatMul[T=DT_FLOAT, transpose_a=false, transpose_b=false, _device="/job:localhost/replica:0/task:0/device:GPU:0"](_arg_state_0_0/_5, Critic/dense/kernel/read)]] [[Node: Critic/dense_1/BiasAdd/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_21_Critic/dense_1/BiasAdd", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\threeMotorsProject\threeMotorsProject\RL\PPO\ppo.py", line 157, in <module> train() File "D:\threeMotorsProject\threeMotorsProject\RL\PPO\ppo.py", line 122, in train ppo.update(np.vstack(buffer_s), np.vstack(buffer_a), np.array(discounted_r)[:, np.newaxis]) File "D:\threeMotorsProject\threeMotorsProject\RL\PPO\ppo.py", line 80, in update adv = self.sess.run(self.v, {self.S: s}) - r File "C:\Users\19124\anaconda3\envs\rl(tf1.x)\lib\site-packages\tensorflow\python\client\session.py",
最新发布
03-12
<think>好的,我现在需要解决用户提到的TensorFlow中出现的cuBLAS执行失败的问题。首先,我要理解这个错误的具体情况。根据用户提供的引用信息,错误信息是“failed to run cuBLAS routine cublasSgemm_v2: CUBLAS_STATUS_EXECUTION_FAILED”,这通常与GPU相关的问题有关。 首先,我应该考虑用户的环境配置是否正确。根据引用[2]和[4],这个问题可能出现在使用RTX 30系列显卡时,因为旧版本的TensorFlow不支持这些显卡所需的CUDA版本。例如,用户可能安装了TensorFlow 1.x2.3之前的版本,而这些版本需要CUDA 10.x,而RTX 30系列需要CUDA 11.0更高版本。因此,用户可能需要升级TensorFlow到兼容的版本,比如2.4.0更高,同时确保CUDA和cuDNN的版本匹配。 接下来,引用[3]提到,batch size过大可能导致cuDNN错误,同样也可能影响cuBLAS的执行。这时候,用户可能需要尝试减小batch size来排除这个问题。另外,混合精度训练(AMP)TF32的设置可能不兼容当前的环境配置,需要检查是否启用了这些功能,并尝试禁用它们。 另外,引用[2]中提到,如果用户不需要GPU加速,可以通过设置环境变量禁用GPU,强制使用CPU运行。这可能是一个临时的解决方案,但会影响训练速度,所以需要根据用户的具体需求来决定是否采用。 此外,驱动程序的兼容性也是一个可能的问题点。用户需要确保NVIDIA驱动程序是最新的,并且与安装的CUDA版本兼容。例如,CUDA 11.x需要相应版本的驱动程序支持。如果驱动过旧,可能会导致执行错误。 我还应该考虑显存不足的可能性。虽然错误信息不同,但有时候显存问题也可能导致各种运行时错误。建议用户使用nvidia-smi监控显存使用情况,确保没有其他进程占用大量显存,者尝试减少模型的大小数据量。 最后,建议用户检查代码中是否有自定义的操作第三方库,这些可能与当前的CUDA环境不兼容,导致cuBLAS例程失败。尝试在简化代码的情况下复现问题,有助于排除代码层面的错误。 总结一下,可能的解决步骤包括:升级TensorFlow和CUDA到兼容版本,检查并调整batch size,禁用AMP/TF32,更新显卡驱动,检查显存使用,以及禁用GPU作为最后手段。需要用户根据具体情况逐一排查。</think>### TensorFlow cuBLAS CUBLAS_STATUS_EXECUTION_FAILED 错误解决方案 #### 1. **检查TensorFlow与CUDA/cuDNN版本兼容性** - **问题原因**:RTX 30系列显卡(如3050、3060等)需要CUDA 11.0及以上版本支持,而旧版TensorFlow(如1.x2.3以下)默认使用CUDA 10.x,导致兼容性错误[^2][^4]。 - **解决方案**: 1. 升级TensorFlow至2.4.0更高版本,并安装匹配的CUDA 11.x和cuDNN 8.x。 ```bash pip install tensorflow-gpu==2.4.0 ``` 2. 验证CUDA与cuDNN版本对应关系(例如CUDA 11.0 + cuDNN 8.0.5)[^3][^4]。 --- #### 2. **降低Batch Size禁用混合精度训练** - **问题原因**:过大的`batch_size`可能导致显存不足运算资源超限;混合精度(AMP)TF32模式可能与当前环境冲突。 - **解决方案**: 1. 逐步减小`batch_size`(如从64降至32)。 2. 在代码中禁用混合精度: ```python os.environ['TF_ENABLE_AUTO_MIXED_PRECISION'] = '0' ``` --- #### 3. **更新NVIDIA驱动和运行时库** - **问题原因**:旧版显卡驱动CUDA工具包可能无法支持新显卡的运算指令。 - **解决方案**: 1. 通过NVIDIA官网下载并安装最新驱动(建议版本≥465.89)。 2. 使用`nvidia-smi`确认驱动版本与CUDA版本兼容。 --- #### 4. **强制使用CPU作为临时解决方案** - **适用场景**:仅需快速验证代码逻辑且不依赖GPU加速时[^2]。 - **代码修改**: ```python import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # 禁用GPU ``` --- #### 5. **验证环境配置** - **步骤**: 1. 运行以下代码检查GPU是否被TensorFlow识别: ```python import tensorflow as tf print(tf.config.list_physical_devices('GPU')) ``` 2. 若输出为空列表,需重新安装CUDA排查驱动问题。 --- #### 6. **排查第三方库冲突** - **操作建议**:如果使用自定义Op第三方库(如Keras-CV),尝试注释相关代码,逐步定位冲突源。 ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值