一、错误描述
运行代码:
import tensorflow as tf
out = tf.random.uniform([4, 10])
y = tf.constant([2, 3, 2, 0])
y = tf.one_hot(y, depth=10)
loss = tf.keras.losses.mse(y, out)
loss = tf.reduce_mean(loss)
print(loss)
报错信息:
F .\tensorflow/core/kernels/random_op_gpu.h:232] Non-OK-status: GpuLaunchKernel(FillPhiloxRandomKernelLaunch, num_blocks, block_size, 0, d.stream(), gen, data, size, dist) status: Internal: no kernel image is available for execution on the device
主要集中在Internal处为报错原因。也就是 no kernel image is available for execution on the device。
运行环境
操作系统:Windows 10
GPU:GTX 850M(当时的强势显卡,现在的垃圾显卡),计算能力5.0
CUDA:驱动版本(Driver Version)11.0,运行版本(Runtime Version)10.1
(CUDA信息查看方式,命令行cd到cuda安装目录下的\extras\demo_suite目录,直接运行deviceQuery.exe即可,不要在文件夹内双击,显示信息第二行CUDA Capability Major/Minor version number为显卡的计算能力)
python: 3.7.7
Tensorflow: 2.3.1
二、解决(仅windows下,其他系统不讨论,请阅读其他文章)
1、首先检查cuda安装条件、配置是否正确
1)确保安装的TensorFlow为GPU版本,即pip时,命令为pip install tensorflow-gpu
2)检查cuda版本与是否与cudnn版本匹配
3)检查cuda环境变量
4)命令行下运行python,检查是否加载GPU,在python内:
import tensorflow as tf
tf.test.is_gpu_available()
运行完毕后最后一行显示True,则表示成功加载GPU,TensorFlow版本也为GPU版本。
5)在上一步输出结果中,查看是否出现dll文件not found,如果有,请阅读其他资料解决这个问题。
2、查阅到的普遍的解决方案,捡一些有实际意义的说
1)检查CUDA版本是否符合GPU显卡计算能力要求
如果第1小点里检查是否加载GPU那步,返回是True的话,也说明了计算能力符合要求。
如果不符合要求(显卡垃圾),请自觉降低cuda版本
2)检查硬件,必须为NVIDIA显卡(废话)
3)检查python版本,是否为3.6或3.7,目前TensorFlow不很支持3.8
4)修改Makefile文件
这条当没看见吧,属于面向cuda编程的范畴,或者手动编译TensorFlow,没什么用,跟TensorFlow没关系。
3、最终解决
查阅了n多资料,度娘也尽力了,在某论坛发现了一丝丝提示。
降低TensorFlow版本至2.2!
pip uninstall tensorflow-gpu
pip install tensorflow-gpu==2.2
将TensorFlow版本降至2.2,这个错误就解决了,原因不明,治标不治本,对于对TensorFlow 2.3.1有需求的人就gg了,但基础学习来讲可以这么干。对于TensorFlow产生这个错误的说明度娘等搜索引擎相关资料基本没有,都是针对CUDA本身进行编程的还有关于pytorch的,不适合TensorFlow。
有猜测是因为2.3.1不太支持850m显卡。可能还是因为我显卡太菜了。