티스토리 뷰
[Error] RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
미남잉 2023. 7. 12. 23:37
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda. HalfTensor [64, 512]], which is output 0 of DivBackward0, is at version 1; expected version 0 instead. Hint: the backtrace further above shows the operation that failed to compute its gradient. The variable in question was changed in there or anywhere later. Good luck!
이 오류의 의미는 gradient를 계산하기 위해 필요한 변수 중 하나가 수정되었고, 문제되는 변수가 나중에 또 변경되었다고 알려주고 있다. 즉, backward를 하며 gradient를 계산해야하는데 그 계산해야하는 변수 중 일부가 inplace 연산에 의해 수정되고 있다는 점이었다.
나는 생성한 텐서를 nn.Parameter(tensor)를 통해 파라미터로 바꾸어서 학습 가능하도록 만들었고, inplace 연산으로 인해 새로운 텐서를 생성하지 않고 입력 텐서를 직접 수정하는 연산이 반복되었다는 점에서 오류가 발생했다.
해결 방법은 두 가지가 있다.
1. 문제가 되는 연산의 값을 그대로 복사해서 사용하는 법
간단하게 clone()을 통해 해결할 수 있다.
2. 연산을 풀어서 적어주기
내가 문제가 되었던 연산은 아래 부분이어서 연산을 풀어주었다.
# 수정 전
text_direction /= text_direction.norm(dim=-1, keepdim=True)
# 수정 후
text_direction = text_direction / text_direction.norm(dim=-1, keepdim=True)
Tensor와 gradient가 계산되는 함수는 이렇다. w와 b가 최적화해야 하는 매개변수이고, 이 변수들에 대한 손실 함수의 변화도를 계산하여 학습이 이뤄져야 한다.
요즘 코드를 보며 배운 것
1. 학습되어야 하는 텐서는 requires_grad(True) 설정을 해줘야 한다는 점
2. 학습되어야 하는 텐서는 연산이 중복되지 않게 inplace 연산을 피해주어야 한다는 점
생각보다 간단한 문제였는데 오랫동안 헤맸다. 다들 잘 해결하시길!
'Skills > Error' 카테고리의 다른 글
[Error] ImportError: libGL.so.1: cannot open shared object file: No such file or directory (1) | 2023.07.19 |
---|---|
[Error] bash: sudo: command not found (2) | 2023.07.18 |
[Error] runtimeerror: element 0 of tensors does not require grad and does not have a grad_fn (0) | 2023.07.12 |
[Error] 개발 환경 세팅 - 각종 설치 (0) | 2023.07.06 |
[Error] You can enable repos with yum-config-manager --enable <repo> (0) | 2023.04.28 |
- Total
- Today
- Yesterday
- python
- 프롬프트
- 파이썬 클래스 계층 구조
- Unsupervised learning
- 서버에다운
- CNN
- 구글드라이브서버다운
- 서버구글드라이브연동
- few-shot learning
- stylegan
- 구글드라이브서버연동
- prompt learning
- vscode 자동 저장
- 딥러닝
- style transfer
- 구글드라이브다운
- cs231n
- support set
- 퓨샷러닝
- 도커 컨테이너
- 데이터셋다운로드
- 파이썬 클래스 다형성
- 구글드라이브연동
- docker
- clip
- 도커
- 파이썬
- 파이썬 딕셔너리
- Prompt
- NLP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |