win10 tensorflow1.8 c++ set_visible_device_list / SetDefaultDevice 问题解决

本文介绍了一个在使用CMake编译TensorFlow 1.8 c++版本过程中遇到的GPU兼容性问题及解决方案。作者尝试了多种方法设置GPU设备但遇到了bug,在尝试多种解决方案无效后,最终发现需要在项目中依赖所有与TensorFlow相关的lib文件才能解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.问题描述

使用CMake编译tensorflow1.8的c++版本,得到了tensorflow.lib和tensorflow.dll,但是在使用下面所示的方法

tensorflow::graph::SetDefaultDevice("/device:GPU:0", &graph_def);

或者

tensorflow::ConfigProto* config = &session_options.config;
    config->mutable_gpu_options()->set_allow_growth(true);
    config->set_allow_soft_placement(true);
    config->mutable_gpu_options()->set_visible_device_list("0");

指定某一个session到指定的显卡时,出现了如下图所示的bug:
这里写图片描述

在google、stackoverflow、github上都没有找到解决方案,最终经过摸索得到解决方案为:
这里写图片描述
即在工程的属性中依赖编译出的和tensorflow相关的所有的lib文件,不要单纯只使用tensorflow.lib。

另外,本人测试:
不需要tensorflow的版本 < 1.6;
也不需要在tensorflow/tf_version_script.lds中添加protobuf;

欢迎批评指正!

参考链接:https://github.com/tensorflow/tensorflow/issues/5379
https://github.com/tensorflow/tensorflow/issues/16291
https://github.com/tensorflow/tensorflow/issues/5379
https://github.com/tensorflow/tensorflow/issues/18861
https://github.com/tensorflow/tensorflow/issues/19083

### 如何在 TensorFlow 中配置环境变量的最佳实践 在 TensorFlow 的环境中,可以通过多种方式来设置和管理环境变量。这些方法不仅适用于本地开发场景,也适合于分布式训练或生产部署中的复杂需求。 #### 设置环境变量的方法 1. **通过操作系统命令行设置** 在运行 Python 或 TensorFlow 程序前,可以直接在操作系统的终端中设置环境变量。这种方式简单直观,尤其适合调试阶段。 ```bash export TF_CPP_MIN_LOG_LEVEL=2 # 控制 TensorFlow 日志级别[^1] ``` 2. **在脚本内部使用 `os.environ` 模块** 如果希望程序能够自动设置所需的环境变量,则可以在 Python 脚本中利用标准库模块 `os` 来完成这一任务。 ```python import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 减少日志输出的冗余信息[^1] os.environ['CUDA_VISIBLE_DEVICES'] = '0,1' # 使用 GPU 设备编号为 0 和 1 进行计算[^4] ``` 3. **借助 Conda 环境管理工具** 对于基于 Anaconda 创建的虚拟环境,可以预先定义一些常用的环境变量,并将其保存至 `.condarc` 文件或其他启动脚本中以便重复调用。 ```bash conda env config vars set TF_CPP_MIN_VLOG_LEVEL=1 CUDA_HOME=/usr/local/cuda-11.7 conda activate your-tensorflow-env-name echo $TF_CPP_MIN_VLOG_LEVEL # 验证是否成功加载自定义变量[^3] ``` #### 常见的 TensorFlow 环境变量及其作用 | 名称 | 描述 | |--------------------------|----------------------------------------------------------------------------------------| | `TF_CPP_MIN_LOG_LEVEL` | 控制 C++ 层面的日志等级 (默认值为 0),减少不必要的警告消息干扰 | | `CUDA_VISIBLE_DEVICES` | 显式指定哪些 GPU 将被当前进程所访问 | | `TF_FORCE_GPU_ALLOW_GROWTH`| 自动调节显存占用量而非一次性申请全部可用内存 | 以上列举了几种典型的 TensorFlow 关联型环境参数设定实例[^1]。 ```python import tensorflow as tf physical_devices = tf.config.list_physical_devices('GPU') if physical_devices: try: for device in physical_devices: tf.config.experimental.set_memory_growth(device, True) except RuntimeError as e: print(e) ``` 此代码片段展示了如何启用按需增长模式以提高资源利用率的同时保持灵活性[^4]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值