2021년 9월 15일 (수) 오후 5:07, 신준호 <>님이 작성:
안녕하세요, 컴퓨터과학과 신준호입니다.
1회차 연구지도에서
동일한 구조의 3 layer GCN을 두 플랫폼에서 구현 후 시간 측정 및 프로파일링
두 플랫폼의 공개된 코드에서 GCN 학습 시 실행되는 cuda kernel 탐색
이 진행해야 할 부분이었습니다.
먼저 1번 사항의 경우, python 내장 라이브러리인 cProfile과, torch 라이브러리에 포함된 pytorch profiler, nvidia nsight systems, pyprof를 이용하여 네 가지 방법으로 프로파일링을 진행했습니다. nsys profiling 결과를 nsight system으로 확인하였을 때 각각의 epoch에서 gcn conv가 진행되는 동안 cuBLAS의 cublasSgemm_v2가 각 layer마다 한 번씩 총 세 번 호출되는 것을 확인할 수 있었고, pyprof와 nvprof를 통한 profiling 결과 두 플랫폼 모두에서 volta_sgemm128x64[nn|nt|tn]이 약 40%의 GPU 연산 시간을 차지하는 것을 확인할 수 있었습니다.
2번 사항의 경우, cProfile profiling 결과에서 internal time 기준 정렬 시 상위권 호출 함수 코드를 확인하여, PyG의 경우 gcn_conv.py:30의 gcn_norm에서 torch_sparse/matmul.py를 호출하고 해당 파일 내에서 @torch.jit._overload를 통해 spmm_cuda.cu가 실행된다고 추측하고 있습니다. DGL의 경우 dgl/sparse.py:77의 _gspmm에서 _CAPI_DGLKernelSpMM을 호출하고, 해당 커널 코드는 dgl/src/array/cuda/spmm.cu의 cusparseCsrmm2가 호출된다고 추측하고 있습니다.
감사합니다.
신준호 드림
좋습니다. 진척이 있군요.
다음 주에는 파악하신 각 spmv 커널이
어떻게 작동하는지를 이론적으로 분석 (dgl쪽은 paper가 주석으로 달려 있지요?)
어느 쪽이 더 빠른지를 실험적으로 측정
이렇게 두 가지를 해보시면 어떨까 합니다.
혹시 생각하고 계시던 다른 action item이 있다면 알려주세요.
연구지도내용
교수님 일정으로 인하여 해당 연구지도는 이메일 서면상으로 이루어졌습니다.
다음으로 진행할 과제는 다음과 같습니다.
어느 쪽의 spmv 커널이 더 빠른지를 실험적으로 측정
Deep graph library의 경우 dgl/graphconv.py에 주석으로 paper가 달려 있습니다.