so-vits 4.1 Windows 简单部署教程

系统环境安装

所需硬件列表:

  • nVidia 显卡一张 本篇使用 Tesla P4
  • Windows 系统
  • 脑子

首先前往 Python Release Page 下载 Python。官方建议版本为 Python 3.8.9,但本篇教程使用的是 Python 3.10.11 无伤大雅。
其次安装显卡驱动,如果你和我一样使用的是计算卡的话,前往 nVidia datacenter driver 下载驱动程序。一般来说如果你不需要打游戏直接安装这页面里的即可,如果需要图形计算可以到文末下载 GRID 驱动(只在本人的 P4 上测试过)。
安装驱动时不需要安装 RTX Desktop Manager
安装完驱动后前往 CUDA Archive 安装 CUDA。版本根据你的驱动版本标注的选择即可。
全部安装完后,打开 cmd。输入 nvidia-sminvcc -V 检查安装状态。

获取源码

找到一个有足够空间的盘。

1
2
3
git clone https://github.com/svc-develop-team/so-vits-svc
cd so-vits-svc
pip install -r requirements.txt

准备模型

声音编码器

根据你选择声音编码器下载文件,详情可见项目自述文件。
如果你是小白,请选择 vec768l12 编码器(跟着我下面的步骤走即可)。
下载 checkpoint_best_legacy_500.pt 放在 pretrain 目录下。

底模

可在 Sucial 的 HuggingFace 仓库获取底模。
预训练底模文件: G_0.pth D_0.pth 放在 logs/44k 目录下。
扩散模型预训练底模文件: model_0.pt 放在 logs/44k/diffusion 目录下。

RMVPE f0 预测器(建议使用)

下载 rmvpe.zip 解压,并将其中的 model.pt 文件改名为 rmvpe.pt 并放在 pretrain 目录下。

数据集准备

仅需要以以下文件结构将数据集放入 dataset_raw 目录即可

1
2
3
4
5
6
7
8
9
dataset_raw
├───speaker0
│ ├───1.wav
│ ├───...
│ └───z.wav
└───speaker1
├───xx2-0xxx2.wav
├───...
└───xxx7-xxx007.wav

文件名取名没有要求,但必须是波形音频文件。

数据预处理

音频切片

将音源切分成 5s-15s 一个的音频文件作为数据集按照上文格式放好。
如果你使用 Whisper-ppg 声音编码器进行训练,所有的切片长度必须小于 30s

重采样

1
python resample.py

划分训练集与验证集

1
python preprocess_flist_config.py --speech_encoder vec768l12

修改配置文件

配置文件位于 configs 目录下。
以下文字摘录自官方自述文件。

config.json:
keep_ckpts:训练时保留最后几个模型,0为保留所有,默认只保留最后3个
all_in_mem:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 远大于 数据集体积时可以启用
batch_size:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可
vocoder_name:选择一种声码器,默认为nsf-hifigan.

diffusion.yaml:
cache_all_data:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 远大于 数据集体积时可以启用
duration:训练时音频切片时长,可根据显存大小调整,注意,该值必须小于训练集内音频的最短时间!
batch_size:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可
timesteps: 扩散模型总步数,默认为 1000.
k_step_max: 训练时可仅训练k_step_max步扩散以节约训练时间,注意,该值必须小于timesteps,0 为训练整个扩散模型,注意,如果不训练整个扩散模型将无法使用仅扩散模型推理!

个人建议all_in_memcache_all_data 开启,除非你的内存实在过于小。batch_size 按需修改,我的 8g 显存可用 6

生成 hubert 与 f0

1
python preprocess_hubert_f0.py --f0_predictor rmvpe --num_processes 2

训练

训练主模型

1
python train.py -c configs/config.json -m 44k

开启 tensorboard

1
tensorboard --logdir logs/44k

关于loss

这绝不是衡量模型的唯一标准。tensorboard 网页中的 audio 选项卡里有评估样本,gen 是推理得到的音频,gt 是源音频。

loss/g/total 上升,loss/d/total 收敛:考虑数据集质量问题
loss/g/total 先下降后上升:考虑是否过拟合
loss/g/lf0 应收敛在 1e-4 以下,loss/g/kl 应收敛在 0.5 以下,loss/g/mel 应震荡下降

Vite 不怎么优雅但能用的多页面方式

在根目录下创建多页面入口 xxx.html:

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>title</title>
</head>
<body style="margin: 0;">
<div id="root"></div>
<script type="module" src="/src/pages/xxx/main.jsx"></script>
</body>
</html>

vite.config.js 中配置解析(需要安装 vite-plugin-html)。

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
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { createHtmlPlugin } from 'vite-plugin-html'
import { resolve } from 'path'

// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react(),
createHtmlPlugin({
minify: true,
pages: [{
entry: 'src/pages//login/main.jsx',
template: 'login.html',
filename: 'login.html'
}, {
entry: 'src/pages//panel/main.jsx',
template: 'panel.html',
filename: 'panel.html'
}, {
entry: 'src/pages//index/main.jsx',
template: 'index.html',
filename: 'index.html'
},
]
})
],
root: '.',
build: {
rollupOptions: {
input: {
index: 'index.html',
login: 'login.html',
panel: 'panel.html',
},
output: {
chunkFileNames: 'static/js/[name]-[hash].js',
entryFileNames: 'static/js/[name]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
}
},
}
})

Blend Hosting VPS 测&amp;评:搞钱必备

商家简介

Blend Hosting 是一家成立于 2005 年的马来西亚托管服务商。
在国内互联网上还算是一家比较没有名气的云服务商吧!
官方网站:https://www.blendhosting.com/
Blender Hosting 官方网站

定价计划

KVM 虚拟,SSD 硬盘。100Mbps 带宽但无限流量。

CPU 内存 硬盘 价格 购买
1 核心 1GB 20GB 5.59$/Mo 地址
2 核心 2GB 40GB 12.59$/Mo 地址
3 核心 3GB 60GB 19.59$/Mo 地址
4 核心 4GB 80GB 26.59$/Mo 地址
5 核心 5GB 100GB 33.59$/Mo 地址
6 核心 6GB 120GB 40.59$/Mo 地址
7 核心 7GB 140GB 47.59$/Mo 地址
8 核心 8GB 160GB 54.59$/Mo 地址
还有更多更高配置,就不一一列举了。所有配置可在这个页面找到。

博主向 Blend Hosting 申请了一台 VPS 用于测试。
基础信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CPU 型号          : QEMU Virtual CPU version 2.5+
CPU 核心数 : 1
CPU 频率 : 2599.998 MHz
CPU 缓存 : L1: 64.00 KB / L2: 4.00 MB / L3: 16.00 MB
硬盘空间 : 2.15 GiB / 18.64 GiB
启动盘路径 : /dev/sda1
内存 : 148.01 MiB / 981.24 MiB
Swap : 268 KiB / 1023.00 MiB
系统在线时间 : 1 days, 1 hour 24 min
负载 : 0.59, 0.38, 0.16
系统 : Ubuntu 20.04 LTS (x86_64)
AES-NI指令集 : ❌ Disabled
VM-x/AMD-V支持 : ❌ Disabled
架构 : x86_64 (64 Bit)
内核 : 5.4.0-29-generic
TCP加速方式 : cubic
虚拟化架构 : KVM
NAT类型 : 开放型
IPV4 ASN : AS55720 Gigabit Hosting Sdn Bhd
IPV4 位置 : Kuala Lumpur / Kuala Lumpur / MY

CPU 跑分:
@> GB5 跑分
单核测试分数:345
多核测试分数:326

FIO 测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/sda1):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | 990.00 KB/s (247) | 13.47 MB/s (210)
Write | 1.02 MB/s (255) | 14.12 MB/s (220)
Total | 2.01 MB/s (502) | 27.60 MB/s (430)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | 34.86 MB/s (68) | 44.18 MB/s (43)
Write | 37.05 MB/s (72) | 47.52 MB/s (46)
Total | 71.91 MB/s (140) | 91.71 MB/s (89)

内存检测:

1
2
3
4
5
6
单线程读测试: 12610.66 MB/s
单线程写测试: 9575.81 MB/s
内存 io 速度: 14 GB/s
未使用 SWAP 超售,内存io速度正常
未使用气球驱动 Balloon 超售,不存在 virtio_balloon 模块
未使用 KSM 超售,Kernel Samepage Merging 状态正常,

流媒体检测:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dazn:					Yes (Region: MY)
HotStar: Yes (Region: MY)
Disney+: Available For [Disney+ MY] Soon
Netflix: Yes (Region: MY)
YouTube Premium: Yes
Amazon Prime Video: Yes (Region: MY)
TVBAnywhere+: Yes
iQyi Oversea Region: MY
Viu.com: Yes (Region: MY)
YouTube CDN: Kuala Lumpur
Netflix Preferred CDN: Singapore
Spotify Registration: Yes
Steam Currency: MYR
ChatGPT: Yes
Bing Region: MY

三网回程路由:

1
2
3
4
5
6
7
8
9
10
11
12
北京电信 219.141.136.12  电信163 [普通线路]
北京联通 202.106.50.1 联通4837[普通线路]
北京移动 221.179.155.161 移动CMI [普通线路]
上海电信 202.96.209.133 电信163 [普通线路]
上海联通 210.22.97.1 联通4837[普通线路]
上海移动 211.136.112.200 移动CMI [普通线路]
广州电信 58.60.188.222 电信163 [普通线路]
广州联通 210.21.196.6 联通4837[普通线路]
广州移动 120.196.165.24 移动CMI [普通线路]
成都电信 61.139.2.69 电信163 [普通线路]
成都联通 119.6.6.6 联通4837[普通线路]
成都移动 211.137.96.205 移动CMI [普通线路]

博主收到的这台 VPS 是有一定限制的测试机(CPU 和硬盘都有限制),所以没有跑出非常好的成绩。
简单的点评一下吧!
机器到国内和亚洲各地的延迟都是比较客观的,适合做购物站等站点。如果需要在马来西亚本土开展业务选择Blend Hosting也是一个不错的选择。
我手上这台机器的 CPU 是比较老的,所以跑出来的分不是很好看。但是搭建一个站点还是可以胜任的,博主也用开源系统acgfaka测试了一下,一核心的机器承载上百个并发请求还是没有问题的。
机器的内存性能非常优秀,和市面上绝大多数 VPS 都拉开很大差距了。由于官网没有表明信息,博主猜测一下可能是 DDR4 甚至更高?用来搭建 Redis 或者 Elastic Search 后端服务器是很好的选择。
流媒体是这台机器的一大亮点了。Multination 全部解锁的机器博主也是第一次见!
总而言之,这个价格对于个人用户来说还是比较高的,但是对于有发展东南亚业务需求老板来说,是一个不错的选择。

【网页优化】中英文间自动添加空格

@> 有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。
——vinta

Demo

这是一段中文与English混排的文字,我在编辑时并没有手动Pangu。

使用

text-autospace.js上传到你的服务器,并在body尾部引入。

1
<script type="text/javascript" src="text-autospace.min.js"></script>

在head中插入以下css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
html hanla:after {
content: " ";
display: inline;
font-family: Arial;
font-size: 0.89em;
}

html code hanla,
html pre hanla,
html kbd hanla,
html samp hanla {
display: none;
}

html ol > hanla,
html ul > hanla {
display: none;
}

复制学校三菱电梯卡的过程

本校科学楼有电梯,但是使用了梯控系统只允许有电梯卡的老师坐电梯TT。今天同学搞来了张学校的电梯卡,于是尝试复制到空白卡上,这样就可以实现电梯自由力!

先查看下卡的信息,是IC卡,SAK为08。也就是说可以进行读取和复制。
卡的信息
使用MCT工具尝试读取,发现所有数据都能读出来,但是扇区一存在一个密钥没有被解密,变成未知数据(但是数据都被读取了,只有密钥空白)扇区1
不知道会不会有影响,尝试解密。但是手头没有PM3设备不能破解,只能尝试爆破。在网上找来了几份NFC密钥词典进行爆破,花了大概两个小时成功爆破到密钥4D454C2D4300

然后突然发现获得密钥对数据没有任何影响……

等我周一到学校尝试复制出来的卡再说吧!

博客复活

博客服务器被服务商删除了数据,所以之前的文章都丢失了😥😥😥

不过好在我已经找到了可靠的服务商,可以继续运行博客了。

详细事件经过将在本周末另开一篇文章。

我会在周末恢复友链,如有遗漏请联系我

附上博客复活后的截图:复活啦!

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×