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

TensorFlow C++设置GPU设备报错:GPU设备工厂重复注册

TensorFlow C++: Duplicate GPU Device Factory Registration Error When Setting GPU ID

我之前也碰到过一模一样的问题,在TensorFlow C++版本里设置默认GPU设备时触发了F tensorflow/core/common_runtime/device_factory.cc:77] Duplicate registration of device factory for type GPU with the same priority 210错误,Python版本却完全正常,折腾了好一阵才找到几个可行的方向,分享给你:

1. 排查库链接的重复引用问题

这个错误大概率和重复链接TensorFlow的GPU相关库有关。比如你的项目可能同时静态链接了TensorFlow核心库和GPU库,或者动态链接时不小心引入了多份GPU设备工厂的注册代码:

  • 如果是CMake项目,检查find_package(TensorFlow)的配置,确保只链接正确的GPU版本库,不要同时混入CPU版本的库。
  • 确认编译链接参数里没有重复包含libtensorflow_framework.so或libtensorflow_cc.so的GPU版本。

2. 换一种指定GPU的方式(推荐)

你当前是通过修改GraphDef设置默认设备,试试在创建Session前通过ConfigProto配置GPU选项,这种方式比修改GraphDef更可靠,也能避开设备注册冲突:

tensorflow::SessionOptions options;
tensorflow::ConfigProto& config = options.config;
config.set_allow_soft_placement(true);

// 配置GPU可见性与参数
auto* gpu_options = config.mutable_gpu_options();
gpu_options->set_visible_device_list("3"); // 指定使用GPU编号3
gpu_options->set_allow_growth(true); // 按需分配显存

// 创建Session并加载模型
std::unique_ptr<tensorflow::Session> session(tensorflow::NewSession(options));
tensorflow::Status load_status = session->Create(graph_def);
if (!load_status.ok()) {
    std::cerr << "Failed to create session: " << load_status.ToString() << std::endl;
    return load_status;
}

3. 检查版本兼容性与编译环境

如果你的TensorFlow是自行编译的,要确保编译时的CUDA、cuDNN版本和运行环境完全匹配。另外,部分旧版本的TensorFlow C++ API存在多次初始化GPU设备时重复注册的bug,尝试升级到2.x系列的稳定后期版本可能会解决问题。

4. 避免重复初始化TensorFlow环境

确保你的程序全局只初始化一次TensorFlow环境,不要多次调用NewSession或重复加载模型时重复触发设备注册逻辑。如果是多线程/多实例场景,要做好全局初始化的控制。

另外你提到用root权限运行没用,确实这个问题和权限无关,主要还是库链接、API调用时机或版本的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:20