TensorFlow报错Internal: no kernel image is available for execution on the device解决

    科技2022-08-19  139

    一、错误描述

    运行代码:

    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显卡。可能还是因为我显卡太菜了。

    Processed: 0.009, SQL: 9