Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HuggingFace AutoModelForCasualLM "decoder-only architecture" warning, even after setting padding_side='left'

I'm using AutoModelForCausalLM and AutoTokenizer to generate text output with DialoGPT.

For whatever reason, even when using the provided examples from huggingface I get this warning:

A decoder-only architecture is being used, but right-padding was detected! For correct generation results, please set padding_side='left' when initializing the tokenizer.

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch


tokenizer = AutoTokenizer.from_pretrained("microsoft/DialoGPT-medium")
model = AutoModelForCausalLM.from_pretrained("microsoft/DialoGPT-medium")

# Let's chat for 5 lines
for step in range(5):
    # encode the new user input, add the eos_token and return a tensor in Pytorch
    new_user_input_ids = tokenizer.encode(input(">> User:") + tokenizer.eos_token, return_tensors='pt')

    # append the new user input tokens to the chat history
    bot_input_ids = torch.cat([chat_history_ids, new_user_input_ids], dim=-1) if step > 0 else new_user_input_ids

    # generated a response while limiting the total chat history to 1000 tokens, 
    chat_history_ids = model.generate(bot_input_ids, max_length=1000, pad_token_id=tokenizer.eos_token_id)

    # pretty print last ouput tokens from bot
    print("DialoGPT: {}".format(tokenizer.decode(chat_history_ids[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True)))

Code provided by microsoft on the model card at huggingface

I've tried adding padding_side='left' to the tokenizer but that doesn't change anything. Apparently (from some reading) DialoGPT wants the padding on the right side anyways? I can't figure this out, there are few results when I tried googling it.

I was able to suppress the warnings like this:

from transformers.utils import logging

logging.set_verbosity_info()

But this doesn't seem like the best answer?

like image 477
TurboToaster33 Avatar asked Dec 18 '25 17:12

TurboToaster33


2 Answers

Padding in this context is referring to the "tokenizer.eos_token", and you are currently padding to the right of the user input and the error is saying that for correct results add padding to the left. You need to do this:

new_user_input_ids = tokenizer.encode(tokenizer.eos_token + input(">> User:"), return_tensors='pt')

like image 137
Travis Thayer Avatar answered Dec 20 '25 07:12

Travis Thayer


Downgrade the version of transformers to 4.22.2 so that the warning message does not happen (I checked the version from 4.23.0 to the newest is 4.26.1 the warning message showed). If you change tokenizer.eos_token to the left input text, it maybe generates output incorrectly.

like image 37
TungHarry Avatar answered Dec 20 '25 08:12

TungHarry



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!