01.選擇實例
可以隨便選一個,然后擴容一下磁盤婶肩,我選擇擴容150g办陷,現(xiàn)在的價格是0.0066 元 gb/天,這樣就是每天固定扣一塊錢律歼。
因為我已經(jīng)提前準備好了數(shù)據(jù)集民镜,包括切片,resample還有生成訓(xùn)練集配置文件险毁,和生成hubert的步驟都在自己的電腦上完成了制圈,然后zip分卷壓縮。處理完的數(shù)據(jù)集有50gb左右畔况。里面有5個角色鲸鹦,每個角色有3個版本。是我拆包了兩個游戲得到的跷跪,這兩個游戲是前后作的關(guān)系馋嗜,算是增加數(shù)據(jù)集的量。
如果只訓(xùn)練一個角色域庇,都沒什么必要租gpu嵌戈,除非數(shù)據(jù)量特別大,不然租感覺很浪費听皿。自己的老顯卡也能訓(xùn)練了熟呛。
這波數(shù)據(jù)集,處理了我一天多時間尉姨,從游戲里面拆包庵朝,寫腳本分類,然后最花時間的是生成hubert的步驟,在我6800h的電腦了執(zhí)行了有10個小時左右九府。然后zip分卷壓縮椎瘟。
一開始是需要搭建環(huán)境的,所以一開始直接關(guān)機侄旬,然后選擇無卡開機肺蔚,無卡開機就是不使用GPU資源開機,只有GPU的情況也可以用來演示儡羔,或者配一下環(huán)境宣羊。不占用GPU資源,現(xiàn)在是1小時0.1元汰蜘。
我一開始搜了一下發(fā)現(xiàn)有別的大佬分享的鏡像仇冯,不過最近一個還是一個月前的,而且它訓(xùn)練的采樣率是48khz族操,我準備好的數(shù)據(jù)是44khz的苛坚,所以就沒用那個。
02.安裝環(huán)境
我一開始用的是這個項目 https://github.com/34j/so-vits-svc-fork 色难,因為svc-develop-team原倉庫的說明文檔上的內(nèi)容泼舱,還有交互方面,還有就是項目依賴安裝莱预,對于第一次玩這種深度學(xué)習(xí)的人來說還是有點復(fù)雜的柠掂。
這個項目把操作都封裝到命令行里了,而且依賴安裝也比較容易依沮,因為他可以通過pip命令一鍵安裝了涯贞,而且還提供了whl文件。
原倉庫的說明對于新手來說是不足的危喉,比如數(shù)據(jù)預(yù)處理宋渔,這位34j大佬的倉庫里面就說明了使用uvr分離人聲,而且切片操作也封裝了命令辜限。
還有就是這個項目做了一個比較好用的gui皇拣,加了實時變聲的功能。
原倉庫雖然有webUI薄嫡,但是說明文檔沒寫氧急,新手不知道,也就不會去用毫深,我也是看了別人的視頻在用吩坝,才發(fā)現(xiàn)是有webUI的
python 版本管理
安裝環(huán)境的第一步就是安裝python,服務(wù)器上提供的是python3.8版本哑蔫,我自己電腦上的是3.9.13钉寝,為了保持一致弧呐,所以要安裝不同版本的python
我首先就想到了用pyenv這個項目,
這里遇到的最大的問題是嵌纲,autodl的服務(wù)器在國內(nèi)俘枫,所以很難訪問github,clone一個倉庫都操作不了逮走。所以這邊安裝折騰了我一段時間鸠蚪。
最后我還是放棄了。
第二個方法就是虛擬環(huán)境师溅,因為我本地用的是pdm管理虛擬環(huán)境邓嘹,結(jié)果發(fā)現(xiàn)pdm安裝也不好安裝。
第三個方案险胰,就是我從本地直接拷貝過去。矿筝。起便。
最后發(fā)現(xiàn)最佳實踐是用conda管理python環(huán)境。
其實我以前就知道這個工具窖维,但是覺得很蠢榆综,安裝包大的一匹,所以裝了一次以后就沒有再裝了铸史。后面管理python版本也是用的pdm鼻疮,我覺得pdm這種和npm比較相似的模式是更合理的。而且pdm有l(wèi)ock文件琳轿,是可以鎖定軟件包版本的判沟。
svc 的倉庫里面只有一個requirements.txt,這樣容易出現(xiàn)安裝不了一樣環(huán)境的問題
最佳實踐
vscode-remote
因為jupyter lab其實也不是很好用,還有那個從網(wǎng)頁打開的終端崭篡,也挺難用的挪哄。
目前我認為vscode遠程連接是最方便的,需要先安裝Remote-SSH插件
conda管理python版本
直接用conda安裝python版本
# 構(gòu)建一個虛擬環(huán)境名為:my-env琉闪,Python版本為3.9.13
conda create -n my-env python=3.9.13
# 更新bashrc中的環(huán)境變量
conda init bash && source /root/.bashrc
# 切換到創(chuàng)建的虛擬環(huán)境:my-env
conda activate my-env
# 驗證
python
退出虛擬環(huán)境
conda deactivate your_env
刪除虛擬環(huán)境
conda remove -n your_env --all
或
conda remove --name your_env --all
安裝訓(xùn)練依賴
然后我們就可以在虛擬環(huán)境下安裝
python -m pip install -U pip setuptools wheel
pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu117
pip install -U so-vits-svc-fork
也可以到release頁面下載whl
pip install -r whlname.whl
有一個問題是自帶的華為云鏡像比較舊很多包沒有迹炼,這一步我也折騰了挺久
我建議pip和conda換成清華的鏡像
我后來才發(fā)現(xiàn)autodl有換鏡像的操作,在autopanel上就能換颠毙,比較方便斯入。
從github clone倉庫
如果用官方的倉庫,需要從github下載蛀蜜,但是國內(nèi)服務(wù)器不好訪問刻两。
最好還是本地下載,打包zip傳上去涵防,這樣比較方便闹伪,直接拖到vscode對應(yīng)的目錄就可以沪铭。
還有就是autodl官方提供了鏡像加速,但是我沒從幫助文檔上找到畢業(yè)區(qū)A的加速地址偏瓤。杀怠。。厅克。
然后直接安裝官方依賴赔退。
pip install -r requirements
03.配置文件修改
主要是調(diào)一下batch_size和learning_rate
{
"train": {
"log_interval": 200, //檢查點保存步數(shù)
"eval_interval": 800,//評估步數(shù),隔多少步評估模型性能
"seed": 1234,//模型初始化種子证舟,如果訓(xùn)練效果不理想硕旗,可以換一個種子重新訓(xùn)練。不過訓(xùn)練過程中不能再修改
"epochs": 10000,// 學(xué)習(xí)數(shù)據(jù)集的次數(shù)女责,10000是一個很高的數(shù)字漆枚,一般不用訓(xùn)練到10000次
"learning_rate": 0.0004,//學(xué)習(xí)率,據(jù)說應(yīng)該和bacth_size成比例調(diào)整
"betas": [0.8, 0.99],
"eps": 1e-9,
"batch_size": 24,// 每次訓(xùn)練的數(shù)據(jù)的量抵知,按照顯存配置墙基,8gb顯存比如1070ti,可以設(shè)為6刷喜,24gb顯存比如3090設(shè)為24残制,這樣才能占滿顯存
"fp16_run": false,//是否使用半精度訓(xùn)練,能提升訓(xùn)練速度掖疮,可能會影響訓(xùn)練質(zhì)量
"lr_decay": 0.999875,//學(xué)習(xí)率衰減率
"segment_size": 10240,
"init_lr_ratio": 1,
"warmup_epochs": 0,//預(yù)熱輪數(shù)初茶,預(yù)熱的輪數(shù)內(nèi)學(xué)習(xí)率不會衰減
"c_mel": 45,
"c_kl": 1.0,
"use_sr": true,
"max_speclen": 512,
"port": "8001",
"keep_ckpts": 10 //保存的模型個數(shù),超過的會在訓(xùn)練出新的模型后移除浊闪。因為可能訓(xùn)練途中有參數(shù)比較好的模型恼布,如果不缺存儲空間可以設(shè)為0,那樣就不會刪除搁宾。桥氏。。
},
"data": {
"training_files": "filelists/44k/train.txt",
"validation_files": "filelists/44k/val.txt",
"max_wav_value": 32768.0,
"sampling_rate": 44100,
"filter_length": 2048,
"hop_length": 512,
"win_length": 2048,
"n_mel_channels": 80,
"mel_fmin": 0.0,
"mel_fmax": 22050
},
"model": {
"inter_channels": 192,
"hidden_channels": 192,
"filter_channels": 768,
"n_heads": 2,
"n_layers": 6,
"kernel_size": 3,
"p_dropout": 0.1,
"resblock": "1",
"resblock_kernel_sizes": [3, 7, 11],
"resblock_dilation_sizes": [
[1, 3, 5],
[1, 3, 5],
[1, 3, 5]
],
"upsample_rates": [8, 8, 2, 2, 2],
"upsample_initial_channel": 512,
"upsample_kernel_sizes": [16, 16, 4, 4, 4],
"n_layers_q": 3,
"use_spectral_norm": false,
"gin_channels": 256,
"ssl_dim": 256,
"n_speakers": 200
},
"spk": {
...
}
}
04.參數(shù)
epoch
表示全部數(shù)據(jù)集訓(xùn)練的次數(shù)
iteration
一個epoch中 數(shù)據(jù)喂給神經(jīng)網(wǎng)絡(luò)的次數(shù)
batch_size
一次扔進神經(jīng)的數(shù)據(jù)個數(shù)
iteration*batch_size等于總的數(shù)據(jù)個數(shù)猛铅。字支。。
batch_size增大奸忽,消耗的顯存也會變大堕伪,
在音頻都在切片10s以內(nèi)的情況下,1070ti(8gb顯存)設(shè)置為6合適栗菜,3090(24gb顯存)設(shè)置為24合適
bacth_size調(diào)到不影響顯存的最大值
步數(shù)的計算方式
步數(shù) = 總輪數(shù)(epoch)*數(shù)據(jù)集大小/批大星反啤(batch size)
05.linux常用操作
解壓數(shù)據(jù)集
數(shù)據(jù)集通過網(wǎng)盤上傳,下載到實例的數(shù)據(jù)盤里
unzip file.zip
分卷壓縮的情況疙筹,網(wǎng)上說的zip -F 我沒執(zhí)行成功過
可以直接
cat filename.z* > newfile.zip
unzip newfile.zip
powershell安裝
linux的命令不是很會富俄,安裝powershell(至少自帶的命令補全比bash方便)禁炒,這樣就比較習(xí)慣了。
# Update the list of packages
sudo apt-get update
# Install pre-requisite packages.
sudo apt-get install -y wget apt-transport-https software-properties-common
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Delete the the Microsoft repository GPG keys file
rm packages-microsoft-prod.deb
# Update the list of packages after we added packages.microsoft.com
sudo apt-get update
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh
查看磁盤占用
-
du -sh <目錄路徑>
:顯示指定目錄的總大谢舯取(以易讀格式幕袱,如 KB、MB悠瞬、GB 顯示)们豌。 -
du -h --max-depth=1 <目錄路徑>
:顯示指定目錄下一級目錄或文件的大小(以易讀格式顯示)浅妆。 -
du -a <目錄路徑> | sort -n -r | head -n 10
:顯示指定目錄下最大的10個文件的大型(以易讀格式顯示)。
例如凌外,要查看當前目錄下所有文件和子目錄占用空間的情況辩尊,可以使用以下命令:
du -h --max-depth=1
如果要查看指定目錄下最大的10個文件的大小,可以使用以下命令:
du -a <目錄路徑> | sort -n -r | head -n 10
python遞歸遍歷目錄的方法
import os
def recursive_scandir(path):
for entry in os.scandir(path):
if entry.is_file():
print(entry.path)
elif entry.is_dir():
recursive_scandir(entry.path)
06.測試模型效果
還是用官方的webui比較方便康辑,我懶得再開一個虛擬環(huán)境对省,
所以把模型下載下來,在本地查看效果了晾捏,用cpu推理會很慢,基本上4分鐘的歌要推理4分鐘的樣子哀托,用1070ti的話30秒之內(nèi)能搞定惦辛。。仓手。
據(jù)說訓(xùn)練到10000setp胖齐,就能有不錯的效果
我實際測試也感覺是有點效果了,可能是數(shù)據(jù)集太多了嗽冒,后面我訓(xùn)練到26000step(11 epoch)的時候測試了一下呀伙,感覺應(yīng)該跟很多網(wǎng)上發(fā)的視頻差不多水平了。用au把一些奇怪的音修一下應(yīng)該就能有不錯的成品了
07.遇到的問題
torch.load報錯
可能是我之前解壓完后添坊,沒有刪除壓縮包剿另,后面訓(xùn)練的數(shù)據(jù)占滿存儲空間,導(dǎo)致贬蛙,保存的時候文件損壞吧雨女。(因為我本地也在用1070ti跑,運行了一個epoch阳准,是正常的)
這里報的是讀取*.spec.pt
最后我寫了python腳本氛堕,遍歷所有*.spec.pt
,找到受損的文件刪掉就okl