Skip to content

LoRA finetuning pi0 fails: prepare_input not found #9

@WilliamForest233

Description

@WilliamForest233

Hi, I attempted to finetune the π₀ model on the genmanip-demo dataset using LoRA, configured via the YAML config script.
However, training fails with the following error:

Traceback (most recent call last):
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/peft_model.py", line 824, in __getattr__
    return super().__getattr__(name)  # defer to nn.Module's logic
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1931, in __getattr__
    raise AttributeError(
AttributeError: 'PeftModelForCausalLM' object has no attribute 'prepare_input'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/tuners/lora/model.py", line 371, in __getattr__
    return super().__getattr__(name)  # defer to nn.Module's logic
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1931, in __getattr__
    raise AttributeError(
AttributeError: 'LoraModel' object has no attribute 'prepare_input'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/internmanip/scripts/train/train.py", line 366, in <module>
    main(config)
  File "/data/internmanip/scripts/train/train.py", line 241, in main
    trainer.train(resume_from_checkpoint=training_args.resume_from_checkpoint)
  File "/data/internmanip/internmanip/trainer/base.py", line 160, in train
    return super().train(resume_from_checkpoint, trial, ignore_keys_for_eval, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/transformers/trainer.py", line 2245, in train
    return inner_training_loop(
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/transformers/trainer.py", line 2560, in _inner_training_loop
    tr_loss_step = self.training_step(model, inputs, num_items_in_batch)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/transformers/trainer.py", line 3736, in training_step
    loss = self.compute_loss(model, inputs, num_items_in_batch=num_items_in_batch)
  File "/data/internmanip/internmanip/trainer/base.py", line 76, in compute_loss
    outputs = model(inputs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1736, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1747, in _call_impl
    return forward_call(*args, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/parallel/distributed.py", line 1643, in forward
    else self._run_ddp_forward(*inputs, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/parallel/distributed.py", line 1459, in _run_ddp_forward
    return self.module(*inputs, **kwargs)  # type: ignore[index]
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1736, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1747, in _call_impl
    return forward_call(*args, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/accelerate/utils/operations.py", line 823, in forward
    return model_forward(*args, **kwargs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/accelerate/utils/operations.py", line 811, in __call__
    return convert_to_fp32(self.model_forward(*args, **kwargs))
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/amp/autocast_mode.py", line 44, in decorate_autocast
    return func(*args, **kwargs)
  File "/data/internmanip/internmanip/utils/peft.py", line 7, in _forward
    backbone_inputs, action_inputs = model.prepare_input(inputs)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/peft_model.py", line 828, in __getattr__
    return getattr(self.base_model, name)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/tuners/lora/model.py", line 375, in __getattr__
    return getattr(self.model, name)
  File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1931, in __getattr__
    raise AttributeError(
AttributeError: 'PI0Policy' object has no attribute 'prepare_input'
[rank0]: Traceback (most recent call last):
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/peft_model.py", line 824, in __getattr__
[rank0]:     return super().__getattr__(name)  # defer to nn.Module's logic
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1931, in __getattr__
[rank0]:     raise AttributeError(
[rank0]: AttributeError: 'PeftModelForCausalLM' object has no attribute 'prepare_input'

[rank0]: During handling of the above exception, another exception occurred:

[rank0]: Traceback (most recent call last):
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/tuners/lora/model.py", line 371, in __getattr__
[rank0]:     return super().__getattr__(name)  # defer to nn.Module's logic
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1931, in __getattr__
[rank0]:     raise AttributeError(
[rank0]: AttributeError: 'LoraModel' object has no attribute 'prepare_input'

[rank0]: During handling of the above exception, another exception occurred:

[rank0]: Traceback (most recent call last):
[rank0]:   File "/data/internmanip/scripts/train/train.py", line 366, in <module>
[rank0]:     main(config)
[rank0]:   File "/data/internmanip/scripts/train/train.py", line 241, in main
[rank0]:     trainer.train(resume_from_checkpoint=training_args.resume_from_checkpoint)
[rank0]:   File "/data/internmanip/internmanip/trainer/base.py", line 160, in train
[rank0]:     return super().train(resume_from_checkpoint, trial, ignore_keys_for_eval, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/transformers/trainer.py", line 2245, in train
[rank0]:     return inner_training_loop(
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/transformers/trainer.py", line 2560, in _inner_training_loop
[rank0]:     tr_loss_step = self.training_step(model, inputs, num_items_in_batch)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/transformers/trainer.py", line 3736, in training_step
[rank0]:     loss = self.compute_loss(model, inputs, num_items_in_batch=num_items_in_batch)
[rank0]:   File "/data/internmanip/internmanip/trainer/base.py", line 76, in compute_loss
[rank0]:     outputs = model(inputs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1736, in _wrapped_call_impl
[rank0]:     return self._call_impl(*args, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1747, in _call_impl
[rank0]:     return forward_call(*args, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/parallel/distributed.py", line 1643, in forward
[rank0]:     else self._run_ddp_forward(*inputs, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/parallel/distributed.py", line 1459, in _run_ddp_forward
[rank0]:     return self.module(*inputs, **kwargs)  # type: ignore[index]
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1736, in _wrapped_call_impl
[rank0]:     return self._call_impl(*args, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1747, in _call_impl
[rank0]:     return forward_call(*args, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/accelerate/utils/operations.py", line 823, in forward
[rank0]:     return model_forward(*args, **kwargs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/accelerate/utils/operations.py", line 811, in __call__
[rank0]:     return convert_to_fp32(self.model_forward(*args, **kwargs))
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/amp/autocast_mode.py", line 44, in decorate_autocast
[rank0]:     return func(*args, **kwargs)
[rank0]:   File "/data/internmanip/internmanip/utils/peft.py", line 7, in _forward
[rank0]:     backbone_inputs, action_inputs = model.prepare_input(inputs)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/peft_model.py", line 828, in __getattr__
[rank0]:     return getattr(self.base_model, name)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/peft/tuners/lora/model.py", line 375, in __getattr__
[rank0]:     return getattr(self.model, name)
[rank0]:   File "/data/internmanip/.venv/model/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1931, in __getattr__
[rank0]:     raise AttributeError(
[rank0]: AttributeError: 'PI0Policy' object has no attribute 'prepare_input'

Is prepare_input expected to be implemented by custom models for LoRA to work?
If so, could you provide guidance or examples on how to adapt custom policy classes (PI0Policy) to be compatible with LoRA?
If not, when might LoRA support for such models be added?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions