Win 10 64位21H1;TF2.5,CUDA 11安装在环境中(Python 3.9.5 Xeus)
我不是唯一一个看到这个错误的人;另请参阅此处和此处(未回答)。这个问题很模糊,拟议的解决方案也不清楚/似乎不起作用(例如,见此处)
问题使用TF Linear_Mixed_Effects_Models.ipynb示例(此处从TensorFlow github下载)执行达到执行";"热身阶段";然后抛出错误:
InternalError: libdevice not found at ./libdevice.10.bc [Op:__inference_one_e_step_2806]
控制台包含此输出,显示它找到GPU,但XLA初始化无法找到-现有!-指定路径中的libdevice
2021-08-01 22:04:36.691300: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 9623 MB memory) -> physical GPU (device: 0, name: NVIDIA GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1)
2021-08-01 22:04:37.080007: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
2021-08-01 22:04:54.122528: I tensorflow/compiler/xla/service/service.cc:169] XLA service 0x1d724940130 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2021-08-01 22:04:54.127766: I tensorflow/compiler/xla/service/service.cc:177] StreamExecutor device (0): NVIDIA GeForce GTX 1080 Ti, Compute Capability 6.1
2021-08-01 22:04:54.215072: W tensorflow/compiler/tf2xla/kernels/random_ops.cc:241] Warning: Using tf.random.uniform with XLA compilation will ignore seeds; consider using tf.random.stateless_uniform instead if reproducible behavior is desired.
2021-08-01 22:04:55.506464: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:73] Can't find libdevice directory ${CUDA_DIR}/nvvm/libdevice. This may result in compilation or runtime failures, if the program we try to run uses routines from libdevice.
2021-08-01 22:04:55.512876: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:74] Searched for CUDA in the following directories:
2021-08-01 22:04:55.517387: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:77] C:/Users/Julian/anaconda3/envs/TF250_PY395_xeus/Library/bin
2021-08-01 22:04:55.520773: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:77] C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2
2021-08-01 22:04:55.524125: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:77] .
2021-08-01 22:04:55.526349: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:79] You can choose the search directory by setting xla_gpu_cuda_data_dir in HloModule's DebugOptions. For most apps, setting the environment variable XLA_FLAGS=--xla_gpu_cuda_data_dir=/path/to/cuda will work.
现在有趣的是,搜索到的路径包括";C:/Users/Julian/anaconda3/env/TF250_PY395_xeus/Library/bin";
该文件夹的内容包括所有(在TF启动时成功加载的)dll,包括cudart64_110.dll、dudnn64_8.dll…当然还有libdevice.10.bc
问题既然TF说它正在这个位置搜索这个文件,并且文件存在于那里,那么问题出在哪里?我该如何解决?
(NBC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2
不存在…CUDA已安装在环境中;此路径必须是操作系统安装的最佳猜测)
信息:我正在通过设置路径
aPath = '--xla_gpu_cuda_data_dir=C:/Users/Julian/anaconda3/envs/TF250_PY395_xeus/Library/bin'
print(aPath)
os.environ['XLA_FLAGS'] = aPath
但是我还将操作系统环境变量XLA_ FLAGS设置为相同的字符串值。。。我还不知道哪一个真的在工作,但控制台输出显示它搜索了预期的路径这一事实已经足够好了
以下对我有效。带有错误消息:
error: Can't find libdevice directory ${CUDA_DIR}/nvvm/libdevice
首先我搜索了nvvm
目录,然后验证了libdevice
目录的存在:
$ find / -type d -name nvvm 2>/dev/null
/usr/lib/cuda/nvvm
$ cd /usr/lib/cuda/nvvm
/usr/lib/cuda/nvvm$ ls
libdevice
/usr/lib/cuda/nvvm$ cd libdevice
/usr/lib/cuda/nvvm/libdevice$ ls
libdevice.10.bc
然后我导出了环境变量:
export XLA_FLAGS=--xla_gpu_cuda_data_dir=/usr/lib/cuda
如上面@Insectatorious所示。这解决了错误,我能够运行代码。
适用于Windows用户
第1步
运行(作为管理员)
conda install -c anaconda cudatoolkit
您可以根据安装的cudaCNN/支持的版本指定cudatoolkit版本例如:conda install-c anaconda cudatoolkit=10.2.89
第2步
转到已安装的conada文件夹
C:\ProgramData\Anaconda3\Library\bin
第3步
定位">libdevice.10.bc",复制文件
第4步
创建一个名为"的文件夹nvvm";仓内
创建另一个名为"的文件夹libdevice";nvvm 内部
粘贴">libdevice.10.bc";文件内部";libdevice";
第5步
转到环境变量
系统变量>新
变量名:
<区块报价>XLA_FLAGS
变量值:
--xla_gpu_cuda_data_dir=C:\ProgramData\Anaconda3\Library\bin
(根据您的目录编辑以上内容)
第6步重新启动cmd/virtual-env
区块报价>诊断信息不清楚,因此没有帮助;然而,有一个分辨率
通过在此路径提供文件(作为副本)解决了问题
C:UsersJuliananaconda3envsTF250_PY395_xeusLibrarybinnvvmlibdevice
请注意,C:UsersJuliananaconda3envsTF250_PY395_xeusLibrarybin
是指定给XLA_FLAGS的路径,但它似乎不是在寻找libdevice文件,而是在寻找\nvm\libdevice\路径。这意味着我不能在XLA_FLAGS中设置不同的值来指向libdevice文件的实际位置,因为要铸造一个短语,它不仅仅是在寻找文件。
前面的调试信息:
2021-08-05 08:38:52.889213: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:73] Can't find libdevice directory ${CUDA_DIR}/nvvm/libdevice. This may result in compilation or runtime failures, if the program we try to run uses routines from libdevice.
2021-08-05 08:38:52.896033: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:74] Searched for CUDA in the following directories:
2021-08-05 08:38:52.899128: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:77] C:/Users/Julian/anaconda3/envs/TF250_PY395_xeus/Library/bin
2021-08-05 08:38:52.902510: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:77] C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2
2021-08-05 08:38:52.905815: W tensorflow/compiler/xla/service/gpu/nvptx_compiler.cc:77] .
是不正确的,因为没有";CUDA";在搜索路径中;和FWIW我认为在C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.2
中搜索时应该给出不同的错误,因为没有这样的文件夹(那里有一个旧的V10.0文件夹,但没有CUDA 11的操作系统安装)
除非TensorFlow改进了路径处理,否则在每个新的(Anaconda)python环境中都需要这样的文件结构操作。
全线程在TensorFlow论坛这里
对于那些使用windows和PowerShell的用户,假设cuda在C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.7
中
环境可以设置为:
$env:XLA_FLAGS="--xla_gpu_cuda_data_dir='C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.7'"
此处需要"''"
,即嵌套引号!
我认为这可能是处理这个XLA错误的最简单的方法。
对于那些使用miniconda的人,只需将文件libdevice.10.bc复制到python应用程序或笔记本的根文件夹中。
它在这里使用python=3.9,cudatoolkit=11.2,cudnn=8.1.0,tensorflow==2.9
我在Tensorflow 2.11、CUDA 11.2、cuDNN 8.1.0中遇到了相同的错误。因为我使用conda
构建env,所以没有nvvm目录,也不需要导出环境变量,也不能使用命令nvcc -V
,所以我搜索的许多建议都不适合我的问题。我通过将tensonflow降级到2.10来解决这个错误。使用"conda install tensorflow=2.10.0 cudakolkit cudnn"参考:https://github.com/tensorflow/tensorflow/issues/58681
对于linux用户,使用tensorflow==2.8
添加以下环境变量。
XLA_FLAGS=--xla_gpu_cuda_data_dir=/usr/local/cuda-11.4
我在使用Nvidia RTX3090重新安装Ubuntu 24.04时遇到了同样的问题我使用了本页中的说明:https://www.tensorflow.org/install/pip我无法运行model.fit,因为它给了我错误。然后,为了解决这个问题,我安装了这个驱动程序:NVIDIA-Linux-x86_64-525.105.17.运行,但没有帮助。
我相信这实际上解决了问题:
sudo apt-get install cuda-toolkit