앞선 포스팅에서 우리는 딥러닝 모델 성능 저하의 두 가지 주된 원인인 ‘메모리 병목(Memory-bound)‘과 ‘연산 병목(Compute-bound)‘에 대해 논의했습니다. 그러나 실제 NPU에 모델을 배포할 때, 직관만으로 병목의 원인을 파악하기는 어렵습니다. 모델 내부에는 다양한 성격의 레이어들이 혼재되어 있기 때문입니다.
이때 엔지니어에게 필수적인 분석 프레임워크가 바로 ‘루프라인 모델(Roofline Model)’입니다. 2009년 UC 버클리 연구팀이 제안한 이 모델은 프로세서의 연산 성능과 메모리 대역폭 간의 상관관계를 2차원 그래프로 정량화하여 보여줍니다. 이는 하드웨어가 달성할 수 있는 ‘이론적 성능 임계치(Roof)’를 정의하고, 현재 모델이 그 임계치 대비 어느 수준의 효율을 내고 있는지 파악하여 최적화 방향을 결정하는 절대적인 기준이 됩니다.
관련 글
✅
1. Roofline Model의 구조: 성능을 결정하는 두 축(Axis)
Roofline 그래프를 해석하기 위해서는 X축과 Y축의 공학적 정의를 명확히 이해해야 합니다.
A. Y축: 달성 가능한 성능 (Attainable Performance)
- 단위: GFLOPS (Giga Floating-point Operations Per Second) 또는 TOPS (Tera Operations Per Second)
- 의미: 초당 처리 가능한 연산 횟수를 나타냅니다. 수치가 높을수록 처리 속도가 빠름을 의미하며, 이는 하드웨어의 연산 유닛(Processing Element, PE) 개수와 동작 주파수(Clock Frequency)에 비례합니다.
B. X축: 연산 강도 (Arithmetic Intensity / Operational Intensity)
- 단위: FLOPs/Byte (또는 Ops/Byte)
- 의미: 이 모델의 핵심 지표로, “메모리에서 1바이트의 데이터를 로드했을 때, 몇 번의 연산을 수행하는가?”를 나타냅니다.
연산 강도가 높다는 것은 데이터를 한 번 메모리에서 로드한 후, 레지스터나 캐시 등 온칩(On-chip) 메모리에서 반복적으로 재사용하여 많은 연산을 수행함을 의미합니다(High Data Reuse). 반대로 낮다는 것은 데이터 재사용률이 낮아 로드 직후 적은 연산만 수행하고 폐기됨을 뜻합니다.
2. 두 가지 성능 한계선: 사선(Slanted)과 평선(Flat)
Roofline 그래프의 형태는 하드웨어의 물리적 제약에 따라 ‘사선’과 ‘평선’이라는 두 가지 한계선으로 구분됩니다.
A. 사선 영역 (Slanted Roof): Memory-bound Region
그래프의 좌측, 즉 연산 강도(X축)가 낮은 영역입니다.
- 특징: 이 구간에서는 연산 유닛(PE)을 증설하더라도 전체 성능(Y축)은 향상되지 않습니다. 성능의 기울기는 전적으로 메모리 대역폭(Memory Bandwidth)에 의해 결정됩니다.
- 해당 연산: Element-wise 연산(Add, Mul), Activation 함수(ReLU, Sigmoid), Batch Normalization 등.
- 병목 원인: 데이터 전송 속도가 연산 속도를 따라가지 못해 연산 유닛이 데이터가 도착할 때까지 유휴 상태(Stall/Idle)로 대기합니다.
- 최적화 방향: 메모리 대역폭을 물리적으로 확장하거나(HBM 사용 등), 모델 경량화/양자화를 통해 전송 데이터 양을 감소시켜야 합니다.
B. 평평한 영역 (Flat Roof): Compute-bound Region
그래프의 우측, 즉 연산 강도(X축)가 높은 영역입니다.
- 특징: 연산 강도가 특정 임계점을 초과하면, 메모리 대역폭은 더 이상 성능 제한 요소로 작용하지 않습니다. 이때의 성능 한계는 NPU의 최대 연산 처리 능력(Peak Performance)에 의해 결정되어 그래프가 수평을 이룹니다.
- 해당 연산: 대규모 커널을 사용하는 Convolution 레이어, Fully Connected (Dense) 레이어 등.
- 병목 원인: 연산 유닛의 가동률이 이미 100%에 근접하여 물리적인 계산 능력이 포화 상태입니다.
- 최적화 방향: 클럭 주파수를 높이거나, 병렬 처리 가능한 PE의 개수를 늘려야 합니다.
3. Ridge Point: 최적화의 변곡점
사선과 평선이 교차하는 지점을 Ridge Point (또는 Knee Point)라고 합니다.
이 지점의 X값은 하드웨어 아키텍처의 특성을 규정하는 중요한 지표입니다.
- Ridge Point가 우측에 위치: 하드웨어의 연산 성능 대비 메모리 대역폭이 부족한 상태입니다. 따라서 하드웨어의 최대 성능을 끌어내기 위해서는 매우 높은 수준의 데이터 재사용(높은 연산 강도)이 요구됩니다.
- Ridge Point가 좌측에 위치: 상대적으로 낮은 연산 강도로도 최대 성능에 도달할 수 있습니다. 이는 메모리 서브시스템이 강력하게 설계되었음을 의미합니다.
4. 실전 NPU 최적화 전략: 좌표 이동 (Move the Dot)
딥러닝 모델의 특정 레이어를 분석하여 Roofline 그래프 상에 좌표(점)로 표시했을 때, 해당 점이 지붕(Limit Line)보다 아래에 위치한다면 최적화가 필요하다는 신호입니다. 최적화는 이 점을 ‘위로’ 또는 ‘오른쪽으로’ 이동시키는 공학적 과정입니다.
A. Ceiling Analysis (상향 이동: Utilization 개선)
좌표가 지붕 선보다 현저히 아래에 위치한다면, 이는 하드웨어의 이론적 성능을 충분히 활용하지 못하고 있음을 시사합니다.
- 원인: 비효율적인 명령어 스케줄링, 파이프라인 스톨(Stall), 캐시 미스(Cache Miss)로 인한 레이턴시, 소프트웨어 오버헤드 등.
- 해결책: 루프 타일링(Loop Tiling)을 통해 캐시 적중률을 높이거나, 컴파일러 레벨에서 명령어 파이프라인을 최적화하여 하드웨어 가동률(Utilization)을 개선해야 합니다.
B. Increasing AI (우측 이동: 연산 강도 향상)
Memory-bound 영역(사선)에 위치한 좌표를 우측(Compute-bound 방향)으로 이동시키면, 동일한 메모리 대역폭 제약 하에서도 더 높은 성능을 달성할 수 있습니다.
- 전략: Layer Fusion이 가장 효과적입니다. 예를 들어, Conv 레이어의 출력값을 DRAM에 쓰지 않고, 곧바로 레지스터나 L1 캐시에서 다음 ReLU, Pooling 연산의 입력으로 사용합니다. 이를 통해 분모(Memory Traffic)를 줄임으로써 연산 강도(Arithmetic Intensity)를 획기적으로 높일 수 있습니다.
5. 결론 및 시사점: 아키텍처 설계의 방향성
과거의 초기 CNN 모델들은 높은 연산 밀도를 가져 Compute-bound 특성이 강했습니다. 그러나 최근 등장한 Transformer 기반의 LLM(거대 언어 모델)들은 파라미터 수가 급증하여 전형적인 Memory-bound 특성을 보입니다.
이에 따라 최신 NPU 아키텍처 트렌드는 단순히 연산 코어의 수를 늘리는 것을 넘어, HBM(High Bandwidth Memory)을 탑재하거나 온칩 SRAM 용량을 극대화하여 Roofline의 사선 기울기를 가파르게 만드는(대역폭 확보) 방향으로 진화하고 있습니다.
결론적으로, NPU 성능 최적화는 “내 모델이 느리다”는 모호한 판단이 아니라, “내 모델의 각 레이어가 Roofline 그래프의 어느 영역(Zone)에 위치하는가?”를 정량적으로 파악하는 것에서 시작됩니다. 이것이 시스템 설계자와 AI 엔지니어가 갖추어야 할 첫 번째 분석 역량입니다.
관련 글
✅
참고: Wikipedia