반응형
DUST3R 붐의 기저 연구인 CrocoV2 에서 사용하면서 요새 간간히 사용하는게 보이는 RoPE. 속도가 일반 PE보다 느리긴 해서 학습 효율을 위해 CUDA로 구현된 코드가 같이 제공된다. Croco든 dust3r든 human3r인든 같은 코드를 쓰고 설치는 웬만하면 다음과 같이만 안내된다.
cd models/curope/
python setup.py build_ext --inplace
cd ../../
문제는 한 방에 안 될때가 많다는 것. 오류명을 봐도 뭐가 문젠지 몰라서 감을 못잡다가 최근에 우연히 해결했다.
원인
결국 torch 버전 문젠데 torch 버전이 올라가면서 못 따라오는 문제. 내 생각엔 2.6 버전 이후부터 이런 것 같다.
tokens.type()라고 쓰는 문법이 deprecated 돼서 그렇다. 그 return값인 at::DeprecatedTypeProperties도 당연히 없고, 없는 형을 c10::ScalarType으로 변환하라고 하니 터져버리는 것
해결법
kernel.cu 파일에서 한 줄 바꿔주면 된다.
98 const int N_BLOCKS = B * N; // each block takes care of H*D values
99 const int SHARED_MEM = sizeof(float) * (D + D/4);
100
101 - AT_DISPATCH_FLOATING_TYPES_AND_HALF(tokens.type(), "rope_2d_cuda", ([&] {
101 + AT_DISPATCH_FLOATING_TYPES_AND_HALF(tokens.scalar_type(), "rope_2d_cuda", ([&] {
102 rope_2d_cuda_kernel<scalar_t> <<<N_BLOCKS, THREADS_PER_BLOCK, SHARED_MEM>>> (
103 //tokens.data_ptr<scalar_t>(),
104 tokens.packed_accessor32<scalar_t,4,torch::RestrictPtrTraits>(),
105 pos.data_ptr<int64_t>(),
106 base, fwd); //, N, H, D );
107 }));
108 }
수정 위치를 그냥 복붙하면 위와 같다. 101번째 줄만 바꿔주고 저장한 뒤, 똑같이 설치하면 된다.
반응형