数据学习
登录
注册
原创博客
期刊会议
学术世界
期刊出版社
领域期刊
SCI/SCIE/SSCI/EI简介
期刊列表
会议列表
所有期刊分区
学术期刊信息检索
JCR期刊分区查询
CiteScore期刊分区查询
中科院期刊分区查询
领域期刊分区
管理 - UTD24期刊列表
管理 - AJG(ABS)期刊星级查询
管理 - FMS推荐期刊列表
计算机 - CCF推荐期刊会议列表
高校期刊分区
南大核心(CSSCI)
合工大小核心
合工大大核心
AI资源仓库
AI领域与任务
AI研究机构
AI学术期刊
AI论文快讯
AI数据集
AI开源工具
AI模型
AI模型概览图
AI模型月报
AI基础大模型
AI预训练大模型
数据推荐
网址导航
我的网址导航
程序员必备网站
在消费级显卡上微调OpenAI开源的自动语言识别模型Whisper:8GB显存即可针对你自己的数据建立ASR模型
标签:
#ASR#
#LoRA#
#PEFT#
#Whisper#
#微调#
时间:2023/05/17 23:08:02
作者:小木
尽管自动语音识别(Auto Speech Recognition,ASR)已经有很多的解决方案,但是能够媲美人类水平的ASR模型屈指可数。与大语言模型不同的是,ASR领域可用的预训练模型很少,基于预训练模型在特定数据集上微调更是困难。而德国的一位博士生开源了一个使用LoRA(Low Rank Adaptation)技术和PEFT(Parameter Efficient Fine Tuning)方法对Whisper模型进行高效微调的项目。可以让大家在消费级显卡(显存8GB)上对OpenAI开源的WhisperV2模型进行微调!

#### 语音识别预训练模型Whisper简介 OpenAI在2022年9月21日开源的Whisper模型声称在英语的语音识别方面接近人类(Whisper模型卡信息:https://www.datalearner.com/ai-models/pretrained-models/Whisper )。并在同年的12月9日发布了Whisper V2版本。该模型参数规模15.5亿,表现十分优秀。由于Whisper是在一个大型和多样化的数据集上训练的,并没有针对任何特定的数据集进行微调,它并没有击败专门从事LibriSpeech性能的模型(这是一个著名的语音识别竞争基准)。然而,当在许多不同的数据集上测量Whisper的零散性能时,它比那些模型要稳健得多,犯的错误要少50%。

尽管如此,对于很多语言来说,Whisper识别准确率不够。而它本身已经是在80000多小时的数据上训练的,参数规模15.5亿,运行需要10GB显存起步,要求不低。进一步的,如果想要对`Whisper-large-v2`进行微调,则至少需要24GB显存,并且对训练过程种的每一个checkpoint需要7GB存储。对于个人来说,这样的硬件要求略高。 德国一个学生Vaibhav Srivastav发布了一个使用LoRA(Low Rank Adaptation)技术和PEFT(Parameter Efficient Fine Tuning)方法对Whisper模型进行高效微调的项目,只需要8GB显存即可对`Whisper-large-v2`进行微调,十分值得搞ASR的童鞋关注。 #### Faster Whisper Finetuning项目简介 Parameter Efficient Fine Tuning (PEFT)和Low Rank Adaptation (LoRA)是2种非常重要的模型微调方法。这两种方法只微调模型的一小部分(额外的)参数,同时冻结预训练模型的大部分参数,从而大大降低了计算和存储成本。尤其是LoRA,它在Transformer架构的每一层中注入可训练的秩分解矩阵,从而大大减少了下游任务的可训练参数数量。而且,LoRA的表现与完全微调的模型质量相当或更好,尽管它的可训练参数更少,训练吞吐量更高,并且与适配器不同,它没有额外的推理延迟。 在这个项目中,Vaibhav Srivastav提供了一份详细的步骤指南,指导大家如何使用🤗Transformers和PEFT在Google Colab中微调Whisper模型。 在这个Colab中,开发人员详细描述了利用PEFT和bitsandbytes无缝地训练一个`whisper-large-v2`的checkpoint,使用的是一块免费的T4 GPU(16 GB VRAM)。 此外,该项目还进行了一些基准测试,比较了使用LoRA进行Whisper微调和传统的Whisper微调。结果显示,即使在使用低于8GB VRAM的消费级GPU的情况下,使用LoRA进行微调的Whisper模型的性能与全面微调的性能相当,但是训练速度提高了5倍。 项目提供了一个对比: | 训练方法 | 可训练参数占比 | 显存大小 | 最大的batch size | |------------------|------------------|-------------------|-----------------| | LoRA | <1% | 8GB | 24 | | adaLoRA | <0.9% | 7.9GB | 24 | | Full-fine-tuning | 100% | OOM on T4 | OOM on T4 | 经过上述微调得到的最终的模型仅仅只有60MB大小,还不到原有模型的1%(OpenAI开源的模型大小约6.17GB) #### Faster Whisper Finetuning项目主要步骤 这个项目其实最大的优点我认为是提供了一个非常详细的基于PEFT微调ASR预训练模型的教程。它提供的Google Colab教程十分详细,而且是一个基于Common Voice 13.0数据集微调的真实案例。使用该模型微调印地语的数据。 这里列举一下该项目中微调Whisper模型的主要步骤: 1. 安装环境:本项目依赖了多个开源库,包括`datasets`、`transformers`等。 2. 加载数据集:本项目针对Common Voice 13.0的数据进行微调。这是由mozilla提供的一个开源语音数据集,包括2.7万小时各种语言的音频和文本数据集。 3. 特征抽取、tokenizer等:ASR的主要步骤包括数据抽取和音频数据预处理、seq-to-seq的映射、将模型的输出变成文本 4. 训练与验证:为模型准备输入数据,设置评估方法,加载预训练模型并配置LoRA,然后训练。 这里我们只展示其中加载预训练模型并设置LoRA的核心的代码: ```python from transformers import WhisperForConditionalGeneration from peft import prepare_model_for_int8_training, LoraConfig, PeftModel, LoraModel, LoraConfig, get_peft_model # 加载预训练模型 model = WhisperForConditionalGeneration.from_pretrained(model_name_or_path, load_in_8bit=True, device_map="auto") # 在8bit模型上做后处理 model = prepare_model_for_int8_training(model, output_embedding_layer_name="proj_out") # 由于Whisper模型在编码器中使用了卷积层,checkpointing会禁用梯度计算,因此我们需要将输入设为可训练。 def make_inputs_require_grad(module, input, output): output.requires_grad_(True) model.model.encoder.conv1.register_forward_hook(make_inputs_require_grad) # 对模型应用LoRA config = LoraConfig(r=32, lora_alpha=64, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none") model = get_peft_model(model, config) model.print_trainable_parameters() ``` 基于上述核心代码进行微调即可,正常情况,低配置的硬件需要6-8个小时完成微调。 完整项目地址:https://github.com/Vaibhavs10/fast-whisper-finetuning
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
相关博客
最热博客