Blas xGEMMBatched launch failed的出现原因

在使用cudatoolkit 9.x执行大量batch矩阵乘法时,可能会遇到'Blas xGEMMBatched launch failed'错误,即使显存充足。该问题是由于CUBLAS内部的保护机制,当batch尺寸总和超过172800时触发。解决方法是减少batch大小。此问题可能不适用于cudatoolkit 10.x及以上版本。测试表明,即使实际相乘矩阵小,但前两个维度之和大于172800也会报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你的cudatoolkit是9.x版本的,在执行两个很大的batch做matmal的时候,可能会报一个很奇怪的错误:

但是实际上你的显存是够的。为什么会报这样的错误呢?

这个问题困扰了我好几天。从网上查阅了很多资料,才发现是cublas的内部的一个保护机制。当你对两个batch做matmul的时候,如果batch的大小大于172800(大概是这么一个数),就会报错。不太确定cudatoolkit10.x还有没有类似的问题,但是至少cudatoolkit9.x都会遇到这个问题,所以只能想办法把batch改小一点。

注意这里说的batch大小是说矩阵相乘的前面的维度的综合。比如你要做的操作是:

tf.matmul(tf.ones([512, 1024, 4, 2]), tf.ones([512, 1024, 2, 1]))

也会报错的。虽然后面真实相乘的矩阵很小,但是512*1024>172800了,所以会报错。

不信的话,你可以用下面的程序测试一下:

import tensorflow as tf
import numpy as np

config = tf.ConfigProto()
config.gpu_options.allow_growth=True
tf.Session(config=config).close()

def calc():
    N = 15 # works for N <= 14
    a = 64
    b = 16
    X = np.random.rand(N, 11520, b, 1).astype(np.float32)
    prin
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值