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

设置model.config.decoder_start_token_id后,训练MusicGen仍报错ValueError的问题求助

设置model.config.decoder_start_token_id后,训练MusicGen仍报错ValueError的问题求助

大家好,我在尝试用LoRA微调MusicGen-small模型时遇到了个头疼的问题——明明已经手动设置了model.config.decoder_start_token_id,但启动训练后还是抛出了ValueError,提示我必须设置这个配置项。下面是我的完整代码流程和报错信息,麻烦各位帮忙排查一下问题!

1. 模型初始化与配置设置

我首先加载了MusicGen模型和对应的处理器、分词器,并且明确设置了解码器的起始token ID:

from transformers import AutoProcessor, MusicgenForConditionalGeneration, EncodecModel

model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("facebook/musicgen-small")
decoder_start_token = "<s>"  
model.config.decoder_start_token_id = tokenizer.convert_tokens_to_ids(decoder_start_token)

2. LoRA配置与PEFT模型创建

接着我定义了LoRA的配置,并生成了PEFT模型:

from peft import LoraConfig, TaskType
import torch.nn as nn

target_modules = [
    name for name, module in model.named_modules()
    if isinstance(module, (nn.Linear))
]

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    target_modules=target_modules,
    inference_mode=False,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1
)
from peft import get_peft_model

peft_model = get_peft_model(model, peft_config)

peft_model.print_trainable_parameters()

3. 训练参数设置

然后我配置了训练的相关参数:

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./musicgen_results",
    learning_rate=1e-3,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    num_train_epochs=2,
    weight_decay=0.01,
    eval_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
    report_to="none"
)

4. 数据预处理函数

我写了预处理函数来处理音频和文本数据:

from transformers import EncodecModel
import torch

def preprocess_function(example):
    audio = example["audio_path"]
    encodec_model = EncodecModel.from_pretrained("facebook/encodec_32khz")

    audio_array = example["audio_path"]["array"]
    sampling_rate = 32000  

    audio_tensor = torch.tensor(audio_array, dtype=torch.float32)  
    audio_tensor = audio_tensor.unsqueeze(0).unsqueeze(0)  

    audio_inputs = encodec_model.encode(audio_tensor)
    audio_tokens = audio_inputs.audio_codes  
    example["labels"] = audio_tokens
    example.update(processor(
        audio=audio["array"],
        text=example["description"],
        sampling_rate=32000
    ))
    return example
train_dataset = train_dataset.map(preprocess_function, remove_columns=["description", "audio_path"])
eval_dataset = eval_dataset.map(preprocess_function, remove_columns=["description", "audio_path"])

5. 启动训练与报错信息

最后我初始化了Trainer并启动训练:

from torch.nn.utils.rnn import pad_sequence
from transformers import DataCollatorForSeq2Seq

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)

trainer.train()

但运行后立刻抛出了如下错误:

/usr/local/lib/python3.10/dist-packages/transformers/models/musicgen/modeling_musicgen.py in shift_tokens_right(input_ids, pad_token_id, decoder_start_token_id)
102     shifted_input_ids[..., 1:] = input_ids[..., :-1].clone()
103     if decoder_start_token_id is None:
---> 104         raise ValueError("Make sure to set the decoder_start_token_id attribute of the model's configuration.")
105     shifted_input_ids[..., 0] = decoder_start_token_id
106

ValueError: Make sure to set the decoder_start_token_id attribute of the model's configuration.

我真的很困惑——明明在最开始就已经设置了model.config.decoder_start_token_id,为什么训练时还是会触发这个错误呢?有没有大佬能帮我找到问题的根源呀?

备注:内容来源于stack exchange,提问作者김동연

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:54:38