LLaMA2 모델에 peft library를 통해 LoRA를 적용시키고 학습하면 위와 같은 에러가 나면서 backward()가 되지 않는다.
실제로 LoRA를 적용한 후 require_grad가 true인 파라미터들을 보면, input_embedding, lm_head에 require_grad가 false로 되어 있다.
이를 하기 위해 "model.enable_input_require_grads()"를 추가해준다.
함수에 대한 설명은 "Enables the gradients for the input embeddings. This is useful for fine-tuning adapter weights while keeping the model weights fixed." 이다.
코드를 살펴보면, input_embedding 파라미터에 require_grad를 true로 바꿔주는 hook를 추가한다.
이를 통해 foward, backward pass가 정상 작동되는 거 같은데, parameter 자체의 weight는 고정하지만 gradient만 계산 가능하게 해주는 코드인 것 같다.
참고:
'개발' 카테고리의 다른 글
[Transformers] IterableDatasetShard의 동작 (1) | 2023.12.19 |
---|---|
[PyTorch] IterableDataset의 split (0) | 2023.12.18 |
LLaMA2 LoRA 적용과 tokenizer의 padding_side (1) | 2023.12.15 |
NotImplementedError: Cannot copy out of meta tensor; no data! (0) | 2023.12.15 |
Karabiner로 윈도우 용 키보드의 한영키를 맥에 적용시키기 (0) | 2023.10.12 |