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 进行语音合成时,可能会遇到以下错误:
  1. expected scalar type Float but found Half(期望浮点类型但收到半精度类型)
  1. torch.cat(): expected a non-empty list of Tensors(张量列表为空)
notion image
``

原因分析

这个问题的核心在于数据类型不匹配:
  • 模型期望使用半精度(FP16)格式
  • 但输入数据是以单精度(FP32)格式传入
  • 这种不匹配导致模型处理失败

解决方案(推荐)

按照 @qy8502 提供的修复方案,需要修改模型文件:
  1. 进入模型目录:
  1. 解压模型文件:
  1. 修改编码器文件,添加类型转换:
  • 打开文件: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()
  • 这行代码的作用是将输入数据转换为半精度格式
  1. 重新打包模型:
Doiiars批注:注意,flow层同理。共有两个文件需要修改
notion image

其他可能的解决方法(不推荐)

根据 @nancygd 的经验,有时这个问题也可能与环境有关。如果修改模型文件不起作用,可以尝试:
  1. 创建新的虚拟环境
  1. 重新安装依赖
  1. 重新部署模型

确认修复

修复成功后,模型应该能够正常处理中文文本并生成语音输出。
注意:这个解决方案已经得到多个用户的验证,包括 @flamingol1 确认修复成功。

技术说明

  • FP32(单精度):32位浮点数,精度更高
  • FP16(半精度):16位浮点数,占用内存更少,但精度较低
  • 这个修复本质上是确保了数据类型的一致性,让输入数据与模型期望的格式相匹配
现在您应该能够顺利运行 CosyVoice-ComfyUI 了。

参考资料

torch.cat(): expected a non-empty list of Tensors
Updated Oct 6, 2024

技术支持社群

如果还有问题,欢迎继续提问!由Doiiars维护的个人QQ综合交流群反馈交流群:491708665 (一键加群)
 
Follow认证GraphRAG 和 LazyGraphRAG 的区别
Loading...