最近在尝试将F5-TTS训练的.pt音色模型转换为适配RK3588芯片的RKNN模型时,遇到了不少坑。虽然最终因为RKNN工具链不支持F5-TTS的部分算子而失败,但整个环境搭建和转换过程中的经验教训还是值得记录下来的。这篇文章主要分享我在Linux环境下配置RKNN转换工具链的完整过程,以及尝试模型转换时遇到的问题和解决方案。
RK3588是瑞芯微推出的一款高性能AIoT芯片,广泛应用于边缘计算设备。而RKNN是瑞芯微提供的神经网络推理框架,能够将常见的深度学习模型转换为在RK芯片上高效运行的格式。F5-TTS则是一个开源的文本转语音模型,训练后通常保存为PyTorch的.pt格式。
在开始之前,我们需要一个干净的Python环境管理工具。Miniconda是我的首选,因为它比完整的Anaconda更轻量,同时提供了足够的环境隔离能力。
首先从官网下载Miniconda安装包。根据你的系统架构选择:
下载完成后,将安装包上传到Ubuntu虚拟机,执行以下命令安装:
bash复制chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
安装过程中按照提示操作即可。安装完成后,重新打开终端,如果看到用户名前有(base)前缀,说明conda已成功激活。
为了提高国内用户的下载速度,我们需要配置清华大学的conda镜像源。在用户主目录下创建.condarc文件:
bash复制touch ~/.condarc
vim ~/.condarc
文件内容配置如下:
yaml复制channels:
- defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
注意:配置镜像源后,建议执行
conda clean -i清除索引缓存,确保使用的是最新的镜像源。
为了避免与系统Python环境冲突,我们专门为RKNN转换工具创建一个隔离环境:
bash复制conda create -n rknn python=3.8
conda activate rknn
选择Python 3.8版本是因为RKNN Toolkit 1.4.0对该版本支持最好。激活环境后,首先安装基础依赖:
bash复制pip install numpy==1.19.5 scipy==1.5.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
接下来安装RKNN Toolkit所需的完整依赖。瑞芯微官方提供了一个requirements文件,内容如下:
code复制# if install failed, please change the pip source to 'https://mirror.baidu.com/pypi/simple'
# base deps
numpy==1.19.5
protobuf==3.12.2
flatbuffers==1.12
# utils
requests==2.27.1
psutil==5.9.0
ruamel.yaml==0.17.4
scipy==1.5.4
tqdm==4.64.0
bfloat16==1.1
opencv-python==4.5.5.64
# base
onnx==1.9.0
onnxoptimizer==0.2.7
onnxruntime==1.10.0
torch==1.10.1
torchvision==0.11.2
tensorflow==2.6.2
使用以下命令安装这些依赖:
bash复制pip install -r requirements_cp38-1.4.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
这是整个过程中最容易出问题的环节。首先需要下载RKNN Toolkit 2的wheel包(版本1.4.0)。安装时可能会遇到以下错误:
code复制ERROR: Invalid requirement: 'rknn-toolkit2==1.4.0-22dcfef4': Expected end or semicolon (after version specifier)
rknn-toolkit2==1.4.0-22dcfef4
~~~~~~~~~~^
这个问题是由于新版pip对版本号格式检查更严格导致的。解决方案是降级pip到23.x版本:
bash复制python -m pip install "pip<24"
然后就可以正常安装RKNN Toolkit了:
bash复制pip install rknn_toolkit2-1.4.0_22dcfef4-cp38-cp38-linux_x86_64.whl
提示:如果遇到其他依赖冲突,可以尝试先卸载冲突的包,再重新安装指定版本。
虽然命令行也能工作,但使用IDE可以大大提高开发效率。这里选择PyCharm Community版:
bash复制tar -vxf pycharm-community-2023.1.tar.gz
bash复制cd pycharm-community-2023.1/bin/
./pycharm.sh
安装完成后,需要配置使用我们之前创建的rknn虚拟环境:
为了提高开发效率,建议安装以下插件:
这些插件可以通过PyCharm的插件市场直接搜索安装。
按照RKNN官方文档,RK3588应该支持直接将.pt模型转换为.rknn格式。然而实际操作中遇到了以下问题:
为了绕过环境冲突问题,我尝试了间接转换方案:
新建一个Python 3.10的虚拟环境,安装新版numpy(1.26.4)和F5-TTS所需依赖:
bash复制conda create -n f5tts python=3.10
conda activate f5tts
pip install x-transformers==1.31.14 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install soundfile librosa matplotlib "pydantic<=2.10.6" pypinyin -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install rjieba safetensors tomli torchcodec torchdiffeq transformers -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers_stream_generator unidecode vocos wandb -i https://pypi.tuna.tsinghua.edu.cn/simple
在这个环境中将.pt模型先转换为ONNX格式
切换回rknn环境,尝试将ONNX模型转换为RKNN格式
遗憾的是,即使采用这种间接方式,最终还是因为算子不支持而失败。F5-TTS模型中使用的一些特殊操作在RKNN中尚未实现。
虽然本次转换尝试未能成功,但积累了宝贵的经验:
环境隔离至关重要:使用conda创建独立的虚拟环境可以避免大部分依赖冲突问题。不同工具链对Python和库版本的要求可能差异很大。
版本兼容性检查:在开始转换前,应该仔细阅读官方文档的版本要求。RKNN Toolkit对Python、numpy等有非常具体的版本限制。
模型架构考量:不是所有PyTorch模型都能顺利转换为RKNN格式。如果模型包含特殊算子或动态结构,可能需要修改模型架构或等待RKNN更新支持。
对于确实需要在RK3588上运行TTS模型的开发者,可以考虑以下替代方案:
在实际操作中,可能会遇到以下问题及解决方案:
conda环境无法激活:
conda activate无反应conda init bash,然后重新打开终端pip安装超时或失败:
-i https://pypi.tuna.tsinghua.edu.cn/simpleRKNN Toolkit导入错误:
ImportError: libxxx.so.x: cannot open shared object filesudo apt-get install libgl1-mesa-glx模型转换内存不足:
PyCharm无法识别conda环境:
虽然这次F5-TTS模型转换没有成功,但完整的环境配置过程和问题排查经验对于其他模型的RKNN转换仍有很大参考价值。在边缘计算场景下,模型转换确实会遇到各种兼容性问题,需要开发者有足够的耐心和技巧来应对。