首页 > 解决方案 > 有没有办法在 Tensorflow C++ api 中以编程方式捕获“无法加载库”?

问题描述

一个不寻常的用例是尝试在 GPU 上运行具有 Tensorflow 依赖项的程序,如果 CUDA/cuDNN 安装配置错误,要么捕获丢失的库并优雅地停止程序,要么捕获丢失的库并将设备设置为 CPU。

Tensorflow 比较聪明,可以让我运行代码直到 session->run(...)。然后,如果说 cudnn_ops_infer64_8.dll 不在 PATH 中,程序将停止并抛出以下消息:

Could not load library cudnn_ops_infer64_8.dll. Error code 126
Please make sure cudnn_ops_infer64_8.dll is in your library path!

此问题未反映在 Status 中,并且似乎无法通过标准 try...catch 捕获。是否可以使所描述的场景起作用?伪代码将是

tf_style_try {

session->Run({ {input_name, *input_tensor } }, { "StatefulPartitionedCall:0" }, {}, &predictions);

} catch (tf_style_exception &tfexception  ) {

setDevice("/cpu:0");
session->Run({ {input_name, *input_tensor } }, { "StatefulPartitionedCall:0" }, {}, &predictions);

}

或者可能

bool libaries_ok = check_tf_libraries();
if(libraries_ok) {
// run on GPU
} else {
// run on CPU or stop gracefully
}

标签: c++tensorflowexception

解决方案


推荐阅读