「速记」在 Ubuntu Server 22.04.4 LTS 上,使用 GeForce RTX 4070 Ti 运行 OpenAI whisper 开源版本的语音转文字模型
前言
遇到一些挺诡异的问题,如果展开,能分成很多篇文章。但是我现在时间有限,只能速记下。
有一些很扯淡的问题。。。不想赘述。。。只给偏结论性质的速记吧。。。
为了防止再次入坑,我把用到的一些有价值的链接,都放到了最后。
最终能得到的效果
- 在 Server 版本的 Linux 服务器上,使用 GPU 运行 whisper 模型。(我知识有限,刚开始时,挺忐忑的,以为必须桌面版 Linux 才能跑 GPU 任务。)
- 基于 GeForce RTX 4070 Ti, 执行 Medium 大小的模型,60分钟的视频,转换为文本大约需要3分钟。说实话,非常快了。
- 我自己的使用体验看,Medium 模型,识别效果要远好于 Large。原因未知。可能时 Large 过多优化了。(我也确实不懂,就不多赘述了;选择自己合适的更重要。)
- 识别结果是分段的,我现在是每 段 后加个换行符,最终得到的文本,刚好类似于我关注的UP主 实时口播的效果。
- 效果,我认为还是很惊艳的。有些错别字,但是不影响实际的阅读。我已经正式用起来了。后续应该会加上更多的自动化逻辑。
核心步骤
0. 在服务器上,安装对应版本的 python 和 pip
- 安装 python 3.9
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.9
- 安装对应的 pip。这里的 pip 是跟 python 版本绑定的。或者说,每一个 python 版本的 pip 是需要互相独立安装的。我刚开始还没有意识到这一点。走了许多弯路。
sudo apt-get install python3.9-distutils
curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.9 get-pip.py
1.配置 VSCode, 支持 Python 的 Remote Devlopment。
- 本身,没啥特殊的。但是有一个细节:远程Linux系统上,一定要提前装好 python3 和 pip3。新系统,往往只自带 python3,没有pip3。而自己安装其他版本的 Python时,往往也不会意识到 pip 需要也单独另外安装下。
- 如果没有提前安装, VSCode 安装相关对应的 Python 插件时,会一直卡住。。。正常情况下,十几秒钟,插件就应该安装好了。。。
- 开始安装 VSCode extension 前,最好先确认下的 python3 和 pip3 是否安装好了。
python3 --version
pip3 --version
# 默认版本pip安装应该用
python3 get-pip.py
- 如果确认安装好了 pip3 和 python3,那可以先 卸载插件,然后再 重装 下该插件。即:先把 extension uninstall, 然后点击:install,最后又提示需要 ssh install,再点击对应按钮,即可!!估计第一次 install 时,因为远程没有 pip,导致卡住了,而部分关键信息,没有及时清除。
2. 在远程服务器上安装 nvidia相关驱动 和 cuda扩展包
这一步最好先做。如果先尝试安装了 wisper,可以把创建的临时环境删除,重新来安装 wisper。代码一涉及到硬件,似乎问题就往离奇路线走了。
安装部分,我给出的是手动安装的步骤,是更稳,更灵活的。Ubuntu有个自动检测安装的工具,如果你的Server版本刚好是一个不支持的小版本,就没法用了。我的服务器是 22.04.04,现在那个工具只支持到 22.04.03。因为我是新安装的系统吧,默认选了最新版本的 LTS 系统,以为这样比较稳。。。
- 手动安装显卡驱动和 cuda 扩展。nvidia-driver-550-server 是驱动版本,可能要对应修改,请自行权衡。
sudo apt-get install alsa-utils
sudo apt install nvidia-driver-550-server
sudo apt install nvidia-utils-550-server
sudo apt-get install cuda-toolkit
# 需要重启下电脑。(慎重!!!)
sudo reboot
- 检测是否安装成功和当前GPU使用情况:
nvidia-smi
3.创建一个 Python 虚拟环境:
- python 各自项目的包,最好还是各自独立管理。创建环境时,记得选择 python3.9。
- VSCode 新打开 Terminal,会自动切换到当前对应的虚拟环境里。如果想手动激活的话:
# 第一个 “点” 符号,是必须的。
. .venv/bin/activate
- 后续的操作,均假设是在项目独立的虚拟环境里进行的。
4.在项目虚拟环境里,安装 openai-whisper
- 详细安装的袭击,请参考官方文档,我这里贴出 Ubuntu 下的快捷命令,供自己后续快速被查:
pip install -U openai-whisper
sudo apt update && sudo apt install ffmpeg
pip install setuptools-rust
- 确认 cuda 是否已开启。开启了,才说明现在可以用 Nvida 显卡来运行模型了。
python -c "import torch; print(\"CUDA enabled:\", torch.cuda.is_available());"
其他补充信息:
- 代码执行时, 会额外自动下载对应模型。所以,机器的磁盘空间,要多留点。
- 可选配置,有自定义包或者 python代码无法正确语法提示时,可考虑配置 .vscode/settings.json。这里需要额外安装语法格式化插件 black-formatter
{
"terminal.integrated.env.linux": {
"PYTHONPATH": "${env:PYTHONPATH}:${workspaceFolder}/source:${workspaceFolder}/source/packages",
},
"python.analysis.extraPaths": [
"${workspaceFolder}/source/packages"
],
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "ms-python.black-formatter"
}
}
- 同一个设备上, GPU 相对 CPU,速度约提升 10 倍。
- 在GPU上,60分钟音频:
- small 模型:约100s。
- medium 模型:约200s。(中文,我的音频数据源,这个模型效果最好)
- large 模型:约350s。
- 在另一个终端窗口,持续观察 GPU 占用情况:
nvidia-smi -l 1
- 在最后的识别结果中,逐段分析 segments ,可能较容易得到更符合自己的文本排版:
len(result['segments'])
result['segments'][0]['text']
后记杂感:Python 真牛,我正在认真考虑将 Python 作为我的本命语言
我用一段不太准确的比喻,来使用我是用不同语言时的感觉吧。
假定,我的需求时:去县城。
- Swift/Kotlin: 一顿炫!画了各种牛逼的路线图,各种燃到炸的旅游攻略。
- Web/JS:也是各种炫。。。各种牛逼的路线,路线。。。
- Java:先吃饱饭,然后坚持每天早起,保持体力。然后骑上自行车出发吧。
- Python:您打的车,已经到楼下了。
是的,不太准确的类比,但是能相对准确地描述我心中的感觉。Python 就是简单粗暴,一招毙命,直击需求要害。
用一种相对文雅的说法就是: Python,能让你把注意力尽可能地聚焦在需求自身,然后用看上去不太牛逼的方式,恰如其分地,尽快帮你把事情做好。
我最近用 Python 写了不少小工具,解决了不少繁琐的琐事。没有界面,没有交互。就是单纯的 人脑和电脑,最简单,最原始的碰撞。。。等我有空再写写最近做的一些对自己的生活和学习 非常有价值的小事吧。
参考
- How to Install Python in Ubuntu
- Installing multiple alternative versions of Python on Ubuntu 20.04
- Whisper
- Installing python: who is deadsnakes and why should I trust them?
- The built-in Python 3 installation on Linux works well, but to install other Python packages you must install pip with get-pip.py
- get-pip.py
- #pipa ‘get-pip.py’ install error
- Differences between /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
- Difference between /bin and /usr/bin
- NVIDIA CUDA Installation Guide for Linux
- aplay: command not found
- How do I find the correct GPU driver for my use-case?
- How do I list all files of a directory?