c++ - 有没有办法在 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
}
解决方案
推荐阅读
- node.js - 如何使用简单的节点记录器模块
- spotify - 我正在使用 react 进行 Spotify 克隆,但我收到用户身份验证错误 INVALID_CLIENT: Invalid redirect URI
- ios - 单元格底线截断
- c# - React 路由的 ASP.NET Core Identity 电子邮件确认 URL
- eclipse - Eclipse 不会在 Keychain Access 中保存我的密码
- sql - 试图理解 SQL Server 索引推荐
- angular - 在延迟加载的模块上下文下无法识别组件@input
- charts - 错误:验证失败:无法识别“”:版本“networking.k8s.io/v1beta1”中类型“FrontendConfig”没有匹配项
- amazon-web-services - 两个 EC2 在同一个 VPC 和 SUBNET 但一个可以连接互联网,另一个不能,为什么?
- html - 在屏幕中心居中导航栏标题