[Python] Make sure to set the decoder_start_token_id attribute of the model's configuration....

Discussão em 'Python' iniciado por Stack, Abril 11, 2025.

  1. Stack

    Stack Membro Participativo

    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)


    I set model.config.decoder_start_token_id here but.

    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()


    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"
    )


    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"])


    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()


    but in here, /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.

    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)


    I set model.config.decoder_start_token_id here. But error occurs. I don't understand why this is happening. I set model.config.decoder_start_token_id

    Continue reading...

Compartilhe esta Página