
broken documentation example for DIA
快速结论:Hugging Face Transformers 官方文档中关于 DIA 模型的文本生成示例代码存在多处语法错误。优先排查模型加载和设备移动的顺序是否正确,并确认 device_map="auto" 是否被错误地放在 .to() 方法中(应放在 from_pretrained() 中)。
问题场景
用户在阅读 Hugging Face Transformers 官方文档中 DiaForConditionalGeneration 模型(DIA 文本到对话模型)的文本生成示例时,发现示例代码无法直接运行。
报错原文
# 问题代码片段(来自文档):
inputs = processor(text=text, padding=True, return_tensors="pt").to(model.device) # model 尚未定义
model = DiaForConditionalGeneration.from_pretrained(model_checkpoint).to(torch_device, device_map="auto") # torch_device 未定义,device_map 不能传给 .to()
运行时出现 NameError: name 'model' is not defined 或 NameError: name 'torch_device' is not defined。
原因分析
文档示例代码存在三个错误:
inputs = ...().to(model.device)中引用了尚未定义的model变量。torch_device变量从未定义过(Issue 中提及该变量已在之前的 PR #45608 中被移除)。device_map="auto"被错误地作为.to()的参数传递,实际上device_map是from_pretrained()的参数,不能用于.to()方法。
Issue 评论指出这些错误很可能是由 Claude(AI 模型)生成代码时引入的,未能正确整合之前的修复工作。
环境排查
- 确认 Transformers 版本是否为最新(至少包含 DIA 模型支持)。
- 确保已安装
torch,并建议使用 CUDA 可用设备(可选,CPU 也可运行)。 - 确认
Processor和DiaForConditionalGeneration类在当前版本中可用。
解决步骤
- 先定义模型,再处理输入:将
model定义移到inputs之前。 - 使用
device_map在from_pretrained()中:将device_map="auto"放在.from_pretrained()方法中,而不是.to()方法。 - 移除
torch_device变量:不需要手动定义torch_device;模型设备会自动处理。 - 将输入 tensor 移到模型所在设备:使用
model.device获取模型当前设备(如 CUDA 设备序号或 CPU)。
修正后的示例代码片段(参考 Issue 评论中的修复方向):
from transformers import AutoProcessor, DiaForConditionalGeneration
model_checkpoint = "nari-labs/Dia-1.6B-0626"
text = ["[S1] Dia is an open weights text to dialogue model."]
processor = AutoProcessor.from_pretrained(model_checkpoint)
model = DiaForConditionalGeneration.from_pretrained(model_checkpoint, device_map="auto")
inputs = processor(text=text, padding=True, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256)
outputs = processor.batch_decode(outputs)
processor.save_audio(outputs, "example.wav")
验证方法
直接运行上述修正后的代码片段,确认无 NameError 或参数错误。如果模型加载成功并且生成完成,文档示例错误已解决。
参考来源
huggingface/transformers #46909
修复 PR 见 #46923



