1. 문제 상황
Deeplearing from scratch 3 step 52 를 진행하고 있던 중 책에서 나온 코드 그대로 입력한 것 같은데 다음과 같은 TypeError: operand type(s) all returned NotImplemented from __array_ufunc__(<ufunc 'add'>, 'at', array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], ... 에러가 발생하더라구요. 이번 포스팅에서는 해당 원인을 알아보고 해결 방법을 탐색해보도록 하겠습니다.
2. 원인 및 해결
인터넷에서 원인을 검색한 결과 다음과 같은 자료를 얻을 수 있었습니다. 즉, numpy 는 __array_function__ protocol 과 __array_ufunc__ 를 이용하는데 __array_ufunc__ protocol 을 이용하는 메서드 ( 여기선 np.add.att 이 __array_ufunc__ protocol에 속합니다.) 는 cupy 에서 지원을 안한다는 글이 있네요.
저자가 책을 저술할 때도 이런 문제와 부딪혔을 것 같은데 이상해서 deep learning from scratch 3 github 코드를 보니까 xp 가 cupy 인 경우 다른 메서드를 통해 계산하도록 하고있습니다. 위의 설명과 일치하는 문맥에서 작성한 코드 같습니다.
github 와 같이 코드를 수정하니까 이제는 다음과 같은 에러가 발생했습니다 ㅠ 찾아보니까 cuda.scatter_add 함수는 삭제되어서 해당 에러가 발생한 것 같군요.
찾아보니 import cupyx 의 scatter_add() 가 예전 cupy.scatter_add() 의 기능을 한다고 하네요! gpu 버전 때 다음과 같은 코드로 수정을 하면 정상적으로 학습이 되는 것을 확인할 수 있었습니다.
3. 마무리
해당 책이 단계적으로 진행되다보니 GPU가 안되면 이후 단계는 진행하지 못하는 것 아닐까.. 라고 걱정을 했었는데 Step 60까지 공부해본 결과 GPU는 이용하지 않아도 괜찮더라구요 ㅎㅎ CPU 버전으로도 step 60까지 진행할 수 있습니다. 끝까지 화이팅입니다!
'IT 기타' 카테고리의 다른 글
VS Code (Visual Studio Code ) 설치 및 다운로드 ( Windows ) (0) | 2023.01.29 |
---|---|
LG gram 화면 밝기 변화 문제 해결 (0) | 2022.09.18 |
프린터 자동 양면 인쇄 설정 방법 (2) | 2021.08.09 |
무선 이어폰 데스크탑 에러(무선이어폰 검색안됨) 해결 방법 두 가지 (2) | 2021.06.08 |
Google Translator Attribute Error : 'None Type' object has no attribute 'group' 에러 해결 (0) | 2021.05.24 |