-
텐서코어, 한 명령에 행렬 곱을 끝낸다는 게 무슨 뜻인가IT 2026. 5. 5. 21:00
왜 이 글을 쓰게 됐나
이전에 GPU에서 LLM까지 추론 스택을 해부하는 글을 쓰면서, 가장 아래 레이어인 GPU 하드웨어를 "텐서코어가 들어 있는 칩"이라고만 짧게 언급하고 지나갔다. 그런데 이 텐서코어라는 게 사실 그 위의 모든 레이어 — CUDA, PyTorch, FlashAttention, vLLM, Quantization — 가 결국 효율적으로 활용하려고 매달리는 단 하나의 물리 장치다.
"한 명령에 행렬 곱을 묶어서 처리하는 전용 회로"라는 한 줄 설명을 들었을 때, 멋있긴 한데 정확히 무슨 의미인지 머릿속에 그려지지 않았다. 명령 하나로 행렬 곱을 어떻게 한 번에? 그게 왜 그렇게 대단한 거지? 이 글은 그 질문들을 풀어가는 글이다.
1. 먼저, 텐서가 뭔가
"텐서"라는 단어가 어렵게 느껴지는 이유는 수학·물리학에서 쓸 때 정의가 까다롭기 때문이다. 하지만 딥러닝에서 말하는 텐서는 훨씬 단순하다 — 다차원 배열이다.
- 스칼라: 숫자 하나. 0차원.
- 벡터: 숫자가 한 줄로 늘어선 것. 1차원.
- 행렬: 숫자가 표 형태로 배열된 것. 2차원.
- 텐서: 그 이상 차원의 배열. 3차원, 4차원, ...
예를 들어 컬러 이미지 한 장은
높이 × 폭 × 3(RGB)형태의 3차원 텐서다. 이미지를 32장씩 묶어서 배치로 처리하면32 × 높이 × 폭 × 3의 4차원 텐서가 된다. LLM이 다루는 토큰 시퀀스도배치 × 시퀀스길이 × 임베딩차원의 3차원 텐서다.요점은 — 딥러닝 모델이 처리하는 데이터는 거의 다 텐서 형태고, 그래서 PyTorch, TensorFlow 같은 프레임워크의 핵심 자료구조 이름도 그냥
Tensor다.2. 그럼 "텐서코어"는?
NVIDIA GPU 안에는 두 종류의 연산 회로가 있다.
코어 종류 처리 단위 한 번에 하는 일 CUDA 코어 (일반) 스칼라 숫자 1개 × 숫자 1개 Tensor 코어 (전용) 작은 행렬 작은 행렬 × 작은 행렬 + 행렬 이름 그대로다. "텐서(작은 행렬)를 통째로 받아서 처리하는 전용 회로"여서 텐서코어다. 2017년 NVIDIA Volta 아키텍처(V100)에서 처음 등장했고, 이후 모든 데이터센터급 GPU(A100, H100, B100, B200, GB200 등)에 핵심으로 들어가 있다.
일반 CUDA 코어는 만능 일꾼이라 그래픽 셰이더, 게임, 과학 계산, 뭐든 처리한다. 텐서코어는 오로지 한 가지 작업 — 작은 행렬 곱셈 — 만 잘하도록 설계된 특수 회로다. 다른 일은 못한다. 대신 그 한 가지를 압도적으로 빠르게 처리한다.
3. 행렬 곱이 왜 그렇게 중요한가
여기가 핵심이다. 딥러닝의 거의 모든 연산은 행렬 곱이다.
신경망 한 레이어가 하는 일을 식으로 쓰면:
Y = X · W + bX: 입력 (이전 레이어 출력 또는 원본 데이터)W: 가중치 행렬 (학습으로 결정되는 모델의 본체)b: 편향 벡터·: 행렬 곱셈
이게 끝이다. 트랜스포머의 어텐션도 결국
Q · Kᵀ,(softmax 결과) · V같은 행렬 곱이고, 컨볼루션도 풀어보면 행렬 곱이고, 피드포워드도 행렬 곱이다. ReLU, softmax 같은 활성화 함수가 사이사이 들어가지만 이건 무거운 연산이 아니라 약간의 양념이다. 메인 요리는 전부 행렬 곱이다.GPT-3 한 번 추론하는 데 행렬 곱이 약 수십억 번 일어난다. GPT-4 같은 모델이면 수조 번이다. 그래서 GPU의 행렬 곱 처리량(TFLOPS)이 곧 LLM의 처리 속도다.
4. "한 명령에 행렬 곱을 처리"가 정확히 무슨 의미인가
여기가 사람들이 헷갈려하는 부분이다. 행렬 곱이라는 게 뭔지부터 천천히 보자.
일반 코어로 행렬 곱 한 번 하기
4×4 행렬 두 개를 곱한다고 해보자.
A(4×4) × B(4×4) = C(4×4). 결과C의 한 칸c[i,j]를 구하려면 이런 계산이 필요하다:c[i,j] = a[i,0]*b[0,j] + a[i,1]*b[1,j] + a[i,2]*b[2,j] + a[i,3]*b[3,j]곱셈 4번, 덧셈 3번. 일반 CUDA 코어는 한 사이클에 곱셈 1번 + 덧셈 1번(이걸 FMA, Fused Multiply-Add라고 한다)을 처리한다. 그러니까 c[i,j] 한 칸 채우는 데만 4사이클이 걸린다.
그런데 결과 행렬 C에는 칸이 16개(4×4) 있다. 한 코어가 순서대로 처리한다면 총 4 × 16 = 64사이클이 걸린다. 물론 실제로는 16개 코어가 16칸을 병렬로 채우니까 4사이클로 끝나긴 한다. 하지만 그러려면 16개 코어가 동원되어야 한다.
텐서코어로 같은 일 하기
텐서코어는 다르다. 한 명령어로 이렇게 시킨다:
D = A × B + C (4×4 행렬 × 4×4 행렬 + 4×4 행렬, 한 번에)이걸 MMA(Matrix Multiply-Accumulate) 명령이라고 부른다. 텐서코어 하나가 이 명령을 받으면, 내부에 있는 64개의 곱셈+덧셈 회로가 동시에 작동해서 결과 D 행렬을 한꺼번에 만들어낸다.
물론 "한 명령"이라고 해서 정말 1사이클로 끝나는 건 아니다. 명령 하나에 보통 몇 사이클(4~8 정도)이 걸린다. 하지만 핵심은 — 스칼라 곱셈 64번을 차곡차곡 쌓는 대신, 행렬 곱셈 1번을 하나의 명령으로 묶어 처리한다는 것. 그 안에서 64개의 곱셈+덧셈이 물리적으로 병렬 실행된다. 사이클 수가 아니라 "명령 단위"가 행렬 단위로 커진 게 본질이다.
왜 이게 단순히 코어 64개 갖다 놓은 것보다 빠른가
이게 단순히 일반 코어 64개를 다발로 묶은 것과 같지 않은 이유는 셋이다.
- 명령 디스패치 비용이 1번뿐. 일반 코어로 64번 작업하면 명령 64번을 보내야 한다. 텐서코어는 명령 한 번이면 내부에서 64개가 알아서 돌아간다.
- 데이터 재사용. 행렬 곱에서 같은 a[i,k] 값은 결과 행렬의 j 방향 여러 칸에서 재사용된다. 일반 코어는 이걸 매번 메모리에서 다시 읽어야 하지만, 텐서코어는 한 번 읽어둔 데이터를 내부 회로 사이에서 공유한다.
- 전용 회로의 단순성. 일반 코어는 곱셈도 하고, 나눗셈도 하고, 분기도 하고, 메모리도 다룬다. 텐서코어는 오직 행렬 곱만 한다. 회로가 단순할수록 트랜지스터 면적이 작고, 클럭이 높고, 전력 효율이 좋다.
5. 그래서, 얼마나 대단하고 얼마나 귀한가
처리량 비교
NVIDIA H100을 기준으로 보자. 같은 칩 안에서 일반 코어와 텐서코어의 처리량 차이는 이렇다.
연산 단위 CUDA 코어 Tensor 코어 배율 FP32 (32비트 부동소수) 67 TFLOPS 989 TFLOPS ~15× FP16 (16비트, 학습 표준) 134 TFLOPS 1,979 TFLOPS ~15× FP8 (8비트, 추론 가속) — (지원 안 함) 3,958 TFLOPS ~30× 같은 GPU 안에서 텐서코어가 일반 코어보다 15~30배 빠르다. 그것도 같은 면적·전력 안에서. LLM 학습·추론 시간의 90% 이상이 텐서코어에서 일어나는 행렬 곱이다. 텐서코어가 없으면 같은 GPT 추론이 십수 배 더 느리다.
왜 "귀한" 자원인가
몇 가지 관점에서 그렇다.
- 아래에서 위까지 모든 레이어가 매달리는 자원. cuBLAS, cuDNN, FlashAttention, vLLM, TensorRT-LLM — 이 모든 라이브러리가 텐서코어 활용도를 1%라도 더 끌어올리려고 정교한 최적화를 한다. FlashAttention이 그렇게 빠른 핵심 이유 중 하나도 어텐션 연산을 텐서코어가 잘 먹을 수 있는 행렬 곱 형태로 재배치한 덕분이다.
- GPU 가격을 결정하는 요소. NVIDIA H100이 한 장에 4,000만 원 이상에 거래되는 이유는 메모리 용량보다도 텐서코어의 양과 세대다. AMD MI300X, Google TPU도 결국 같은 종류의 행렬 곱 가속 회로 경쟁이다.
- 모델 크기를 결정하는 한계. "이 모델을 이 비용으로 돌릴 수 있는가" 의 답은 결국 텐서코어 처리량과 GPU 메모리에 달려 있다. GPT-4급 모델이 지금의 비용으로 서비스되는 건 텐서코어가 매 세대 2배씩 빨라지고 있기 때문이다.
- 새 데이터 타입의 출현. FP16에 이어 BF16, FP8, 그리고 곧 FP4까지. 이 모든 게 텐서코어가 더 적은 비트로 더 많은 연산을 처리할 수 있게 만들기 위한 진화다. 텐서코어가 곧 AI 비용 절감의 최전선이다.
정리
이 글에서 다룬 내용을 한 장으로 압축하면 이렇다.
- 텐서는 다차원 배열이고, 딥러닝의 모든 데이터가 텐서 형태로 흐른다.
- 딥러닝의 90%는 거대한 행렬 곱의 반복이다. 신경망 레이어, 어텐션, 컨볼루션 모두.
- 일반 CUDA 코어는 한 번에 곱셈 1 + 덧셈 1을 처리한다. 행렬 곱은 이걸 수십수백 번 쌓아야 한다.
- 텐서코어는 작은 행렬 곱(예: 4×4) 전체를 단 하나의 명령(MMA)으로 처리한다. 내부에서 수십 개의 회로가 동시에 돈다.
- 결과적으로 같은 칩 안에서 텐서코어가 일반 코어보다 15~30배 빠르고, LLM 추론·학습의 거의 전부가 텐서코어 위에서 돈다.
- 그래서 텐서코어는 현재 AI 모델을 떠받치는 가장 작고 가장 귀한 회로다. GPU 가격, 모델 크기, 추론 비용 — 그 모든 게 결국 이 한 점에 묶여 있다.
다음에 누군가 "텐서코어가 어쩌고" 하는 얘기를 들으면 이렇게 떠올리면 된다. "아, 행렬 곱 한 덩어리를 한 명령으로 묶어서 회로 64개가 동시에 처리하는, AI 시대의 가장 비싼 트랜지스터구나."
이 글은 생성형 AI의 도움을 받아 작성되었습니다. 원본 자료를 기반으로 AI가 초안을 생성하고, 작성자가 검토·편집하였습니다.
'IT' 카테고리의 다른 글
Gemma 4에서 Qwen 3.6으로 갈아탔다 — 두 모델을 모든 지표로 비교한 기록 (0) 2026.05.06 Fused 커널은 왜 3~4배 빠른가 — GPU 메모리 계층과 Marlin의 비밀 (0) 2026.05.05 Q4 양자화는 GPU 안에서 어떻게 동작하나 — Blackwell FP8 텐서코어와의 만남 (0) 2026.05.05 FP8이 왜 FP16보다 45% 빠를까 — Blackwell GPU의 '텐서코어 네이티브 처리' 이해하기 (0) 2026.05.05 TFLOPS가 뭔데? — FLOPS의 정의부터 요즘 GPU의 실제 수치까지 (0) 2026.05.05 context7 MCP, 설치만 하고 끝낼 뻔했다 — 도구 도입의 진짜 일은 트리거 설계 (2) 2026.05.04 GitHub MCP 서버 도입기 — gh CLI 대신 JSON-RPC로 깃헙과 대화하기 (0) 2026.05.04 Inter 금지, 보라 그라데이션 금지 — frontend-design 스킬이 가르쳐 준 것 (0) 2026.05.03 스킬을 찾아주는 스킬 — find-skills로 에이전트 생태계 뒤지기 (3) 2026.05.03 내 스킬을 skill-creator에게 다시 쓰게 시켜봤다 — 리라이트할 가치는 있을까? (0) 2026.05.03