我在用https://unix.stackexchange.com/users/560724/georgi-gerganov的耳语.cpp转录采访录音。其中许多都很短,一两分钟。问题在于,whisper.cpp 需要很长时间才能启动(我认为这是因为每次启动时都会将几 GB 加载到 RAM 中)。有什么办法可以解决这个缓慢的启动问题吗?即使在处理完录音后,有什么方法可以让它继续运行吗?
我有数千个(可能超过一万个)文件想要转录,因此如果每次启动都需要一分钟,那么仅启动 10000 个文件就需要一周的时间(!)。
任何解决方案都必须考虑特定要求:我使用一个 shell 脚本循环遍历目录中的所有文件,然后将输出通过管道传输到文本文件。每个输入文件一个文本文件。
基本上
% whisper.cpp inputfil1.wav > inputfile1.txt
% whisper.cpp inputfil2.wav > inputfile2.txt
% whisper.cpp inputfil3.wav > inputfile3.txt
(但在 bash for 循环中)
该解决方案必须支持每个输入文件的新输出文件。
答案1
如果启动该工具不是 cpu 瓶颈(如果是单线程则不可能),那么您可以通过以下方式并行化它
ls *.wav|\
sed 's/\.wav$//g'|\
xargs -P 8 -n 1 --replace='{}' bash -c 'whisper {}.wav > {}.txt'
请注意,这不是魔法,所有符号都有它们的含义,这些都是简单的含义,我很乐意写在右侧的空白处,不幸的是,即使我可以这样做,也没有足够的地方。
该脚本将 an 的输出放入ls *.wav
并调用while thing.wav > thing.txt
- 但是,它会始终有 8 个whisper
进程并行运行。
当然,如果whisper
在所有 CPU 核心上进行硬计算,那么它将无法工作 - 除非启动速度很慢,计算本身还没有完成。
您还说该工具需要一些 GB RAM,显然如果您只有 8 GB,那么您不应该同时执行需要 8x3GB 的进程。但如果您有 32 GB RAM,那么您可以通过同时执行 8 x 1GB 来获利。