Hugging Face pytorch_block_sparse 릴리스

Hugging Face는 pytorch_block_sparse를 출시했습니다. 이 확장은 블록-희소 행렬 곱셈을 구현하여 더 작고 빠른 신경망을 만들 수 있게 설계되었습니다. 이 라이브러리는 기존 희소 대수 연산의 효율성 격차를 해소하여 언어 모델의 메모리 사용량을 줄이고 생산 비용을 낮춥니다.

블록-희소 구현 및 사용법

pytorch_block_sparsetorch.nn.Linear를 대체할 수 있는 BlockSparseLinear 모듈을 제공합니다. 초기화 시 density 파라미터를 지정하기만 하면 최소한의 코드 변경으로 모델에 희소성을 통합할 수 있습니다.

또한 라이브러리에는 기존 모델을 "그때그때" 수정할 수 있는 BlockSparseModelPatcher가 포함되어 있습니다. 이를 통해 모델을 희소화한 뒤 원본 모델 소스 코드를 변경하지 않고도 정상적으로 학습할 수 있습니다.

기술 기반: NVIDIA CUTLASS

이 확장은 Yulhwa Kim이 만든 cutlass tilesparse 개념 증명을 기반으로 하며, NVIDIA CUTLASS를 기반으로 한 C++ CUDA 템플릿을 사용해 블록-희소 행렬 곱셈을 구현합니다.

CUTLASS는 고성능 CUDA 커널을 구현하기 위해 사용되는 CUDA C++ 템플릿 모음으로, 어셈블리 언어 없이도 cuBLAS에 근접한 성능을 제공합니다. 이 라이브러리는 Ampere Tensor Core 프리미티브와 호환되며, 제한된 정밀도 손실로 10배 이상의 속도 향상을 제공할 수 있습니다.

성능 및 메모리 효율성

현재 라이브러리의 희소 행렬 성능은 cuBLAS 최적화된 밀집 버전보다 약 2배 느리지만, 표준 PyTorch 희소 행렬보다 훨씬 개선된 수준입니다. 표준 PyTorch 희소 행렬은 밀집 행렬보다 한 차례 정도 더 느립니다.

성능 향상은 희소도 수준에 따라 달라집니다. 예를 들어 75% 희소도를 가진 행렬은 밀집 버전보다 약 2배 빠릅니다. 메모리 절감 효과는 더욱 두드러지며, 75% 희소도에서는 메모리 사용량이 4배 감소합니다.

향후 개발 로드맵

pytorch_block_sparse의 향후 버전은 초기화 시 고정된 희소 패턴을 넘어서는 기능을 목표로 합니다. 계획된 개선 사항은 다음과 같습니다:

  • 희소 패턴 최적화: 파라미터의 "유용성"을 측정하여 학습 과정 중 희소 패턴을 최적화하는 도구 개발.
  • 하드웨어 가속: 블록 내에 NVIDIA Ampere 50% 희소 패턴을 통합해 추가 성능 향상 달성.
  • CUTLASS 업데이트: 최신 CUTLASS 버전을 활용해 전반적인 효율성 향상.

Sources