Google Colab应用
Colab
https://colab.research.google.com/
Colab给每一个笔记一个运行的虚拟Linux环境;每一个代码段或文本段都是一个独立的Cell。
基本使用
目录 当前的根目录为Content目录,可以通过左侧的文件列表来查看
查看当前服务器ip,运行时类型为T4 GPU时,ip地址为新加坡。Google AI Studio会判断如果Colab实例的区域不是支持的区域,也不能使用。
1 | !curl ipinfo.io |
Colab下载文件到Google Drive
Colab中左侧导航栏中正常挂载了Goolge Drive后
在Goolge Drive上先建立好目录MyDrive/AI/models/FunAudioLLM/
,在Colab中新建一个代码段,执行以下,可以下载文件到当前切换的目录中
1 | %%bash |
使用以下命令可以创建目录
1 | %%bash |
例如下载CosyVoice的代码
1 | %%bash |
输出为
1 | Submodule path 'third_party/Matcha-TTS': checked out 'dd9105b34bf2be2230f4aa1e4769fb586a3c824e' |
运行CosyVoice2
主要参考这份笔记
我自己的笔记地址
https://colab.research.google.com/drive/10yTX97D8sj6qoXcxcZ8ebAmx_QDOhC51?authuser=1
下载模型到Google Drive中
1
2
3%%bash
cd /content/drive/MyDrive/AI/models/FunAudioLLM/
git clone https://www.modelscope.cn/iic/CosyVoice2-0.5B.git下载完成后由错误提示信息,但是文件已经完全下载下来了,不影响使用,15G的空间用了9G多。
以下操作在同一个T4 GPU实例实例中执行,下载的项目代码和依赖库都是在同一个实例中存在,如果切换实例,之前下载的东西都没了
下载项目源码(自己克隆一份到自己的Github之后,下载自己的,方便以后修改)
1
2!git clone https://github.com/memorywalker/CosyVoice.git
!cd /content/CosyVoice && git submodule update --init --recursive简单起见直接在根目录下载项目
安装miniconda,创建虚拟环境
因为当前Colab的默认Python是3.11版本,而CosyVoice直接使用会用库依赖错误,这一步费了不少时间。所以使用conda来安装CosyVoice使用的Python依赖。手动配置Conda环境有点麻烦,这里使用工具性的项目来安装和配置MiniConda
1
2
3
4!pip install konda
import konda
konda.install()
!conda --version使用Conda必须先接受使用条款,不然在创建虚拟环境时会提示不能继续
1
2!conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
!conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r创建虚拟环境
1
!konda create -n cosyvoice -y python=3.10
Colab中的每一个Cell都是独立的运行环境,所以即使执行了
!konda activate cosyvoice
,在下一个Cell中还不是激活的虚拟环境。1
!source activate cosyvoice;which python
which python
放在激活虚拟环境的同一行,会显示使用虚拟环境的python,如果放在第二行就会是系统python,即使这两个语句都在同一个cell中。
安装依赖
切换到项目目录下,安装项目的依赖
1
2%cd CosyVoice/
!konda run "pip install -r requirements.txt"参考CosyVoice项目指南安装另一个依赖
1
!apt-get install sox libsox-dev 2>&1 > /dev/null
运行测试脚本
按照前面的测试只有在同一行的代码,才能使用同一个虚拟环境,所以只能把代码保存在一个文件中,通过
konda run
来在虚拟环境中执行python代码。代码中需要把依赖的第三方库加入到环境变量中,不然会提示
ModuleNotFoundError: No module named 'matcha'
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%%writefile my_voice.py
# 配置依赖
import sys
sys.path.append('/content/CosyVoice/third_party/Matcha-TTS')
from cosyvoice.utils.file_utils import load_wav
import torchaudio
from cosyvoice.cli.cosyvoice import CosyVoice2
# 加载模型
cosyvoice = CosyVoice2('/content/drive/MyDrive/AI/models/FunAudioLLM/CosyVoice2-0.5B', load_jit=False, load_trt=False, fp16=False)
# NOTE if you want to reproduce the results on https://funaudiollm.github.io/cosyvoice2, please add text_frontend=False during inference
# zero_shot usage
prompt_speech_16k = load_wav('./asset/zero_shot_prompt.wav', 16000)
for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k, stream=False)):
torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)
# fine grained control, for supported control, check cosyvoice/tokenizer/tokenizer.py#L248
for i, j in enumerate(cosyvoice.inference_cross_lingual('在他讲述那个荒诞故事的过程中,他突然[laughter]停下来,因为他自己也被逗笑了[laughter]。', prompt_speech_16k, stream=False)):
torchaudio.save('fine_grained_control_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)
# instruct usage
for i, j in enumerate(cosyvoice.inference_instruct2('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '用四川话说这句话', prompt_speech_16k, stream=False)):
torchaudio.save('instruct_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)这段代码会在当前目录中保存一个
my_voice.py
的文件,下面就可以在虚拟环境中执行1
2!konda activate cosyvoice
!konda run "python my_voice.py"执行完成后,会在当前目录下生成
zero_shot_0.wav
等音频文件,使用以下代码可以播放音频1
2from IPython.display import Audio
Audio('/content/CosyVoice/zero_shot_0.wav')实际运行速度还能接受,长文本会被分割成18s左右的音频片段
###