본문 바로가기
환경세팅

Pytorch LMS support building for CUDA 11 Compatibility

by Slate_Knowledge 2021. 4. 16.
728x90

Pytorch 및 Tensorflow의 무수히 많은 포크 중에 LMS라는 포크가 있는데, 이는 Large Model Support의 약자이다. 이름에서 알 수 있듯이, 딥러닝 모델들이 무거워짐에 따라서 개인이 점점 자주 맞닥뜨리게 되는 쿠다OOM 문제를 해결하고자 제안된 모듈이다. 

github.com/IBM/pytorch-large-model-support

 

IBM/pytorch-large-model-support

Large Model Support in PyTorch. Contribute to IBM/pytorch-large-model-support development by creating an account on GitHub.

github.com

안타깝게도 위 모듈은 파이토치 1.5.0 버전을 마지막으로 업데이트가 되고 있지 않다. 이유는 IBM 측에서 더 이상 이 레포지토리를 관리할만한 인력을 붓지 않기 때문. (관련 문서 : github.com/IBM/pytorch-large-model-support/issues/10) IBM은 파이토치 업스트림에 포함이 거절된 모듈에 대해서 관리할 여력이 없다고 하는 듯 하다. (LMS support 거절에 관한 문서 : github.com/pytorch/pytorch/issues/35633)

여기서 문제는 지금까지 pytorch 1.5.0은 CUDA 11 버전을 지원하지 않았기 때문에 LMS 모듈을 30XX 번대 지피유에는 쓸 수가 없다는 것이다. 혹시 CUDA11 버전을 지원할 수 있을지 디버깅해가면서 실험해 보기 위해 일지 형식으로 이 글을 작성한다.

2021-04-16

먼저 파이토치 1.5.0 버전을 소스로부터 다운받는다. 공식 깃헙 레포에서 받은 다음 git checkout tags/v1.5.0 을 쳐주면 된다. pytorch/cmake/public/cuda.cmake에서 ~~cudnn.h 를 cudnn_version.h 로 바꾼다

에러 1번 :

        error: identifier "cusparseScsrmm2" is undefined

쿠다 11 버전에서 cusparseScsrmm2 가 사라졌다고 한다. (github.com/pytorch/pytorch/issues/40593) 마스터 브랜치에서는 이 문제가 해결이 되었다고 하기 때문에, 마스터 브랜치의 github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu#L84 파일을 복사하여 내려받은 소스의 aten/src/ATen/native/sparse/cuda/SparseCUDABlas.cu 에 덮어쓰고 저장한 다음 빌드한다.

에러 2번 :

        pytorch/caffe2/utils/GpuDefs.cuh:14:2: error: #error Unknown __CUDA_ARCH__; please define parameters for compute capability

caffe2/utils/GpuDefs.cuh 에서 라인 11을 #if __CUDA_ARCH__ <= 860 로 수정하고 빌드한다.

에러 3번 : 

        no matching function for call to ‘caffe2::AlgorithmsCache<std::tuple<cudnnConvolutionBwdDataAlgo_t, float> > 기타등등 caffe2/operators 밑 여러 파일에서 에러

1번과 마찬가지로 마스터 브랜치에서 가져온다. 마스터 브랜치의 caffe2/operators 밑의 *cudnn* 과 *.cu 파일들을 전부 복사하여 붙여넣는다. 그 다음 c10/cuda/CUDAException.h 맨 밑에 아래 줄을 추가한다.

#define C10_CUDA_KERNEL_LAUNCH_CHECK() C10_CUDA_CHECK(cudaGetLastError())

또 마스터 브랜치의 c10/util/accumulate.h 도 복사해서 가져온다(1.5.0 브랜치에는 없다).

마스터 브랜치의 c10 과 caffe2/operators 를 가져와서 덮어쓴다.

pytorch 폴더에서 

grep -rl CAFFE2_API | xargs sed -i 's/CAFFE2_API/CAFFE2_USED/g' 

실행해준다.

c10/macros/Exports.h 에서

pytorch/aten/src/ATen/cuda/nvrtc_stub/ 의 92 번째 라인에 TORCH_CUDA_API를 TORCH_CUDA_CU_API로 바꿔준다.

 

해볼 수 있는 뻘짓은 다 해봤는데, 역시 Aten 을 LMS 패키지에서 건드리는 형식이라 CUDNN, CUDA 디펜던시가 해소가 안된다.

 포기!

728x90
반응형

'환경세팅' 카테고리의 다른 글

도커 컨테이너에서 원격 디스플레이 실행하기  (0) 2021.03.22

댓글