해결책
딥러닝은 조밀 행렬 곱셈을 핵심 반복 연산으로 만들었다. 당연한 답은 일반 부동소수점 유닛을 더 늘리는 것이었지만, 그렇게 하면 많은 모델이 필요로 하지 않는 정밀도에 실리콘과 전력을 쓰게 된다.
2017년 Volta와 함께 NVIDIA는 텐서 코어를 추가했다. FP16 입력을 받아 FP32로 누적하는 4x4 행렬 곱셈-누적 유닛이다. 이후 수치 연구들은 이 설계가 왜 중요했는지 보여주었다. 그것은 단순히 더 낮은 정밀도가 아니라, 전용 혼합 정밀도 연산이었다.
연구자들은 이후 반복 개선(iterative refinement)을 사용해 이 기법을 신경망 너머로 확장했다. Royal Society 논문은 Volta GPU에서 선형 해법의 FP64 수준 안정성을 유지하면서 4배에서 5배의 속도 향상과 약 5배 더 나은 에너지 효율을 보고했다.
달성한 것
저렴하게 계산하고, 신중하게 누적하라
행렬 곱셈은 일반 CUDA 코어만 쓰는 대신 전용 유닛을 정당화할 만큼 조밀하다.
FP16 입력은 대역폭과 곱셈기 비용을 줄이고, FP32 누적은 합이 즉시 붕괴하지 않게 유지한다.
반복 개선은 근사적인 빠른 해법을 정확한 최종 답으로 바꾼다.
이 경로를 CUDA 라이브러리에 넣음으로써 일반 소프트웨어가 하드웨어 기법을 물려받을 수 있게 했다.
완전 정밀도가 너무 비쌀 때는 작업을 나눠라. 오류를 복구할 수 있는 곳에는 저정밀도를 사용하고, 답을 감시하는 단계에는 고정밀도를 남겨라.
그 후
텐서 코어는 Volta, Turing, Ampere 전반에 걸쳐 NVIDIA의 핵심 차별화 요소가 되었다. 이 아이디어는 AI를 벗어나기도 했다. 혼합 정밀도 솔버, 과학 커널, 그리고 이후의 TF32 워크플로가 빠른 근사 연산에 정확도 복구를 더하는 같은 패턴을 사용했다.
근거 확인하기
출처
- Numerical behavior of NVIDIA tensor cores PeerJ Computer Science · pmc.ncbi.nlm.nih.gov ·
- Mixed-precision iterative refinement using tensor cores on GPUs to accelerate solution of linear systems Proceedings of the Royal Society A · pmc.ncbi.nlm.nih.gov ·