TensorFlow 1.7rc1 eager模式下GPU加速遇NotFoundError问题
解决TensorFlow 1.7rc1 Eager模式下GPU加速的NotFoundError问题
你在TensorFlow 1.7rc1的Eager模式下用GPU时碰到的OpKernel NotFoundError,尤其是tf.nn.embedding_lookup这类函数报错的情况,在TF早期Eager版本的GPU支持里确实挺常见的。我给你梳理几个针对性的解决方案:
可能的原因与对应修复方法
1. CUDA/CuDNN版本与TF 1.7rc1不匹配
TensorFlow 1.7rc1对CUDA和CuDNN有严格的版本要求:
- 必须搭配CUDA 9.0
- 必须搭配CuDNN 7.0.x
如果你的环境里这两个库版本不对,会直接导致部分GPU内核无法加载,触发NotFoundError。
操作步骤:
- 先卸载当前的TensorFlow GPU版本:
pip uninstall tensorflow-gpu - 安装符合要求的CUDA 9.0和CuDNN 7.0.x(注意要对应TF版本的要求,不要装最新版)
- 重新安装TF 1.7rc1的GPU版:
pip install tensorflow-gpu==1.7.0rc1
2. 未显式指定GPU设备上下文
早期Eager模式下,有时候不会自动默认使用GPU,需要显式指定设备上下文,否则代码可能跑在CPU上,导致GPU内核找不到。
修复代码示例:
import tensorflow as tf import tensorflow.contrib.eager as tfe import numpy as np # 显式指定使用第0块GPU with tf.device('/gpu:0'): tfe.enable_eager_execution() num_sampled=64 vocabulary_size = 512 embedding_size = 128 train_dataset = tf.constant(np.array([1,3,4,5,4])) train_labels = tf.constant(tf.transpose(np.array([[1,2,1,2,0]]))) # 补全embeddings的定义 embeddings = tfe.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0)) # 测试embedding_lookup try: lookup_result = tf.nn.embedding_lookup(embeddings, train_dataset) print("Embedding lookup成功,结果形状:", lookup_result.shape) except Exception as e: print("报错信息:", str(e))
3. TF 1.7rc1候选版本存在已知Bug
作为候选发布版本,1.7rc1的Eager模式确实存在一些GPU相关的内核注册Bug,部分Op的GPU实现没有被正确加载。
解决方法:
直接升级到TensorFlow 1.7正式版,或者更高的TF1系列稳定版本(比如1.15,这是TF1的最后一个稳定版),正式版会修复候选版本里的已知问题:
pip install tensorflow-gpu==1.7.0
4. 先确认GPU是否被TensorFlow识别
如果上面的方法都不管用,先检查你的GPU是否能被TensorFlow正确检测到,运行这段代码:
from tensorflow.python.client import device_lib print(device_lib.list_local_devices())
如果输出里没有GPU设备,说明你的GPU驱动、CUDA环境安装有问题,得先解决硬件识别的基础问题。
内容的提问来源于stack exchange,提问作者libertasT
相关产品推荐
相关产品推荐

