본문 바로가기

개발

RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn

 

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만 계산 가능하게 해주는 코드인 것 같다.

 

 

 

참고:

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