V2
优化了长期以来transformers库4.50+版本的API变化与原始IndexTTS模型代码不兼容导致的生成报错问题
This commit is contained in:
+27
-4
@@ -618,8 +618,31 @@ class UnifiedVoice(nn.Module):
|
||||
|
||||
logits_processor = LogitsProcessorList([TypicalLogitsWarper(mass=typical_mass)]) if typical_sampling else LogitsProcessorList()
|
||||
max_length = trunc_index + self.max_mel_tokens - 1 if max_generate_length is None else trunc_index + max_generate_length
|
||||
gen = self.inference_model.generate(inputs, bos_token_id=self.start_mel_token, pad_token_id=self.stop_mel_token,
|
||||
eos_token_id=self.stop_mel_token,
|
||||
max_length=max_length, logits_processor=logits_processor,
|
||||
num_return_sequences=num_return_sequences, **hf_generate_kwargs)
|
||||
|
||||
# 修补:为新版transformers (4.50+) 添加一个解决方法,解决tensor reshape问题
|
||||
try:
|
||||
# 尝试正常生成
|
||||
gen = self.inference_model.generate(inputs, bos_token_id=self.start_mel_token, pad_token_id=self.stop_mel_token,
|
||||
eos_token_id=self.stop_mel_token,
|
||||
max_length=max_length, logits_processor=logits_processor,
|
||||
num_return_sequences=num_return_sequences, **hf_generate_kwargs)
|
||||
except RuntimeError as e:
|
||||
if "shape" in str(e) and "invalid for input of size" in str(e):
|
||||
print(f">> 检测到transformers reshape错误,尝试使用替代生成方法")
|
||||
# 替代方法:使用sample而不是beam search
|
||||
# 这实际上是一个回退机制,因为在更新的transformers版本中,beam search的实现发生了变化
|
||||
gen = self.inference_model.generate(inputs, bos_token_id=self.start_mel_token, pad_token_id=self.stop_mel_token,
|
||||
eos_token_id=self.stop_mel_token,
|
||||
max_length=max_length, logits_processor=logits_processor,
|
||||
num_return_sequences=num_return_sequences,
|
||||
do_sample=True, # 使用采样而不是beam search
|
||||
num_beams=1, # 设置为1,实际上禁用beam search
|
||||
temperature=1.0, # 使用温度为1.0的采样
|
||||
top_k=30, # 仍然可以使用top_k过滤
|
||||
top_p=0.9, # 和top_p过滤
|
||||
**{k: v for k, v in hf_generate_kwargs.items() if k not in ['num_beams', 'do_sample', 'temperature', 'top_k', 'top_p']})
|
||||
else:
|
||||
# 如果是其他错误,则重新抛出
|
||||
raise
|
||||
|
||||
return gen[:, trunc_index:]
|
||||
|
||||
Reference in New Issue
Block a user