如何在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中安装

1.1 安装Python

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

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

image-20230509092511675

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

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

1.2 安装FFmpeg

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

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

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

1.3 配置环境变量

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

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

image-20230509093842936

1.4 安装显卡驱动

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

这里我以NVIDIA显卡为例。

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

点击这里下载显卡驱动

image-20230509094758032

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

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

1.5 安装CUDA

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

image-20230509095743549

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

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

image-20230509100149838

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

image-20230509100544375

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

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

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

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

image-20230509101425869

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

image-20230509101735549

然后是选择安装的位置。

image-20230509102032398

然后你可能会安装失败。

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

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

image-20230509102647070

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

如果有需要的话,最好还要安装一下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。

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没有报错,说明就可以了。

import torch
print(torch.__version__)
print(torch.cuda.is_available())

image-20230509110550580

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

1.7 安装whisper


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

pip install -U openai-whisper

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

pip install -U openai-whisper -i https://pypi.tuna.tsinghua.edu.cn/simple

1.8 whisper的使用


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

whisper -h

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

whisper test.mp3 --model small --language Chinese

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

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

--output_format {txt,vtt,srt,tsv,json,all}

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

whisper test.mp4 --model small --output_format srt --language Chinese

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

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进行运算。

whisper test.mp4 --model small --output_format srt --device cpu --language Chinese

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

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

whisper test.mp4 --model small --output_format srt --device cpu --language Chinese --threads 8

2. 训练自己的数据

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

apt install git-lfs

然后按照下面的流程执行

2.1 安装

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

PS

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

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

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语种任务类型
BAC009S0150W0001chinesetranslate
BAC009S0150W0001chinesetranscribe
# 模型总共训练数据 - 将翻译和转录的数据合并为一个整体
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

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 训练模型

更改代码中配置文件路径

python3 train.py

2.4 测试模型

更改代码中配置文件路径

python3 predict.py

2.5 使用CTranslate2进行模型加速

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文件,与原来的文件进行对比

python whipser_demo.py

在这里插入图片描述

3. 参考链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EM算法(期望最大算法、Expectation Maximization Algorithm)

EM算法(期望最大算法、Expectation Maximization Algorithm) 引言 EM算法,全称为期望最大(Expectation Maximization)算法,是一种从不完全数据或有数据丢失的数据集(存在隐含变量)中求解概率模…

Oracle单实例静默安装

oracle 11g单实例静默安装 在CentOS上静默安装Oracle数据库 引言 在企业环境中,自动化和标准化是提高效率的关键。静默安装(也称为无人值守安装)是一种无需人工干预的安装方法,适用于大规模部署或需要重复安装的场景。本文将介…

【redis】初识非关系型数据库——redis

W...Y的主页 😊 代码仓库分享💕 初识 Redis Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis 中的值可以是由string(字符串)、hash&#xff0…

【Python爬虫实战】多进程结合 BeautifulSoup 与 Scrapy 构建爬虫项目

#1024程序员节|征文# 🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 前言 在大数据时代,爬虫技术是获取和处理网络数据的利器。面对需要处理大…

ChatGPT实现旅游推荐微信小程序

随着旅游行业的快速发展,个性化推荐已成为提升用户体验的重要手段。通过AI技术,提供一个智能旅游推荐小程序,使用户能够轻松获取定制化的旅行建议。 项目概述 项目目标 开发一个AI旅游推荐小程序,基于用户输入的旅行偏好&#…

Visual Studio安装图文详解教程

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍 Visual Studio 社区版的安装过程及其注意事项。 Visual Studio简介 Visual Studio 社区版功能完备且可扩展的免费 IDE,可用于创…

【WPF】中Dispatcher的DispatcherPriority参数使用

在 WPF 中,DispatcherPriority 参数用于指定通过 Dispatcher 调度的操作的执行优先级。加入 DispatcherPriority 参数的情况通常取决于你希望操作何时以及如何被执行。 1.Dispatcher的DispatcherPriority参数使用 以下是几种情况和示例说明: 1.1 需要…

【STM32 Blue Pill编程实例】-控制步进电机(ULN2003+28BYJ-48)

控制步进电机(ULN2003+28BYJ-48) 文章目录 控制步进电机(ULN2003+28BYJ-48)1、步进电机介绍2、ULN2003步进电机驱动模块3、硬件准备及接线4、模块配置3.1 定时器配置3.2 ULN2003输入引脚配置4、代码实现在本文中,我们将介使用 STM32Cube IDE 使用 ULN2003 电机驱动器来控制28B…

自由学习记录(14)

unity操作问题 位置:子物体的位置是相对于父物体的。如果你移动父物体,子物体会保持相对于父物体的相对位置,跟着一起移动。 旋转:子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放&#xf…

【HarmonyOS NEXT】鸿蒙开发环境准备

0. 引言 看了发布会以后,热血澎湃啊,是时候学学把自己做的一些小工具搞成鸿蒙版了!!! 1. 开发工具下载 下载地址:https://pan.quark.cn/s/08ddebdb7a20 工具版本会不定时更新,下载最新版即可…

【网络原理】——HTTP协议、fiddler抓包

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:认识HTTP 1:超文本传输 2:发展历史 3:HTML 4&am…

Axure树形菜单展开与折叠

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:Axure树形菜单展开与折叠 主要内容:树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景:关系树、菜…

R语言机器学习算法实战系列(十)自适应提升分类算法 (Adaptive Boosting)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理步骤教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模型总…

断点续传技术是什么?大型文件传输的新模式!

随着科技的不断进步,文件传输已成为我们日常生活和工作中不可或缺的一部分。然而,传输大型文件时常常会遇到网络不稳定、传输中断等问题,导致传输失败或者重新传输。为解决这一问题,断点续传技术应运而生。 一、断点续传技术是什么…

3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模

非地面网络 1. Scope4. 非地面网络背景介绍4.1 5G中的非地面网络4.2 非地面网络在5G中的用例4.3 卫星和空中接入网的架构4.4 卫星和空中接入网终端的特点4.5 空气/星载飞行器特性4.6 NTN的覆盖模式4.7 NTN网络架构选项4.8 频谱 5. 非地面网络应用场景5.1 应用场景概览5.2 属性介…

STM32通信协议-I2C

目录 一,IC2的协议规则 I2C总线是PHILIPS公司开发的两线式串行总线,I2C总线主要解决了单片机一对多通信的问题 两根通信线:SCL,SDA,同步,半双工通信,支持数据应答机制,支持总线挂载多设备。 …

2024ideaUI切换和svn与git的切换,svn的安装和配置,idea集成svn ,2024-10-18日

2024-10-18日 2024的UI实在很不舒服,隐藏了很多按键; 第一步: 视图 -》 外观 -》 工具栏选出来; 结果出来: 运行的按键和设置的按钮 第二步 点击设置的按钮,选择最后一个,重启就行 结果 舒服&…

网站漏扫:守护网络安全的关键防线

网站漏洞扫描,简称漏扫,是一种针对网站进行漏洞检测的安全服务。网站漏洞扫描在网络安全中占据着至关重要的地位。 网站漏扫在及时发现和修复漏洞方面发挥着关键作用 通过对网站和系统的全面扫描,能够快速识别出各种潜在的漏洞,…

网络安全领域推荐证书介绍及备考指南

在网络安全领域,拥有专业认证不仅可以证明个人的专业能力,还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…

<项目代码>YOLOv8路面垃圾识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…