type
status
date
slug
summary
tags
category
icon
password
CosyVoice-ComfyUI 中的张量类型错误问题解决指南
RuntimeError: expected scalar type Float but found Half
RuntimeError: torch.cat(): expected a non-empty list of Tensors
问题描述
在使用 CosyVoice-ComfyUI 进行语音合成时,可能会遇到以下错误:
expected scalar type Float but found Half
(期望浮点类型但收到半精度类型)
torch.cat(): expected a non-empty list of Tensors
(张量列表为空)
``
原因分析
这个问题的核心在于数据类型不匹配:
- 模型期望使用半精度(FP16)格式
- 但输入数据是以单精度(FP32)格式传入
- 这种不匹配导致模型处理失败
解决方案(推荐)
按照 @qy8502 提供的修复方案,需要修改模型文件:
- 进入模型目录:
- 解压模型文件:
- 修改编码器文件,添加类型转换:
- 打开文件:
llm.text_encoder.fp16/code/__torch__/cosyvoice/transformer/encoder/___torch_mangle_5.py
- 在第24行左右,找到
input = torch.layer_norm(_0, [1024], CONSTANTS.c2, CONSTANTS.c3)
这行
- 在其后添加:
input = input.half()
- 这行代码的作用是将输入数据转换为半精度格式
- 重新打包模型:
Doiiars批注:注意,flow层同理。共有两个文件需要修改
其他可能的解决方法(不推荐)
根据 @nancygd 的经验,有时这个问题也可能与环境有关。如果修改模型文件不起作用,可以尝试:
- 创建新的虚拟环境
- 重新安装依赖
- 重新部署模型
确认修复
修复成功后,模型应该能够正常处理中文文本并生成语音输出。
注意:这个解决方案已经得到多个用户的验证,包括 @flamingol1 确认修复成功。
技术说明
- FP32(单精度):32位浮点数,精度更高
- FP16(半精度):16位浮点数,占用内存更少,但精度较低
- 这个修复本质上是确保了数据类型的一致性,让输入数据与模型期望的格式相匹配
现在您应该能够顺利运行 CosyVoice-ComfyUI 了。
参考资料
torch.cat(): expected a non-empty list of Tensors
Updated Oct 6, 2024
技术支持社群
如果还有问题,欢迎继续提问!由Doiiars维护的个人QQ综合交流群反馈交流群:491708665 (一键加群)。
- 作者:Doiiars
- 链接:http://doiiars.com/article/fix-cosyvoice-tensor-type-error
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章