본문 바로가기
에러모음집

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation

by 미라미라킴227 2021. 8. 29.

이 에러는 종종 발생하는 에러.. 

터미널에서 알려준 것처럼 set anomaly detection을 켜고 실행하다가 저 에러가 뜨게 만드는 줄이 있음. 

해당 줄에서 이야기하는 backprop error (ex. MulBackward) 같은걸 실행하다보면 

 

그럴때는....!! 정말 유용한 'clone'을 잘 사용하면 됨 

 

Error 발생줄 

updated_names_weights_dict[key] = names_weights_dict[key].clone() - step_size * exp_avg / denom

MulBackward = Multiply와 관련된 Backward 에러라서 관련된 연산자인 exp_avg를 트랙해봄 

 

원래 코드 

exp_avg.mul_(beta1).add_(names_grads_wrt_params_dict[key], alpha=1 - beta1)

 

딱 봐도.. inplace에러가 생길 수밖에 없는 구조...

 

수정 후

exp_avg_noc = exp_avg.mul_(beta1).add_(names_grads_wrt_params_dict[key], alpha=1 - beta1)

exp_avg = exp_avg_noc.clone()