Closed1

PEFT で TypeError: PeftModelFor~~LM.generate() takes 1 positional argument but 2 were given と言われた

PlatPlat
model = AutoModelForSeq2SeqLM.from_pretrained(
    MODEL_NAME,
    torch_dtype=torch.bfloat16,
    device_map={"": 0},
    ignore_mismatched_sizes=True,
    max_length=128,
    length_penalty=0.6,
    no_repeat_ngram_size=2,
    num_beams=15,
)
model = get_peft_model(model, peft_config)

...

output = model.generate(
    batch["input_ids"].to("cuda"),
    no_repeat_ngram_size=2,
    max_length=128,
)

のようにしたら

TypeError: PeftModelForSeq2SeqLM.generate() takes 1 positional argument but 2 were given

のように言われた。

どうやら(現状?) PeftModelFor◯◯LM の generate 関数に input_ids を与えるときは明示的に引数名をつけないといけないようだ。

generate() を以下のようにすればエラーが出なかった。

output = model.generate(
    input_ids=batch["input_ids"].to("cuda"),
    no_repeat_ngram_size=2,
    max_length=128,
)

ややこしいので仕様統一されて欲しい...

参考:

https://github.com/huggingface/peft/issues/232

https://github.com/huggingface/peft/issues/587

このスクラップは2023/10/05にクローズされました