[GPU 프로그래밍/CUDA] AI에 활용되는 행렬연산 최적화 (1편)
1. AI의 기반을 이루는 연산은 행렬 곱셈입니다.
ChatGPT, Gemini, Claude, Grok 모두 Deep Neural Network (DNN)로 이루어져 있으며
DNN에서 수행하는 대부분의 연산은 행렬 곱셈(matrix multiplication)입니다.
2. AWS의 서버 효율이 1%만 개선되어도 연간 약 6천억 원의 비용 절감 효과가 있음을 고려하면
빅테크에서 행렬 연산 최적화는 천문학적인 경제적 가치가 있습니다.
3. 행렬 연산의 특징: n * n 행렬 2개를 곱한다면, 원소의 수는 O(n^2)이지만 연산의 횟수는 O(n^3)입니다.
즉, 동일한 원소가 여러 번 사용된다는 특징이 있습니다.
동일한 원소가 여러 번 사용되므로, locality를 최대화하여 cache miss를 최소화하는 것이 중요합니다.
일반적으로 두 수를 곱하는 시간보다 두 수를 메모리에서 불러오는 시간이 훨씬 깁니다.
(그 메모리가 system RAM인지, VRAM인지, L2/L3 cache처럼 다소 거리가 있지만 cache memory인지 등에 따라
구체적인 소요시간은 모두 다릅니다.)
4. 적절한 SIMD/SIMT 병렬성을 활용해서 메모리에서 값을 불러오는 과정에서 낭비되는 시간을 최소화하고
매우 많은 수의 코어를 가지고 있는 GPU의 구조를 적극 활용해야 합니다.
* SIMD = Same Instruction Multiple Data, SIMT = Same Instruction Multiple Threads
5. 엔비디아의 cuBLAS 자체가 굉장히 최적화가 잘 되어 있기에, 예제를 위한 예제가 아닌 cuBLAS에 준하는 효율을 갖는
최신 접근법을 이해하고 응용하는 것이 중요합니다.
일반적인 행렬 두 개를 곱하는 GEMM을 최적화하는 것에 대한 자료를 하나 공유드립니다.
Advanced Matrix Multiplication Optimization on NVIDIA GPUs
Advanced Matrix Multiplication Optimization on NVIDIA GPUs
This blog post focuses on a GPU implementation of SGEMM (Single-precision GEneral Matrix Multiply) operation defined as C := alphaAB + beta*C. We’ll review the algorithm’s design and discuss optimization techniques such as inlined PTX, asynchronous mem
salykova.github.io
학부, 대학원 수업에서 다루는 것에 비해 더 효과적인 최적화 기법들을 다루고 있어서
이 자료 일부를 함께 찬찬히 살펴보려 합니다.
6. LLM에서는 0이 많은 행렬 두 개를 곱하는 sparse matrix multiplication과
구글의 터보퀀트(TurboQuant, TurboQuant: Redefining AI efficiency with extreme compression)가 주목을 받으며 유명해진 quantization, KV caching 등의 최적화가 적용됩니다.
이러한 부분에 대해서도 영문 자료에 비해 국문 자료는 상대적으로 부족해서
우리 블로그에서 찬찬히 살펴보려 합니다.
감사합니다 :)