项目简介
该项目用于对老师讲课音频进行总结,得到老师上课所讲内容的逐字稿和内容总结,方便学生在下课后对老师上课所讲内容进行总结复盘。基于Faster-whisper完成语音到逐字稿的转换,再由GLM-4-9B-Chat完成逐字稿到课上内容的总结,界面使用PyQT6进行开发。Faster-whisper和GLM-4-9B-Chat基于Intel的xFasterTransformer进行部署和推理。
gitee项目地址:https://gitee.com/SunnyCowMilk/video2summary
相关项目和平台介绍
Faster-whisper
Faster-Whisper 是一个使用 CTranslate2 重新实现的 OpenAI 的 Whisper 模型,能够高效地实现语音转文本,并且支持多国语言。它支持在 CPU 上进行 8 位量化,即使在cpu上运行也能有不错的处理速度。自带语音活动检测功能,能提前分离语音和非语音部分,提升识别速度并减少模型幻听。
我们将借助这一项目把课堂中老师的语音讲解转换为更易于查看的文本内容。
github项目地址: https://github.com/SYSTRAN/faster-whisper
GLM-4-9B-Chat
GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中,GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出较高的性能。 除了能进行多轮对话,GLM-4-9B-Chat 还具备网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大 128K 上下文)等高级功能。 同时还有多语言支持,支持包括日语,韩语,德语在内的 26 种语言。
魔搭项目地址: https://www.modelscope.cn/models/ZhipuAI/glm-4-9b-chat
xFasterTransformers
xFasterTransformer 是 X86 平台上针对大型语言模型(LLM)的一种经过高度优化的解决方案,与 GPU 平台上的 FasterTransformer 类似。xFasterTransformer 能够在多个插槽和节点上以分布式模式运行,以支持对更大模型的推理。此外,它提供了 C++ 和 Python API,涵盖从高级到低级的接口,使其易于采用和集成。
github项目地址:https://github.com/intel/xFasterTransformer
阿里云第八代 Intel CPU 实例
阿里云第八代实例(g8i)是国内首款搭载第五代英特尔至强可扩展处理器(代号 EMR)的云计算产品。依托阿里云自研的「飞天+CIPU」架构体系,ECS g8i 实例的整机性能最高提升 85%,AI 推理性能最高提升 7 倍,可支撑高达 72B 参数的大语言模型,为 AI 提速,同时新实例还提供了端到端安全防护,为企业构建可信 AI 应用提供强有力的隐私增强算力支撑。这里选取了阿里云ECS中的ecs.g8i.4xlarge实例作为我们的服务器。
环境部署
服务器配置选择
**实例:**Qwen-7B-Chat运行大概需要16 GiB内存以上,为了保证模型运行的稳定,实例规格至少需要选择ecs.c8i.4xlarge(32 GiB内存)。
**镜像:**Alibaba Cloud Linux 3.2104 LTS 64位。
公网IP:选中分配公网IPv4地址,带宽计费模式选择按使用流量,带宽峰值设置最大,为100 Mbps。
**系统盘:**Qwen-7B-Chat模型数据下载、转换和运行过程中需要占用60 GiB的存储空间,为了保证模型顺利运行,建议系统盘设置为100 GiB以上,我这里选了200g,这里价格差别很小,多选点内存避免之后不够用了。
**安全组规则:**在ECS实例安全组的入方向添加安全组规则并放行22端口和7860端口(22端口用于访问SSH服务,7860端口用于访问WebUI和API接口)
详细的配置截图如下:
初始环境配置
安装docker
这里可以使用阿里云的自动扩展安装
当任务状态显示已完成时就已经安装完毕。然后运行以下代码,检查docker是否安装成功
sudo systemctl status docker
如果出现以上内容表示docker安装成功了。
安装并运行Intel xFasterTransformer容器
我们之后需要使用英特尔的xFasterTransformer框架来对加速cpu的推理速度,这里直接运行以下两行命令来下载和运行配置好xFasterTransformer框架的docker环境。
sudo docker pull intel/xfastertransformer:latest
sudo docker run -it \
--name xFT \
-h xFT \
--privileged \
--shm-size=16g \
--network host \
-v /mnt:/mnt \
-w /mnt/xFasterTransformer \
intel/xfastertransformer:latest
下载和部署模型
安装linux命令
我们运行以下命令进行安装之后需要用到的命令。
yum update -y
yum install -y wget git git-lfs vim tmux
git-lfs 这个命令用于下载大文件,用于下载我们之后的模型文件。
tmux是一个终端复用器。它的作用的在我们使用ssh连接远程命令时,在tmux产生的终端中运行某些命令后,即使ssh中断了,这些命令也还会持续运行。
然后启用Git LFS
git lfs install
在启用之后,我们之后直接使用git clone xxx.git,git就能够下载到大文件了。
下载模型
首先创建并进入模型数据目录
mkdir /mnt/data
cd /mnt/data
然后创建一个tmux session,避免ssh中断后模型的下载也中断。
最终我们开始下载glm-4-9b-chat模型
git clone https://www.modelscope.cn/ZhipuAI/glm-4-9b-chat.git
100mb/s的网速下载大概需要半小时。
转换模型数据
由于下载的模型数据是HuggingFace格式,需要转换成xFasterTransformer格式。
python -c 'import xfastertransformer as xft; xft.ChatGLM4Convert().convert("/mnt/data/glm-4-9b-chat")'
pip换清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
运行模型
cd /root/xFasterTransformer/examples/web_demo
pip install -r requirements.txt
执行以下命令,启动WebUI。
OMP_NUM_THREADS=$(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') / 2)) GRADIO_SERVER_NAME="0.0.0.0" numactl -C $(seq -s, 0 2 $(($(lscpu | grep "^CPU(s):" | awk '{print $NF}') - 2))) -m 0 python ChatGLM4.py -t /mnt/data/glm-4-9b-chat -m /mnt/data/glm-4-9b-chat-xft -d bf16
自己写代码调用
import xfastertransformer
from transformers import AutoTokenizer, TextStreamer
# Assume huggingface model dir is `/data/chatglm-6b-hf` and converted model dir is `/data/chatglm-6b-xft`.
MODEL_PATH="/mnt/data/glm-4-9b-chat-xft"
TOKEN_PATH="/mnt/data/glm-4-9b-chat"
tokenizer = AutoTokenizer.from_pretrained(TOKEN_PATH, use_fast=False, padding_side="left", trust_remote_code=True)
streamer = TextStreamer(tokenizer, skip_special_tokens=True, skip_prompt=False)
model = xfastertransformer.AutoModel.from_pretrained(MODEL_PATH, dtype="bf16")
def query_glm4(prompt="你好,你是谁?"):
input_ids = tokenizer(prompt, return_tensors="pt", padding=False).input_ids
generated_ids = model.generate(input_ids, max_length=200, streamer=streamer)
generated_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
return generated_text.split(prompt)[1].strip("\n")
text = query_glm4("请介绍一下你自己")
print(text)
下载和部署whisper
下载whisper
pip install -U openai-whisper
测试whisper
安装和配置FastAPI
安装FastAPI
pip install fastapi
pip install "uvicorn[standard]"
然后创建server.py文件
运行FastAPI
我们运行一下命令,启动FastAPI接口
python -m uvicorn server:app --host 0.0.0.0 --port 8000 --timeout-keep-alive 600 --reload
再运行以下python代码,测试API能否正确访问
import requests
mp3_name = "lesson1.mp3"
res = requests.get(f"http://127.0.0.1:8000/items/1?q={mp3_name}").json()
print(res["res"])
这样,我们调用模型的api已经封装好了,下面开始开发程序界面。
开发课堂讲解复盘助手
这里使用Pyqt6进行开发界面。运行截图如下
生成的课程内容总结txt如下
这样我们就完整实现了课堂语音到逐字稿再到课堂内容总结,能够极大提高学生的学习效率。