在GPU运行suno/bark-small模型时遭遇RuntimeError问题求助
问题解决:Bark模型设备不匹配RuntimeError
错误原因分析
你遇到的RuntimeError核心是两个问题:
- 模型设备设置冲突:同时调用
model.enable_cpu_offload()和model.to('cuda'),前者会自动将部分模型层卸载到CPU,后者强制全模型移到GPU,导致模型内部张量分散在CPU和GPU两个设备。 - 输入张量未同步:处理后的输入默认在CPU,与模型所在设备不一致,触发张量设备校验错误。
解决方案一:全模型使用GPU(优先推荐)
调整代码顺序,移除冲突的CPU卸载设置,确保输入和模型统一在GPU上运行:
from transformers import AutoProcessor, BarkModel import os from scipy.io.wavfile import write as write_wav # 正确设置可见GPU(Python环境内需通过os.environ配置) os.environ["CUDA_VISIBLE_DEVICES"] = "0" os.environ["SUNO_USE_SMALL_MODELS"] = "True" def bark(): processor = AutoProcessor.from_pretrained("suno/bark-small") model = BarkModel.from_pretrained("suno/bark-small") # 先做模型结构优化,再分配设备 model = model.to_bettertransformer() # 将模型移到GPU model = model.to('cuda') voice_preset = "v2/en_speaker_6" # 处理输入并同步到GPU inputs = processor('hello, i hope you are doing well', voice_preset=voice_preset) inputs = {k: v.to('cuda') for k, v in inputs.items()} audio_array = model.generate(**inputs) audio_array = audio_array.cpu().numpy().squeeze() sample_rate = model.generation_config.sample_rate write_wav("/home/rocky/chatout/test.wav", rate=sample_rate, data=audio_array) bark()
解决方案二:启用CPU卸载(GPU显存不足时使用)
如果确实需要通过CPU卸载节省显存,不要手动调用to('cuda'),依赖enable_cpu_offload()自动处理设备分配:
from transformers import AutoProcessor, BarkModel import os from scipy.io.wavfile import write as write_wav os.environ["CUDA_VISIBLE_DEVICES"] = "0" os.environ["SUNO_OFFLOAD_CPU"] = "True" os.environ["SUNO_USE_SMALL_MODELS"] = "True" def bark(): processor = AutoProcessor.from_pretrained("suno/bark-small") model = BarkModel.from_pretrained("suno/bark-small") # 先做模型结构优化 model = model.to_bettertransformer() # 仅启用CPU卸载,无需手动指定设备 model.enable_cpu_offload() voice_preset = "v2/en_speaker_6" inputs = processor('hello, i hope you are doing well', voice_preset=voice_preset) # 无需手动移动输入,enable_cpu_offload会自动处理设备同步 audio_array = model.generate(**inputs) audio_array = audio_array.cpu().numpy().squeeze() sample_rate = model.generation_config.sample_rate write_wav("/home/rocky/chatout/test.wav", rate=sample_rate, data=audio_array) bark()
内容的提问来源于stack exchange,提问作者rocky
相关产品推荐
相关产品推荐

