c++ - 如何使用 Bazel 在 Windows 上使用 C++ API 库进行编程?
问题描述
我想做的事
首先,我的目标是使用 Tensorflow C++ API 作为 Windows 上的库,这是我项目的一部分,而不是在 Tensorflow 中构建我的项目。
背景
我通过使用 CMake 构建 Tensorflow 实现了这一点。但是,从 Tensorflow 1.10 开始,不推荐使用 CMake 构建,而是建议使用 Bazel。但是使用 C++ API 的官方方法是使用Bazel 在 Tensorflow 中构建项目。因此,这种方式对我不利。
我做了什么
为了使用更新版本的 Tensorflow,我一直在尝试使用 Bazel 作为独立库来构建 Tensorflow。
一些维护者表示可以在官方教程//tensorflow/tools/pip_package:build_pip_package
中替换为。但实际上我遇到了一些问题并通过阅读本教程解决了它们。现在我已经成功构建了.//tensorflow:libtensorflow_cc.so
libtensorflow_cc.so
问题是什么
但是,我不知道接下来应该做什么来使用构建的结果。这正是我的问题所在。当然没有文档。我只发现了一些不完整的想法,我将展示所有这些想法,试图为您提供更多信息:
- 有人已经成功建立链接
*.so
并解决了他遇到的问题。 - 有一个repo在 Ubuntu 和 Arch Linux 上做我想做的事情。我已经联系了维护人员,他告诉我他们现在没有支持 Windows 的计划。
- 一个相关问题:Building a .dll on Windows。
- 一个相关问题:Packed TensorFlow C++ library for bazel-independent use。
- 一个相关问题:功能请求:提供一种包括 cc 的配置、构建和安装方法。
- 一个相关问题:如何构建和使用 Google TensorFlow C++ api。这个问题的范围有点大,没有“使用 bazel”和“在 Windows 上”的限制。
- 相关的拉取请求:C++ API
一定有人像我一样为类似的问题而苦苦挣扎。我希望这个问题可以建立一个解决问题的方法库。
解决方案
问这个问题已经 2 年多了,而且消息并不好:似乎没有足够的 Windows 技能人员能够提供支持,使用熟悉的标头 + 库模型将 Tensorflow 集成到 Windows 应用程序中。并且 TensorFlow 每周都在进步,这意味着 Windows 支持进一步落后。
在我的评估中,由于文档不足,目前在 Windows 上进行构建的道路受到阻碍。正如 OP 所断言的那样,“当然没有文档”并不是那么多,而是稀疏的文档分布在几十个单独的帖子中,每个帖子都随着 Tensorflow 沿着 Windows C++ 以外的路径的持续发展而迅速发展。
我最初对类似问题给出了这个答案,但昨天用以下建议更新了它:
- Windows 是 Microsoft 产品,因此请关注 Microsoft 在做什么
- 提示:微软正在投资 ONNX 格式
- 您可以将Tensorflow 转换为 ONNX,或将 Keras 转换为 ONNX
- 您可以通过至少 3 种方式在 C++ 中的 Windows 上实现您的 (ONNX) 模型:
- Windows ML(使用 Onnx 运行时)
- Onnx 运行时(支持 DirectML 作为执行提供程序)
- DirectML(微软如何使用显卡来提升性能)
我们没有最新或最好的硬件(例如,我们有 Intel 显卡),但已经能够获得基于 Onnx 运行时的解决方案,该解决方案为我们在大约 20 毫秒内对 224 x 224 RGB 图像进行分类。我们发现 Windows ML 路径更难以处理遗留代码,而且运行速度也更慢。
推荐阅读
- javascript - 处理 JSON 响应时出错。意外的字符
- php - 在php中提交后保留选择框数据
- ios - ld: SDK.framework 使用旧版本的 Swift 语言 (XX) 编译,而不是 ObjC 框架的先前文件(未知 ABI 版本 YYY)
- visual-studio-code - 如何判断 Visual Studio Code 扩展是本地安装还是全局安装?
- javascript - 预取 javascript 文件不执行它
- jade-platform - 从 JADE 中的集合中删除无效引用
- javascript - 单击按钮时隐藏 DIVS
- python - 熊猫:对值进行排序并忽略 0
- c# - 在 c# 中,是否有任何理由在十进制格式的左侧有相邻的#?
- python - 使用列表作为字典键的替代方法是什么?