Arithmetic Intensity

rooflineperformance

Arithmetic intensity(산술 강도)는 데이터 1 byte를 움직일 때 얼마나 많은 연산을 하는지 나타내는 비율이다.

AI=FLOPsBytes\text{AI} = \frac{\text{FLOPs}}{\text{Bytes}}

단위는 보통 FLOP/byte다.

시간 비교에서 나오기

compute-memory-time에서 계산 시간과 메모리 시간을 이렇게 썼다.

Tcompute=FCT_\text{compute} = \frac{F}{C} Tmemory=MBWT_\text{memory} = \frac{M}{BW}

여기서:

F  = FLOPs
M  = bytes moved
C  = peak FLOP/s
BW = memory bandwidth

compute-bound가 되려면 계산 시간이 메모리 시간보다 길어야 한다.

TcomputeTmemoryT_\text{compute} \ge T_\text{memory}

대입하면:

FCMBW\frac{F}{C} \ge \frac{M}{BW}

정리하면:

FMCBW\frac{F}{M} \ge \frac{C}{BW}

왼쪽이 연산의 산술 강도다.

AI=FM\text{AI} = \frac{F}{M}

오른쪽은 하드웨어의 임계 산술 강도다.

critical AI=CBW\text{critical AI} = \frac{C}{BW}

판단 규칙

AI < critical AI   -> memory-bound
AI > critical AI   -> compute-bound

즉 산술 강도는 “이 연산이 하드웨어의 연산 유닛을 충분히 먹여 살릴 만큼 데이터를 재사용하는가?”를 보는 숫자다.

행렬곱 예시

행렬곱의 algorithmic 산술 강도는 이상적인 메모리 이동량을 쓰면:

AImatmul2mnks(mk+kn+mn)\text{AI}_\text{matmul} \approx \frac{2mnk}{s(mk + kn + mn)}

여기서 s는 원소 하나의 bytes다.

실제 구현에서는 block-matrix-multiplication처럼 타일링을 얼마나 잘하느냐에 따라 bytes moved가 달라진다. 같은 FLOPs라도 bytes moved가 줄어들면 산술 강도는 커진다.

토큰 수가 왜 중요해지나

딥러닝에서 자주 나오는 형태를 보자.

X[B,D]×W[D,F]=Y[B,F]X[B,D] \times W[D,F] = Y[B,F]

B는 한 번에 처리하는 토큰 수나 batch 크기로 볼 수 있다.

FLOPs는:

2BDF2BDF

BF16에서 weight W[D,F] 읽기가 지배적이고 D,F가 충분히 크다고 단순화하면 bytes는 대략:

2DF2DF

그래서:

AI2BDF2DF=B\text{AI} \approx \frac{2BDF}{2DF} = B

즉 같은 weight를 더 많은 토큰에 재사용할수록 산술 강도가 올라간다. 이 때문에 batch나 token 수가 너무 작으면 GPU/TPU의 연산 능력을 충분히 쓰지 못하고 memory-bound가 되기 쉽다.

이 관계를 그래프로 보면 성능이 처음에는 B에 비례해 올라가다가, critical B 이후에는 peak compute에서 평평해진다.

Performance increases with arithmetic intensity until it reaches peak compute. Performance follows min(peak compute, memory bandwidth times arithmetic intensity). B 또는 Arithmetic Intensity Attainable FLOP/s Peak compute C critical B = C / BW memory-bound compute-bound
단순화해서 `AI ≈ B`라고 보면 성능은 `P(B) = min(C, BW x B)`를 따른다. `B < C / BW`에서는 메모리 대역폭이 병목이고, 그 이후에는 peak compute에서 성능이 평평해진다.

확인

  • 산술 강도의 단위는 무엇인가?
  • F/C >= M/BW를 정리하면 왜 F/M >= C/BW가 되는가?
  • 산술 강도가 커진다는 것은 어떤 재사용이 좋아졌다는 뜻인가?