README.md 5.32 KB
Newer Older
chenzk's avatar
v1.0  
chenzk committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# GLM-4-Voice
多模态模型GLM-4-Voice具备情感理解能力,能够模拟不同的情绪和语调,如高兴、悲伤、生气、害怕等,实现情感表达和共鸣,能识别中国各地方言,如粤语、重庆话、北京话等直接输出语音。
## 论文
`GLM: General Language Model Pretraining with Autoregressive Blank Infilling`
- https://aclanthology.org/2022.acl-long.26.pdf

## 模型结构
GLM-4Voice 由三个部分组成:
- GLM-4-Voice-Tokenizer: 通过在 Whisper 的 Encoder 部分增加 Vector Quantization 并在 ASR 数据上有监督训练,将连续的语音输入转化为离散的 token。
- GLM-4-Voice-Decoder: 基于 CosyVoice 的 Flow Matching 模型结构训练的支持流式推理的语音解码器,将离散化的语音 token 转化为连续的语音输出。
- GLM-4-Voice-9B: 在 GLM-4-9B 的基础上进行语音模态的预训练和对齐,从而能够理解和生成离散化的语音 token。
<div align=center>
    <img src="./doc/architecture.png"/>
</div>

## 算法原理
不同于ASR + LLM + TTS级联方案,GLM-4-Voice 采用Speech2Speech方案,以离散Token的方式表示音频,实现了音频的输入和输出的端到端建模,语音识别(ASR)模型以有监督方式训练音频Tokenizer,语音合成采用Flow Matching模型流式从音频Token合成音频,识别、合成之间的基座模型采用GLM-4-9B。

## 环境配置
```
mv glm-4-voice_pytorch GLM-4-Voice # 去框架名后缀
```

### Docker(方法一)
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.3.0-ubuntu22.04-dtk24.04.2-py3.10
# <your IMAGE ID>为以上拉取的docker的镜像ID替换,本镜像为:83714c19d308
docker run -it --shm-size=64G -v $PWD/GLM-4-Voice:/home/GLM-4-Voice -v /opt/hyhal:/opt/hyhal:ro --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name glm4v <your IMAGE ID> bash
cd /home/GLM-4-Voice
pip install -r requirements.txt # requirements.txt
# 安装ffmpeg
apt update
apt-get install ffmpeg
# 安装Matcha-TTS
cd third_party/Matcha-TTS
pip install . # matcha-tts==0.0.7.0
# 安装gradio
pip install gradio==5.4.0 # gradio
cp -r frpc_linux_amd64 /usr/local/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
chmod +x /usr/local/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
```
### Dockerfile(方法二)
```
cd GLM-4-Voice/docker
docker build --no-cache -t glm4v:latest .
docker run --shm-size=64G --name glm4v -v /opt/hyhal:/opt/hyhal:ro --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v $PWD/../../GLM-4-Voice:/home/GLM-4-Voice -it glm4v bash
# 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:pip install -r requirements.txt。
cd /home/GLM-4-Voice
# 安装ffmpeg
apt update
apt-get install ffmpeg
# 安装Matcha-TTS
cd third_party/Matcha-TTS
pip install . # matcha-tts==0.0.7.0
# 安装gradio
pip install gradio==5.4.0 # gradio
cp -r frpc_linux_amd64 /usr/local/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
chmod +x /usr/local/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
```
### Anaconda(方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:
chenzk's avatar
chenzk committed
62
- https://developer.sourcefind.cn/tool/
chenzk's avatar
v1.0  
chenzk committed
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
```
DTK驱动:dtk24.04.2
python:python3.10
torch:2.3.0
torchvision:0.18.1
torchaudio:2.1.2
triton:2.1.0
flash-attn:2.0.4
deepspeed:0.14.2
apex:1.3.0
xformers:0.0.25
```

`Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应。`

2、其它非特殊库参照requirements.txt安装
```
chenzk's avatar
v1.0.1  
chenzk committed
80
cd GLM-4-Voice
chenzk's avatar
v1.0  
chenzk committed
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
pip install -r requirements.txt # requirements.txt
# 安装ffmpeg
apt update
apt-get install ffmpeg
# 安装Matcha-TTS
cd third_party/Matcha-TTS
pip install . # matcha-tts==0.0.7.0
# 安装gradio
pip install gradio==5.4.0 # gradio
cp -r frpc_linux_amd64 /usr/local/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
chmod +x /usr/local/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
```

## 数据集


## 训练


## 推理
预训练权重目录结构:
```
GLM-4-Voice/THUDM
    ├── glm-4-voice-tokenizer
    ├── glm-4-voice-9b
    └── glm-4-voice-decoder
```
```
# 1、首先启动server服务
nohup python model_server.py & # 启动模型后台运行
# 2、然后启动web服务
python web_demo.py # 在浏览器打开gradio提供的带"live"的链接
```
更多资料可参考源项目的[`README_origin`](./README_origin.md)

## result
在Input Mode处选择text格式(对audio格式感兴趣可自行试用项目中的q1.wav):

`输入: `
```
用轻柔的声音引导我放松
```
点击"Submit"进行计算:

`输出:`
<div align=center>
    <img src="./doc/result.png"/>
</div>

### 精度
DCU与GPU精度一致,推理框架:pytorch。

## 应用场景
### 算法类别
`对话问答`
### 热点应用行业
`制造,广媒,金融,能源,医疗,家居,教育`
## 预训练权重
Hugging Face下载地址为:[THUDM/glm-4-voice-tokenizer](https://huggingface.co/THUDM/glm-4-voice-tokenizer)[THUDM/glm-4-voice-9b](https://huggingface.co/THUDM/glm-4-voice-9b)[THUDM/glm-4-voice-decoder](https://huggingface.co/THUDM/glm-4-voice-decoder)
## 源码仓库及问题反馈
- http://developer.sourcefind.cn/codes/modelzoo/glm-4-voice_pytorch.git
## 参考资料
- https://github.com/THUDM/GLM-4-Voice.git