CTranslate2 同时启用oneDNN和OpenBLAS后端会破坏下游应用程序

llycmphe  于 2个月前  发布在  其他
关注(0)|答案(4)|浏览(51)

当启用oneDNN和OpenBLAS时,wyoming-faster-whisper无法启动,只能在启用OpenBLAS的情况下工作:NixOS/nixpkgs#237788(评论)
另一方面,libretranslate在启用oneDNN和OpenBLAS时也会出错,只能在启用oneDNN的情况下工作:

[2023-06-15 09:09:43.116] [ctranslate2] [thread 535123] [warning] The compute type inferred from the saved model is int8, but the target device or backend do not support efficient int8 computation. The model weights have been automatically converted to use the float32 compute type instead.
[1]    535079 segmentation fault (core dumped)

这里有一个小表格:
| x86_64-linux | 仅启用oneDNN | 仅启用OpenBLAS | 两者都启用oneDNN和OpenBLAS |
| ------------ | ------------ | ------------ | ------------ |
| libretranslate | 正常工作 | 分段错误 | 分段错误 |
| wyoming-faster-whisper | RuntimeError | 正常工作 | RuntimeError |

pokxtpni

pokxtpni1#

并非所有后端组合都经过测试。
目标架构是什么?

  • 对于x64,oneDNN对于大多数用途已经足够,并支持float32和int8计算。
  • 对于AArch64,我们通常启用OpenBLAS进行float32计算,并使用Ruy进行int8计算
jogvjijk

jogvjijk2#

目标架构是什么?
我们希望尽可能支持所有架构。

  • 对于AArch64,我们通常启用OpenBLAS进行float32计算和Ruy进行int8计算

在AArch64上使用oneDNN有什么原因不推荐吗?

iih3973s

iih3973s3#

是否没有理由不使用oneDNN在AArch64上?
据我所知,我们使用了执行缓慢的参考实现的函数dnnl_sgemmdnnl_gemm_u8s8s32
我们尽可能地支持所有架构。
如果性能不重要,你可以在任何地方使用OpenBLAS构建。然而,在大多数情况下,你需要为不同的架构选择不同的后端。
我建议查看我们为发布Python轮子库编译的方式:
https://github.com/OpenNMT/CTranslate2/blob/master/python/tools/prepare_build_environment_linux.sh

px9o7tmv

px9o7tmv4#

如果性能不重要,你可以在任何地方使用OpenBLAS构建。不幸的是,启用OpenBLAS的x86_64-linux上的libretranslate无法工作,因此这不是一个选项。

相关问题