You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GPU运行suno/bark-small模型时遭遇RuntimeError问题求助

问题解决:Bark模型设备不匹配RuntimeError

错误原因分析

你遇到的RuntimeError核心是两个问题:

  1. 模型设备设置冲突:同时调用model.enable_cpu_offload()和model.to('cuda'),前者会自动将部分模型层卸载到CPU,后者强制全模型移到GPU,导致模型内部张量分散在CPU和GPU两个设备。
  2. 输入张量未同步:处理后的输入默认在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:17:05