gpt4 book ai didi

optimization - 使用 Tensorflow w/C++ 时提高性能的策略?

转载 作者:行者123 更新时间:2023-11-30 09:10:22 25 4
gpt4 key购买 nike

我对 Tensorflow 和 ML 总体来说还很陌生,我想知道我可以使用什么策略来提高我正在构建的应用程序的性能。

我的应用程序使用 Tensorflow C++ 接口(interface),源编译为 TF 0.11 libtensorflow_cc.so(使用 bazel build -c opt --copt=-mavx 构建,并可选择添加 --config=cuda)用于 AVX 或 AVX + Mac OS X 10.12.1 上的 CUDA、MacBook Pro 2.8 GHz Intel Core i7(2 核 8 线程)、16GB 内存和 Nvidia 750m(带 2GB VRAM)

我的应用程序使用 Inception V3 模型并从 pool_3 层提取特征向量。我通过 native API 解码视频帧,并将内存缓冲区中的视频帧传递到 TF 的 C++ 接口(interface),并将它们运行到 session 中。

我当前没有进行批处理,但我正在缓存我的 session 并为每个单独的解码帧/张量提交重新使用它。我注意到 CPU 和 GPU 的性能大致相同,处理 222 帧大约需要 40 到 50 秒,这对我来说似乎很慢。我已经确认 CUDA 正在被调用、加载,并且 GPU 正在运行(或看起来如此)。

一些问题:

  • 一般来说,对于 TF 在消费类笔记本电脑上执行 Inception 框架的合理性能时间,我应该期望什么?

  • 批处理对这些操作有多大影响?对于 1x299x299x3 的张量,我想我正在等待更多的 PCI 传输,而不是等待 GPU 的有意义的工作?

  • 如果是的话,是否有一个在 C++ 下针对 InceptionV3 进行批处理的好示例?

  • 是否存在会导致原本可以避免的额外 CPU->GPU 同步的操作?

  • 有没有办法确保我的 session /图表共享资源?我可以以这种方式使用嵌套范围吗?我无法完全让它工作,但可能错过了一些东西。

  • 有关于要做/避免的事情的一般策略的好的文档吗?

我的代码如下:

https://github.com/Synopsis/Synopsis/blob/TensorFlow/Synopsis/TensorFlowAnalyzer/TensorFlowAnalyzer.mm

非常感谢

作为引用,使用感知哈希、直方图、密集光流、用于点跟踪的稀疏光流和简单显着性检测的 OpenCV 分析需要使用 CPU 或 CPU + OpenCL 对相同的 222 帧进行 4 到 5 秒。

https://github.com/Synopsis/Synopsis/tree/TensorFlow/Synopsis/StandardAnalyzer

最佳答案

首先回答你的最后一个问题,如果有关于性能优化的文档,是的:

笔记本电脑的性能差异很大,并且 TF 并未专门针对笔记本电脑 GPU 进行优化。在使用 2016 版 TensorFlow 的笔记本电脑平台上,您获得的数字(40-50 秒内 222 帧)~= 5 fps 似乎并不疯狂。通过上面性能指南中概述的一些性能改进,到 2017 年底,该性能可能会翻倍。

对于批处理,是的 - 较新的 example inception model code允许在推理时使用可变的批量大小。这主要是关于模型本身是否被定义为处理批量大小,这是自 2016 年以来的改进。

批处理推理将对 GPU 产生相当大的影响。它是否对 CPU 有帮助取决于很多 - 例如,如果您使用 MKL-DNN 支持进行构建,则应将批处理视为强制执行,但基本 TensorFlow 可能不会受益那么多。

关于optimization - 使用 Tensorflow w/C++ 时提高性能的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com