从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况

win10,whisper,faster,whisperx,cpu,gpu · 浏览次数 : 0

小编点评

## CUDA 测试结果 **Python 代码:main.py** ```python import torch import os from whisper import load_model def whisper_test(): # 设置环境变量 os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE' # 加载模型 model = load_model("large-v3", device="cuda") # 执行测试 result = model.transcribe("test.mp4", fp16=False) # 输出结果 output_directory = ".\" word_options = { "highlight_words": True, "max_line_count": 50, "max_line_width": 3, } srt_writer = get_writer("srt", output_directory) srt_writer(result, filename, word_options) # 测试 whisper_test() ``` **电脑配置:** * 操作系统:Windows 10 * 处理器:Intel Core i7-1165G7 * 内存:16GB * 显卡:NVIDIA GeForce RTX 2080 * GPU内存:8GB **测试结果:** * `whisper_test()` 函数执行后,观察到 GPU 的内存占用最终在 GPU 运行的情况下,我测试了三次 `window-whisper-GPU` 的测试,大致平均 150 秒。 * 在 `window-faster-whisper-GPU` 中,我测试了三次 `window-faster-whisper-GPU` 的测试,大致平均 50 秒。 * 在 `window-faster-whisper-CPU` 中,我测试了三次 `window-faster-whisper-CPU` 的测试,大致平均 50 秒。 * `whisper_x` 的测试结果没有提供,因为我无法从代码中获取该结果。 **总结:** * 在该测试中,使用 GPU 的 `window-whisper-GPU` 版本比 CPU 的版本更快,但速度仍然比 CPU 的版本略低。 * 此外,使用 `window-faster-whisper-GPU` 版本比 `window-faster-whisper-CPU` 版本更快,但速度依然比 CPU 的版本略低。 * `whisper_x` 版本未提供测试结果。

正文

Anaconda是什么?

Anaconda 是一个开源的 Python 发行版本,主要面向数据科学、机器学习和数据分析等领域。它不仅包含了 Python 解释器本身,更重要的是集成了大量的用于科学计算、数据分析和机器学习相关的第三方库,并且提供了一个强大的包管理和环境管理工具——Conda。
通过Conda可以在一台电脑上,创建多个python的环境,非常自由的进行切换。
以下是 Anaconda 的主要特点和功能:

  • 便捷的环境管理:Anaconda 通过其内置的包管理器 Conda,使得创建、管理和切换不同的 Python 环境变得极为简单。用户可以在不同项目之间轻松配置独立的环境,每个环境中可以安装特定版本的 Python 和其他库,避免了不同项目依赖之间的冲突。

  • 丰富的数据科学工具:安装 Anaconda 时会附带一系列常用的数据科学库,如 NumPy、Pandas、Matplotlib、Scikit-learn 等,以及 Jupyter Notebook 这样的交互式开发环境。还包括其他有用的工具,例如 Spyder IDE(集成开发环境)和 IPython 终端等,这些都为数据科学家提供了开箱即用的一站式解决方案。

  • 高效的包管理:Conda 不仅可以管理 Python 包,还能管理非 Python 软件包,如R语言相关包或 C/C++ 编译器等。Conda 能够智能地解决复杂的软件依赖关系,确保所有库和组件都能正确安装和协同工作,极大地提高了开发效率。

  • 跨平台支持:Anaconda 支持 Windows、Linux 和 MacOS 等多种操作系统,便于在不同的开发平台上统一使用和部署。

下载anaconda并在window上安装

https://www.anaconda.com/download/success

这是anaconda的官网下载地址

image

这里要注意python的版本,尽量跟它保持一致,点击下载之后,如果网络好的话等待一会儿就下载完毕了。

image

下载完毕后,打开exe进行安装

image

这里安装时间可能会久一些,请多耐心等待一会儿吧。

image

确实等了蛮久的时间的,但具体忘记了,可能大致在15-20分钟左右吧,千等万等终于安装成功了

image

此时用命令行来查看还是不行的,因为没有配置环境变量

以此点击:我的电脑=> 右键属性=>高级系统设置=>环境变量=> Path =>编辑
将下面的五个路径添加到 Path中去

注意替换成你的安装路径

D:\ProgramData\anaconda3
D:\ProgramData\anaconda3\Scripts 
D:\ProgramData\anaconda3\Library\mingw-w64\bin
D:\ProgramData\anaconda3\Library\usr\bin 
D:\ProgramData\anaconda3\Library\bin

image

点击三次确定之后,再在命令行中运行

image

这样说明真正的安装成功了,下面再来看看如何使用

conda如何来使用呢

  • 基础命令
// 查看版本
conda -V

// 查看安装了那些包
conda list

//查看当前存在哪些虚拟环境
conda env list 或 conda info -e

//检查更新当前conda
conda update conda 

// 使用conda安装python依赖
conda install xxxx
  • 创建一个虚拟环境

因为我之前电脑上安装的就是3.11.2的版本,所以在这里直接继续指定python版本为3.11.2

conda create -n python3112 python=3.11.2

此时可以查看window电脑上拥有那些虚拟环境

conda env list

image

激活环境

conda activate python3112

首次执行上面的命令可能需要使用conda init,执行完毕后关闭当前shell脚本命令,再重新打开执行激活环境的命令

image

退出虚拟环境

conda deactivate

注意:看上面我是直接在CMD下使用的命令,比如如果你想在git bash下运行conda的话

image

echo ". /d/ProgramData/anaconda3/etc/profile.d/conda.sh" >>~/.profile

上面替换成自己的安装目录,执行完毕之后,关闭命令窗口,重新打开一个新的便可以执行 conda命令了

conda安装成功之后,安装依赖尽量使用conda 来,就不要使用pip了

初始使用了几天的conda,感觉还不错

如何在window上开启GPU

首先使用 cmd 命令行输入 nvidia-smi ,在第一行最右边可以看到CUDA的版本号,我的版本是12.3

image

https://pytorch.org/get-started/locally/
打开网址选择一个比较靠近的版本

image

最终选择完生成命令为

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

如果有卡住的可能就是网络有问题了,可以直接到镜像源进行下载安装 https://download.pytorch.org/whl/torch_stable.html

image
这里也需要你的耐心等待哟,因为Pytorch 的安装包还是不小的。

image

多等一会儿,出现done则代表安装成功了,然后在命令行中输入pip list则可以看到torch相关的包都安装了

image

CUDA是什么:CUDA是NVIDIA推出的一种编程技术。它允许开发者使用C语言来编写能在NVIDIA的图形处理器上运行的代码。通过CUDA,开发者可以将GPU用于通用的并行计算,大大提高了计算效率。
CUDA的一个重要特点是,它允许软件开发者直接使用NVIDIA的GPU来执行某些计算密集型的任务。这是因为GPU内部有许多并行处理单元,可以同时执行许多计算任务,从而大大提高了计算速度。
另外,CUDA还提供了一套完整的开发工具链,包括编译器、调试器和性能分析器,使得开发者可以更方便地开发和优化CUDA程序。

接下来直接验证CUDA是否可用,直接继续命令行中输入 python

import torch
torch.cuda.is_available()

如果输出为true则代表可以使用GPU显卡了

image

准备whisper、faster-whisper、whisperX的测试代码

import whisper
from whisper.utils import get_writer
import os
import time
import torch
import os   #引用OS
from faster_whisper import WhisperModel
import whisperx
import gc 

def whisperx_test():
    device = "cpu" 
    model_size = "large-v3"
    audio_file = "test.mp4"
    batch_size = 16
    compute_type = "int8" 

    # widnow CPU
    model = whisperx.load_model("large-v3", device, compute_type=compute_type)

    # window GPU
    # model = whisperx.load_model("large-v3", "cuda", compute_type="float16")

    audio = whisperx.load_audio(audio_file)
    result = model.transcribe(audio, batch_size=batch_size)

    print(result["segments"])

def faster_whisper_test(): 
    model_size = "large-v3"

    ## window cpu
    model = WhisperModel(model_size, device="cpu", compute_type="int8", cpu_threads=16)
    
    # window gpu
    # model = WhisperModel(model_size, device="cuda", compute_type="float16")
    segments, info = model.transcribe("test.mp4", beam_size = 5)

    print("Detected language '%s' with probability %f" % (info.language, info.language_probability))

    for segment in segments:
        print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

def whisper_test():

    os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

    filename = "test.mp4"   

    ## window GPU  cuda
    ## window CPU  cpu
    ## mac CPU cpu
    ## mac GPU
    model = whisper.load_model("large-v3",device="cuda")
    result = model.transcribe(audio=filename, fp16 =False)
    output_directory = "."

    word_options = {
    "highlight_words": True,
    "max_line_count": 50,
    "max_line_width": 3
    }

    srt_writer = get_writer("srt", output_directory)
    srt_writer(result, filename, word_options)

if __name__ == "__main__":
    # print(torch.cuda.is_available())
    start_time = time.time()  # 开始时间
    print("start time:", start_time)
    # whisper_test()
    # faster_whisper_test()
    whisperx_test()
    end_time = time.time()  # 结束时间
    print("Execution time: ", end_time - start_time, "seconds")

三个开源项目的地址分别是:

根据代码要进行安装依赖,也是我从三个开源项目的readme中可以找到安装依赖的命令

// 安装openai-whisper
pip install -U openai-whisper --user
//或者
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

// 安装faster-whisper
pip install faster-whisper
//或者
pip install git+https://github.com/openai/whisper.git 


//安装whisperx
pip install git+https://github.com/m-bain/whisperx.git

//如果运行后,看到ffmpeg not found 
要记得安装一下ffmpeg

当然上面的pip也可以换成conda

准备了三个方法

  • whisper_test 来测试openai官网发布的whisper
  • faster_whisper_test来测试改进版的faster_whisper
  • whisperx来测试基于faster_whisper再次改进的版本
    测试的时候,我是准备了一个30秒的小视频 test.mp4。
    然后分为CPU和GPU进行分别测试。

根据测试情况进行注释上述方法即可,运行如下命令即开启测试

python main.py

在这里先附上我的电脑配置,其实是比较一般的

image

window上测试openai的whisper

  • 先来看GPU测试情况
    我先打开任务管理器 => 性能 => GPU

image

没进行测试的时候GPU的占用其实很少的,如果一旦开启了GPU测试就可以看到下图所示的GPU内存占用

image

最终在GPU运行的情况下,我测试了三次

image

window-whisper-GPU:大致平均150秒

  • 再来测试CPU的情况
    运行之后我的CPU直接100%,直接拉满了

image

同样,再使用CPU的情况下,测试了三次

image

看来我这个GPU显卡还是非常一般的,竟然没有CPU的快

window-whisper-CPU:大致平均100秒

window上测试faster-whisper

  • 先来看GPU测试情况

image

同样分三次进行测试大致也就是50秒左右,在GPU的情况下,内存占用居然比whisper的少了近一半,难道速度也能提升一半吗?

image

window-faster-whisper-GPU: 大致平均50秒左右
没想到真的提升了速度,而且不止一半,真不错

  • 再来测试CPU的情况

image

同样的CPU接近100%了,但是内存好像比原来少了差不多一半

image

window-faster-whisper-CPU: 大致平均50秒左右

window上测试whisperX

GPU 测试三次

image

window-whisperX-GPU: 大致平均36秒左右
CPU 测试三次

image

window-faster-whisperX-CPU: 大致平均43秒左右

没想到的是whisperx在faster-whisper的基础上还有提升

mac上运行whisper

本来还想继续在mac上测试,发现除了openai的whisper能在CPU下运行,其他的跑起来都有问题,可能也是我自己的问题吧

image

mac-openai-whisper-CPU:大致50秒左右
这是自Mac M1 Pro上做的测试

总结一下

image

我只是进行简单的测试做了一个对比。mac的CPU还是非常强大的,当然了价格也摆在了那里。

我这里测试的时候也没有进行过多的参数调整,有时间的话可以进行比如 int8、float16、float32等等其他的多组测试数据。

接下来看看有机会再来试试另外两个开源模型

与从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况相似的内容:

从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况

Anaconda是什么? Anaconda 是一个开源的 Python 发行版本,主要面向数据科学、机器学习和数据分析等领域。它不仅包含了 Python 解释器本身,更重要的是集成了大量的用于科学计算、数据分析和机器学习相关的第三方库,并且提供了一个强大的包管理和环境管理工具——Conda。 通过C

从零做软件开发项目系列之三——系统设计

前言 在与客户充分接触后取得需求调研结果,然后分析调研内容,撰写完成项目的需求规格说明书。这是一个正式的文件,需要供需双方签字确认。说明书中会明确需求方的要求和开发方实现的内容,依据需求规格说明书,开发方就要开展系统设计工作。 进行系统设计工作,粗略的可以分成两个阶段,概要设计(总体设计)阶段和详细

从零做软件开发项目系列之四——数据库设计

前言 在对软件进行设计的过程中,数据库的设计是一项重要的内容,软件中主要的处理对象就是各类业务数据,通过对业务数据的处理,实现各种功能。我们经常说的,写程序,说到底就是增删改查,而增删改查的对象就是各种数据。数据都存储在数据库中,其重要性不言而喻,对于数据库的设计也是软件设计的一个重要基础。 1 数

从零做软件开发项目系列之六——软件测试

软件测试是指在软件开发过程中对软件系统进行验证和验证的过程。它的目的是确保软件能够按照设计要求正常运行,同时检测和纠正可能存在的缺陷和问题。软件测试有助于提高软件质量、可靠性和用户满意度。

从零做软件开发项目系列之二——需求调研

在接到软件开发任务之后,第一件要做的事情就是进行需求调研工作,基于前期的沟通以及合同向用户了解具体需求,从而有针对性地开展后续工作。整个调研过程分为调研准备,调研实施,需求分析。

从零做软件开发项目系列之五——系统开发过程

在软件项目的设计开发过程中,除了前期的用户需求调研确认,系统设计、数据库设计等工作之外,还有一些重要的工作需要考虑,比如软件开发模式,如何制定开发计划,如何协调开发人员开展开发工作等。

从零实现的Chrome扩展

# 从零实现的Chrome扩展 `Chrome`扩展是一种可以在`Chrome`浏览器中添加新功能和修改浏览器行为的软件程序,例如我们常用的`TamperMonkey`、`Proxy SwitchyOmega`、`AdGuard`等等,这些拓展都是可以通过`WebExtensions API`来修改

Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!

**在这篇文章中,我将手把手地教你如何从零开始部署一个使用Django框架的Python服务。无论你是一个刚开始接触开发的新手,还是一个有经验的开发者想要快速了解Django,这篇教程都会为你提供一条清晰的路径。我们将从环境搭建开始,一步一步地创建一个可以处理GET和POST请求的服务,让你能在实践

从零做软件开发项目系列之一——综论软件开发项目

介绍了软件项目从申请到开发实施到结项的整个过程,在这个过程中,根据项目或公司的大小,会有不同的职位参与,如果是小的公司,可能一人兼任了很多职位,很多过程也会简化或省略。一般大一些公司,人员多,职位会设置的比较全,流程也会多一些。

从零做软件开发项目系列之十——项目运维

项目结项后的运维阶段是确保软件持续稳定运行、修复问题、满足用户需求的关键时期。在这个阶段,需要建立有效的维护制度,关注各种问题,并采取相应措施来保障系统的可靠性和可持续性。