如何在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

相关推荐
九鼎科技-Leo3 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Yang.995 小时前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3
我不瘦但很逗6 小时前
Windows下使用DBeaver连接云数据库(MySQL)
数据库·windows
ashane13147 小时前
Java list
java·windows·list
万里沧海寄云帆7 小时前
Word 插入分节符页码更新问题
windows·microsoft·word
惜.己7 小时前
Jmeter中的断言(二)
测试工具·jmeter·1024程序员节
dot.Net安全矩阵8 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
编程修仙9 小时前
Collections工具类
linux·windows·python
程序员小羊!11 小时前
高级 SQL 技巧讲解
windows
xiangshangdemayi12 小时前
Windows环境GeoServer打包Docker极速入门
windows·docker·容器·geoserver·打包·数据挂载