혼합 정밀도 연산, 왜 지금 중요한가
딥러닝 모델이 거대해지면서 연산 효율성은 더 이상 "있으면 좋은 것"이 아니라 경제적 생존의 문제가 되었습니다. GPU 한 시간당 수 달러를 지불하는 클라우드 환경에서, 같은 결과를 절반의 연산으로 얻을 수 있다면 그것은 곧 비용 절반을 의미합니다. 혼합 정밀도(Mixed Precision) 연산은 이 효율성을 달성하는 핵심 기법인데, 간단히 말해 "모든 계산을 최고 정밀도로 할 필요는 없다"는 통찰에 기반합니다.
전통적으로 과학 계산과 머신러닝은 32비트 부동소수점(FP32)을 표준으로 사용해왔습니다. 하지만 실제로 많은 연산에서 16비트(FP16, BF16)나 심지어 8비트(INT8, FP8) 정밀도로도 충분한 정확도를 얻을 수 있다는 것이 밝혀졌습니다. NVIDIA가 Volta 아키텍처에서 Tensor Core를 도입하면서 하드웨어 수준의 혼합 정밀도 지원을 시작했고, 이후 모든 주요 AI 가속기가 이 기능을 탑재하고 있습니다.
문제는 이 하드웨어 기능을 실제로 활용하는 소프트웨어 커널을 작성하는 것이 매우 어렵다는 점입니다. NumKong은 바로 이 문제를 해결하기 위해 2,000개 이상의 사전 최적화된 혼합 정밀도 커널을 제공하는 프로젝트입니다.
NumKong의 기술적 접근법
"커널"이라는 용어가 OS 커널과 혼동될 수 있는데, 여기서 말하는 커널은 GPU나 CPU에서 실행되는 최적화된 수치 연산 함수를 의미합니다. 행렬 곱셈, 벡터 내적, 활성화 함수 적용 같은 기본 연산을 특정 하드웨어에 맞게 최적화한 코드 조각입니다.
NumKong이 2,000개나 되는 커널을 제공하는 이유는 조합 폭발 때문입니다. 입력 데이터 타입(FP64, FP32, FP16, BF16, FP8, INT8 등) × 출력 데이터 타입 × 연산 종류 × 타겟 하드웨어(x86 AVX-512, ARM NEON/SVE, CUDA 등)의 조합을 모두 커버하려면 방대한 수의 커널이 필요합니다. 기존에는 개발자가 필요한 조합을 직접 작성하거나, 라이브러리가 제공하지 않는 조합은 비효율적인 타입 변환을 거쳐 처리해야 했습니다.
특히 주목할 점은 타입 간 변환(casting) 없이 네이티브 혼합 정밀도 연산을 지원한다는 것입니다. 예를 들어 FP16 입력과 FP32 누적기를 사용하는 행렬 곱셈을 수행할 때, 기존 방식은 FP16 → FP32 변환 → 연산 → 결과 저장이라는 과정을 거칩니다. 이 변환 과정 자체가 메모리 대역폭과 연산 사이클을 소비합니다. NumKong의 커널은 이 변환 오버헤드를 제거하고 하드웨어의 네이티브 혼합 정밀도 명령어를 직접 활용합니다.
기존 생태계와의 비교
고성능 수치 연산 커널 라이브러리 영역에는 이미 강력한 플레이어들이 있습니다. NVIDIA의 cuBLAS/cuDNN은 CUDA GPU에서 사실상의 표준이고, Intel의 oneMKL은 x86 CPU 최적화의 기준점입니다. OpenBLAS는 오픈소스 BLAS 구현의 대표격이며, 최근에는 Triton(OpenAI)이 파이썬으로 GPU 커널을 작성할 수 있게 해주면서 커스텀 커널 작성의 진입 장벽을 낮추고 있습니다.
이들 대비 NumKong의 차별점은 크로스 플랫폼 혼합 정밀도에 특화되었다는 것입니다. cuBLAS는 NVIDIA GPU에서만 동작하고, oneMKL은 Intel 하드웨어에 최적화되어 있습니다. NumKong은 x86, ARM, CUDA 등 다양한 타겟을 커버하면서도 혼합 정밀도 조합을 체계적으로 지원합니다. 멀티 플랫폼 배포가 필요한 프로젝트에서는 각 플랫폼별로 다른 라이브러리를 사용하는 대신 NumKong 하나로 통일할 수 있는 가능성이 열립니다.
또한 기존 대형 라이브러리들은 가장 일반적인 정밀도 조합(FP32×FP32, FP16×FP16)에 최적화가 집중되어 있어서, 덜 일반적인 조합(예: BF16 입력 + FP32 누적 + INT8 출력)에 대해서는 최적 성능을 제공하지 못하는 경우가 많습니다. 양자화 추론이나 훈련 후 양자화(PTQ) 같은 시나리오에서는 이런 비표준 조합이 빈번하게 필요한데, NumKong은 이 틈새를 메우려 합니다.
실무 적용 시나리오
한국의 AI/ML 개발 현장에서 혼합 정밀도 연산이 직접적으로 영향을 미치는 영역은 크게 세 가지입니다.
첫째, 모델 추론 최적화입니다. 서비스에 배포된 모델의 추론 비용을 줄이기 위해 FP16이나 INT8 양자화를 적용하는 것은 이미 일반적인 관행입니다. NumKong의 다양한 혼합 정밀도 커널은 양자화 수준을 더 세밀하게 조정할 수 있는 도구를 제공합니다.
둘째, 엣지 디바이스 배포입니다. 모바일이나 임베디드 환경에서는 ARM 프로세서가 주류인데, ARM의 NEON이나 SVE 명령어 세트를 활용하는 최적화된 혼합 정밀도 커널이 있다면 온디바이스 AI의 성능을 크게 개선할 수 있습니다.
셋째, 커스텀 연산이 필요한 연구 프로젝트입니다. 새로운 활성화 함수나 어텐션 메커니즘을 실험할 때, 혼합 정밀도로 빠르게 프로토타이핑할 수 있는 빌딩 블록이 있으면 연구 속도가 빨라집니다.
정리
NumKong은 혼합 정밀도 연산의 "롱테일" — 수많은 타입 조합과 하드웨어 타겟의 교차점 — 을 체계적으로 커버하려는 야심찬 프로젝트입니다. AI 모델이 더 커지고 하드웨어가 더 다양해질수록, 이런 저수준 최적화 라이브러리의 가치는 계속 올라갈 것입니다. 여러분의 프로젝트에서 정밀도와 성능 사이의 트레이드오프를 어떻게 관리하고 계신가요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공