如何在Windows平台下基于Whisper来训练自己的数据

0. 简介

最近快到1024程序员节了,再给大家上点干活。Whisper是openai开源的一个语音转文字模型。也是现在识别效果最好的离线数据模型,但是我们发现我们在完成一些中英文或者专业术语对话的时候。这时候表现的效果就比较差了。而这一步就得用微调的方式来完成对这些特定词语进行修正了。这里最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡2.08元,月卡只需要1.36元每小时,并附带200G的免费磁盘空间。暂时已经满足我的使用需求了,同时支持访问加速,独立IP等功能,能够更快的完成项目搭建。同时我们也开源了我们的代码:https://github.com/lovelyyoshino/Whisper_finetuning

在1024程序员节,优刻得发了专属的算力金,注册点击上方的链接即可获得,可以说填写一个问卷就可以白嫖了

1. Whisper在Windows中安装----这里有人写过了,我们就不再重复;可以参考OpenAI开源语音识别模型Whisper在Windows系统的安装详细过程这个文章

1.1 安装Python

Python的安装很简单,点击这里进行下载

安装完成之后,输入python -V可以看到版本信息,说明已经安装成功了。

如果输入python -V命令没有看到上面的这样的信息,要么是安装失败,要么是安装好之后没有自动配置环境变量,如何配置环境变量可以从网上搜索。

Python的具体安装过程可以参考这篇文章

1.2 安装FFmpeg

ffmpeg是专门做音视频处理用的软件,并且是开源的,点击这里进行下载

安装过程也是十分的简单,具体安装过程可以到网上搜索,因为我这里已经安装过了,所以没办法重新演示安装过程。

这里需要注意,我们安装完成之后还需要配置环境变量。

1.3 配置环境变量

如何配置环境变量,这里以Windows 11为例。

首先右击桌面上的"此电脑",然后点击"属性",然后点击"高级系统设置",然后点击"环境变量",然后点击"系统变量"中的"Path",然后双击"Path"进入到设置"Path"窗口,然后点击"新建",然后把你安装FFmpeg的位置写上,注意写到bin目录,最后记得点击"确定"。

1.4 安装显卡驱动

如过你没有独立显卡,那么可以跳过这步。如果你使用的是AMD显卡,那你也可以跳过这步了。

这里我以NVIDIA显卡为例。

我自己电脑上的显卡是NVIDIA MX150 2GB显卡,所以我们安装驱动的时候也要选择与自己显卡类型一致的驱动。

点击这里下载显卡驱动

选择完成之后,点击"搜索"按钮,就可以看到有哪些可以下载的显卡驱动了,最后点击下载。

下载到本地之后,运行安装程序即可。

1.5 安装CUDA

安装完显卡驱动之后,我们打开显卡控制面板,找到显卡的信息,查看你显卡支持的CUDA版本。

可以看到我这里是12.1版本。

然后我们可以去官网下载对应版本的CUDA了,点击这里去下载

你要根据自己使用的系统来选择。

下载完成之后,直接双击运行即可。

这里比较大,为了下载更快,我使用了多线程下载器IDM。

这里再提一句,我们一定要下载对应版本的CUDA。

运行之后,可以选择自己安装的位置。

选择自定义安装,然后把前面两个勾选上。

然后是选择安装的位置。

然后你可能会安装失败。

我在安装过程中就有一个没有安装成功,我们可以不管它。

我们打开cmd命令行窗口,然后输入nvcc --version回车之后看到下面这些信息,说明安装成功了。

如果你们不懂,可以看参考文章

如果有需要的话,最好还要安装一下cuDNN。这里我就不安装了。具体可以参考这篇文章

1.6 安装PyTorch


简介:PyTorch是一个开源的Python机器学习库,其前身是著名的机器学习库Torch。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,它是一个面向Python语言的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这是很多主流深度学习框架比如Tensorflow等都不支持的。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。作为经典机器学习库Torch的端口,PyTorch 为 Python 语言使用者提供了舒适的深度学习开发选择。

点击这里下载PyTorch

这里说明一下,下载的PyTorch要与CUDA的版本一致,我这里使用的CUDA版本是12.1,但是我在官方PyTorch中没有找到该版本的下载命令。然后我是从网上找到一个命令安装了PyTorch。

bash 复制代码
pip --trusted-host pypi.tuna.tsinghua.edu.cn install torch==1.10.1+cu102 torchvision==0.11.2+cu102 torchaudio==0.10.1 -f https://download.pytorch.org/whl/torch_stable.html

安装完成之后可以进入python环境,如果输入import torch没有报错,说明就可以了。

python 复制代码
import torch
print(torch.__version__)
print(torch.cuda.is_available())

不过这里还是推荐大家下载与自己CUDA对应的版本。

1.7 安装whisper


安装whisper很简单,直接用一条命令即可。

bash 复制代码
pip install -U openai-whisper

不过使用这条命令安装会很慢,我们可以使用清华镜像。

bash 复制代码
pip install -U openai-whisper -i https://pypi.tuna.tsinghua.edu.cn/simple

1.8 whisper的使用


安装好后,我们使用下面的命令可以查看whisper如何使用。

bash 复制代码
whisper -h

我们现在就可以使用whisper来语音识别了。

bash 复制代码
whisper test.mp3 --model small --language Chinese

这里我们使用small模型,语言是中文,这样我们就可以把test.mp3音频文件转为文本并输出了。

我们可以指定输出的格式,默认是输出所有格式文件。

bash 复制代码
--output_format {txt,vtt,srt,tsv,json,all}

我们也可以直接传入视频来识别音频生成文件。

bash 复制代码
whisper test.mp4 --model small --output_format srt --language Chinese

如果你的显存不过用会报下面的错误。

bash 复制代码
RuntimeError: CUDA out of memory. Tried to allocate 226.00 MiB (GPU 0; 2.00 GiB total capacity;
1.34 GiB already allocated; 0 bytes free; 1.60 GiB reserved in total by PyTorch) If reserved 
memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  
See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

这个时候我们不要慌,我们还可以使用CPU,默认是使用GPU的,我们可以通过参数--device来指定使用CPU进行运算。

bash 复制代码
whisper test.mp4 --model small --output_format srt --device cpu --language Chinese

我们可以省略--language Chinese,这个时候可以自动识别出你音频的语言。

当我们使用CPU运算时,我们还可以指定使用的线程数量。

bash 复制代码
whisper test.mp4 --model small --output_format srt --device cpu --language Chinese --threads 8

2. 训练自己的数据

首先我们原始的数据模型在huggingface中,这就需要使用git将大文件都下载下来,这里就需要安装lfs

bash 复制代码
apt install git-lfs

然后按照下面的流程执行

2.1 安装

  • 克隆此代码
bash 复制代码
git clone https://github.com/lovelyyoshino/Whisper_finetuning.git
bash 复制代码
conda create -n whisper python=3.8
conda activate whisper
  • 配置环境 - 有一个命令会运行很久,中途可能会断掉,请多尝试
bash 复制代码
bash set_env.sh
  • 下载Whisper_large_v2模型(大概需要一晚上)
bash 复制代码
git clone https://huggingface.co/openai/whisper-large-v2
cd whisper-large-v2
git lfs fetch
git lfs checkout

PS

  • 也可以用Whisper_Tiny模型做尝试
bash 复制代码
git clone https://huggingface.co/openai/whisper-tiny
cd whisper-base
git lfs fetch
git lfs checkout

2.2 案例1:在Whisper上同时微调转录与翻译任务

bash 复制代码
cp -r whisper example/aishell-sample/
cd example/aishell-sample
2.2.1 数据准备
  • 转录数据,参考data/transcribe/{wav.scp,text}
  • 翻译数据,参考data/translate/{wav.scp,text} wav.scp

    id | language | task -> /absolute/path/to/wav

    text

    id | language | task -> label

id 语种 任务类型
BAC009S0150W0001 chinese translate
BAC009S0150W0001 chinese transcribe
bash 复制代码
# 模型总共训练数据 - 将翻译和转录的数据合并为一个整体
cat data/transcribe/wav.scp data/translate/wav.scp > data/wav.scp
cat data/transcribe/text data/translate/text > data/text
2.2.2 更改配置

修改 config/whisper_multitask.yaml

yaml 复制代码
data:
  train:
    wav_scp: "训练数据wav.scp的绝对路径"
    text: "训练数据text的绝对路径"
  test:
    wav_scp: "测试数据wav.scp的绝对路径"
    text: 测试数据text的绝对路径"

predict:
  model_path: "自己微调之后的模型位置"
  result_file: "结果保存的绝对路径"
  eval: 
    wav_scp: "验证数据wav.scp的绝对路径"
    text: "验证数据text的绝对路径"

dev_env:
  ori_model_path: "原始模型路径"
  ctranslate_model_path: "ctranslate转后的模型"
  conf:
    device: "cpu"
    compute_type: "float32"
  result_file: "结果保存的绝对路径"
  dev:
    wav_scp: "测试数据wav.scp的绝对路径"
    text: "测试数据text的绝对路径"

model:
  model_path: "自己的whisper_large_v2或者base模型路径"
  is_large_model: "如果是whisper_large_v2模型则设置为True否则为False"
  data_collator:
    forward_attention_mask: False
  model_train_argv:
    out_model_path: "模型保存的路径"
    resume_from_checkpoint : ""
    per_device_train_batch_size: 1
    per_device_eval_batch_size: 1
    gradient_accumulation_steps: 1
    num_train_epochs: 1
    learning_rate: 0.0001
    logging_steps: 2
    fp16: False
    warmup_steps: 50
    evaluation_strategy: "epoch"
    generation_max_length: 128
    remove_unused_columns: False
    label_names:
      - labels

2.3 训练模型

更改代码中配置文件路径

bash 复制代码
python3 train.py

2.4 测试模型

更改代码中配置文件路径

bash 复制代码
python3 predict.py

2.5 使用CTranslate2进行模型加速

python 复制代码
from whisper.utils.common_utils import convert_finetuning_peft_model_into_whisper

log_info("Lora参数融入Whsiper")
convert_finetuning_peft_model_into_whisper(
  # 微调后的peft模型路径
  peft_model_path=config['predict']['model_path'],
  # 原始whisper模型路径
  whisper_model_path=config['dev_env']['ori_model_path'],
  # 可以使用ctranslate加速后的模型位置
  out_ctranslate_path = config['dev_env']['ctranslate_model_path']
)

2.6 Whipser使用

读取对应的pt文件,与原来的文件进行对比

bash 复制代码
python whipser_demo.py

3. 参考链接

https://blog.csdn.net/qq_43907505/article/details/130590052

相关推荐
Mr-Apple1 小时前
windows编译googletest框架搭配vscode调试
ide·windows·vscode
慕羽★10 小时前
详细介绍如何使用rapidjson读取json文件
linux·c++·windows·json·file·param·rapidjson
sukalot11 小时前
windows C#-命名实参和可选实参(下)
windows·c#
只抄16 小时前
Windows “高性能”模式既不高效,也不节能?
windows
带电的小王18 小时前
whisper.cpp: Android端测试 -- Android端手机部署音频大模型
android·智能手机·llm·whisper·音频大模型·whisper.cpp
字母数字或汉字21 小时前
了解与配置 Git autocrlf 文本换行符处理
windows·git
带电的小王1 天前
whisper.cpp: PC端测试 -- 电脑端部署音频大模型
llm·whisper·音视频·音频大模型
树懒_Zz1 天前
记录 io.springfox 3.0.0 整合 spring boot 2.6.x 由于 springfox bug 引发问题
windows·spring boot·bug
花花鱼1 天前
VSCode中鼠标指针消失的原因及解决方法
ide·windows·vscode·编辑器
anniewwy1 天前
在Windows本地用网页查看编辑服务器上的 jupyter notebook
服务器·windows·jupyter