python - TFLite 解释器:定义最佳线程数
问题描述
我正在运行一个量化的 TFLite 模型(在 Linux PC 中)以使用 XNNPack 后端进行推理。我知道 TFLite 模型可能会遭受高延迟的预测,我正在尝试优化其性能,将线程数定义为TFLite.Interpreter(num_threads=X)
.
我使用 X=[4, 6, 8, None] 进行了一些试验,最好的情况是使用 X=4,但这对我来说没有意义。它是如何定义最佳线程数的?而且,num_threads
自动定义适用于多个 CPU,还是我必须使用另一个库/包?
(非常欢迎其他可以加速推理的优化!)。我使用的模型是量化的谷歌 BERT。
谢谢。
解决方案
这取决于您的目标环境。如果目标是单核或双核机器,并且您的应用程序不允许使用多核,则应使用 num_threads=1。否则,您可能会使用更多线程来利用多个内核。
如果您的目标只有 4 个核心,则使用高于 4 的核心不会提高性能,而只会产生内存和上下文切换开销。(输入的形状也取决于操作内核的实现)
关于性能提升,通常整数运算比浮点运算快。因此,您可以优化模型以使用整数运算。 https://www.tensorflow.org/lite/performance/model_optimization
此外,如果您的目标有 GPU,您可以尝试 GPU 委托。 https://www.tensorflow.org/lite/performance/gpu
推荐阅读
- c# - 如何在凭据对话框中显示域名(使用 CredUIPromptForWindowsCredentials)?
- python - 使用 Nexmon 在 Raspberry Pi 3B 上添加监控模式
- angular - iOS和Android加载UI组件的Ionic 4问题
- c++ - 为什么 C++ 可以“填充”初始化一个可变大小的数组?
- spring - Transactional annotation 比 HibernateDAOSupport 降低性能
- android - [RxJava]如何在Android RxJava×retrofit2上通过`retryWhen()`处理网络错误
- java - Eclipse:如何禁用“!=”令牌替换
- mule - 我们可以在 Mulesoft 中为 cloudhub 应用程序创建域项目吗?如果不是,为什么?
- c++ - 复制和移动构造函数是自动朋友吗?
- javascript - JS示例编程中return关键字的困惑