You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu重启后直接运行TensorFlow C++应用出现CUDA分配错误

Ubuntu重启后运行TensorFlow C++应用出现CUDA_ERROR_UNKNOWN内存分配问题

问题场景

你在Ubuntu上通过Bazel构建TensorFlow C++应用时全程正常,构建命令如下:

bazel build -c opt --local_resources 3072,4.0,1.0 --verbose_failures --config=monolithic //tensorflow/app/...

构建完成后执行bazel-bin/tensorflow/app/run也能顺畅运行,但系统重启后直接启动这个二进制文件,却频繁抛出CUDA内存分配错误:

May 11 12:29:05 tegra-ubuntu start.sh[800]: 2018-05-11 12:29:04.622723: E tensorflow/stream_executor/cuda/cuda_driver.cc:967] failed to alloc 2304 bytes on host: CUDA_ERROR_UNKNOWN 
May 11 12:29:05 tegra-ubuntu start.sh[800]: 2018-05-11 12:29:04.622849: E tensorflow/stream_executor/cuda/cuda_driver.cc:967] failed to alloc 2304 bytes on host: CUDA_ERROR_UNKNOWN

你发现只要重新执行一次Bazel构建再运行就恢复正常,但构建耗时太长,希望系统启动后能直接运行应用,无需重复构建。

解决方案

这个问题的核心是TensorFlow默认会在启动时尝试分配全部GPU显存,而系统重启后GPU显存的初始化状态和构建时存在差异,导致分配失败。你可以通过修改代码,给TensorFlow Session设置GPU显存动态增长的配置,让显存按需分配,就能彻底解决这个问题,而且不需要重新构建。

修改你的Session初始化代码,加入以下配置:

SessionOptions opts;
opts.config.mutable_gpu_options()->set_allow_growth(true);
session->reset(tensorflow::NewSession(opts));

设置allow_growth=true后,TensorFlow会根据实际运行需求逐步申请GPU显存,而不是一次性抢占全部可用显存,这样系统重启后直接运行二进制文件也不会再出现内存分配错误了。


内容的提问来源于stack exchange,提问作者marc_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:14:26