项目简介

该项目用于对老师讲课音频进行总结,得到老师上课所讲内容的逐字稿和内容总结,方便学生在下课后对老师上课所讲内容进行总结复盘。基于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接口)

详细的配置截图如下:


课堂讲解复盘助手_python

课堂讲解复盘助手_docker_02

初始环境配置

安装docker

这里可以使用阿里云的自动扩展安装

课堂讲解复盘助手_python_03

课堂讲解复盘助手_docker_04

当任务状态显示已完成时就已经安装完毕。然后运行以下代码,检查docker是否安装成功

sudo systemctl status docker

课堂讲解复盘助手_python_05

如果出现以上内容表示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

课堂讲解复盘助手_docker_06

下载和部署模型

安装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_07

在启用之后,我们之后直接使用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

课堂讲解复盘助手_docker_08

100mb/s的网速下载大概需要半小时。

转换模型数据

由于下载的模型数据是HuggingFace格式,需要转换成xFasterTransformer格式。

python -c 'import xfastertransformer as xft; xft.ChatGLM4Convert().convert("/mnt/data/glm-4-9b-chat")'

课堂讲解复盘助手_python_09

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]"

课堂讲解复盘助手_python_10

然后创建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"])

课堂讲解复盘助手_python_11

这样,我们调用模型的api已经封装好了,下面开始开发程序界面。

开发课堂讲解复盘助手

这里使用Pyqt6进行开发界面。运行截图如下

课堂讲解复盘助手_python_12

生成的课程内容总结txt如下

课堂讲解复盘助手_git_13

这样我们就完整实现了课堂语音到逐字稿再到课堂内容总结,能够极大提高学生的学习效率。