介绍
转录服务在各种行业中被用来将音频或视频内容转换为文本。从转录服务中受益的一些行业包括:
医疗保健专业人员
医疗转录在医疗保健行业发挥着至关重要的作用,可以高精度地转录医生的记录并维护医疗记录。
法律/法律行业
律师事务所、律师助理、法庭记者和律师将转录服务用于法律目的,如转录证词和法庭听证会。
企业
企业使用转录服务将董事会会议、会议、采访和其他活动转录成无错误的转录本,以便更好地决策和将来参考。
媒体与大众传播
媒体专业人员,包括记者、视频制作人、电影制作人和文案,使用转录服务为文章、新闻稿和字幕转录采访和其他内容。
数字营销
数字营销人员和内容战略家使用转录师将播客、网络研讨会和其他材料转换为文本,用于博客文章和内容创作。
其他行业
其他受益于转录服务的行业包括市场研究人员、视频和音频播客、自由撰稿人、作家和主讲人。
正如我们所看到的,有相当多的领域使用转录技术。因此,提供快速转录速度的解决方案需求量很大。在这篇文章中,我们将研究OpenaAI的Whisper Large V3用于快速转录,我们还将通过修改变压器管道中的各种参数,逐步将转录速度提高到极高的极限。
在E2E Cloud上启动
GPU要求
由于我们将引入Flash Attention(一种旨在加快变压器管道速度的算法),我们将使用A100 GPU,因为它们与Flash Attention兼容。为此,我们将使用E2E提供的云计算服务。让我们在E2E平台上为NVIDIA A100 GPU创建一个GPU节点。
确保在启用CUDA-11的情况下选择第二个选项,因为我们的实验需要它。
下载所需的库
!pip install -q --upgrade torch torchvision torchaudio !pip install -q git+https://github.com/huggingface/transformers !pip install -q accelerate optimum !pip install -q ipython-autotime !sudo apt install ffmpeg
然后,让我们将扩展自动时间加载到Jupyter笔记本上,以跟踪我们细胞的运行时间。
%load_ext autotime
接下来,导入所需的库。
import torch from transformers import pipeline
下载测试音频文件
在本文中,我们将使用Sam Altman和Lex Fridman之间的播客音频。音频长达2.5小时。它可以使用以下命令从我们创建的“拥抱脸”数据集中下载。
!wget https://huggingface.co/datasets/reach-vb/random-audios/resolve/main/sam_altman_lex_podcast_367.flac
案例1:使用基础变压器模型
对于第一种情况,我们将只使用我们的基本转换器模型,而不对参数进行任何调整,然后查看转录时间。
pipe = pipeline("automatic-speech-recognition", "openai/whisper-large-v2", device="cuda:0") outputs = pipe("sam_altman_lex_podcast_367.flac", chunk_length_s=30)
所以这花了19分46秒来转录整个音频。
输出前200个单词进行质量检查:
outputs["text"][:200]
案例2:分批
transformer中的批处理是指将多个输入序列分组为一个批以供模型处理的过程。这样做是为了提高模型在训练和推理过程中的效率。
outputs = pipe("sam_altman_lex_podcast_367.flac", chunk_length_s=30, batch_size=8)
用这种方法,转录时间下降到5分32秒,大约是我们原始时间的28%。
输出[“文本”][:200]
案例3:半精度
pipe = pipeline("automatic-speech-recognition", "openai/whisper-large-v2", torch_dtype=torch.float16, device="cuda:0")
在上面的代码中,torch.foat16指的是半精度浮点格式,也称为FP16。与FP32或FP64等高精度格式相比,半精度减少了神经网络的内存使用,允许训练和部署更大的网络,并在更短的时间内传输数据。
outputs = pipe("sam_altman_lex_podcast_367.flac", chunk_length_s=30, batch_size=16, return_timestamps=True)
输出[“文本”][:200]
案例4:BetterTransformer
当使用to_betterttransformer()将模型转换为BetterTransformer时,它受益于Transformers注意力机制的加速实现,从而更快地进行推理并提高内存效率。
pipe = pipeline("automatic-speech-recognition", "openai/whisper-large-v2", torch_dtype=torch.float16, device="cuda:0") pipe.model = pipe.model.to_bettertransformer() outputs = pipe("sam_altman_lex_podcast_367.flac", chunk_length_s=30, batch_size=16, return_timestamps=True)
案例5:更好的变压器+更大的批量
较大的批量大小可以通过跨示例并行化操作来提供计算效率。这可以加快训练,因为同时执行更多的计算。
案例6:引起注意/Flash Attention
Flash Attention是一种注意力算法,用于更有效地减少内存瓶颈和缩放基于转换器的模型,从而实现更快的训练和推理。它利用了平铺和重新计算等经典技术,显著提高了速度,大幅减少了内存使用。
首先安装以下库:
pip uninstall -y ninja && pip install ninja pip install wheel setuptools pip install flash-attn --no-build-isolation
在使用Flash Attention之前,您必须重新启动内核。所以请这样做。
pipe = pipeline("automatic-speech-recognition", "openai/whisper-large-v2", torch_dtype=torch.float16, model_kwargs={"use_flash_attention_2": True}, device="cuda:0") outputs = pipe("sam_altman_lex_podcast_367.flac", chunk_length_s=30, batch_size=24, return_timestamps=True)
输出[“文本”][:200]
结论
下表列出了我们使用的不同方法的转录时间:
正如我们所看到的,转录时间逐渐减少,直到我们达到2分2秒的疯狂快速转录时间。
工具书类
https://github.com/Vaibhavs10/insanely-fast-whisper/blob/main/notebooks/infer_transformers_whisper_large_v2.ipynb
- 登录 发表评论