신경망 추론의 메모리 트래픽 — 학습서

· 결론 — 세 질문의 답

목차

이 책은 세 질문을 따라왔다. 메모리 트래픽이 무엇이고 무엇이 정하나, inverted residual에서 왜 트래픽이 느나, 파라미터 수와 트래픽은 왜 별개인가. MobileNet-v2를 한 바이트씩 세어 답을 확인했다. 이 장에서 답을 한자리에 모은다.

06.1 메모리 트래픽이란 무엇이고 무엇이 정하나

메모리 트래픽은 추론 한 번에 메모리와 연산기 사이를 오가는 바이트의 총합이다. 한 레이어 기준으로 세 항으로 나뉜다. 가중치 읽기, 입력 활성값 읽기, 출력 활성값 쓰기다.

MobileNet-v2(FP32, batch 1)를 다 세면 전체 66.18 MB다. 그중 가중치가 13.24 MB(20%), 활성값이 52.94 MB(80%)다. 활성값이 가중치의 4배다. 곱셈 300 M번에 파라미터 3.4 M개인 가벼운 모델이 메모리에서는 66 MB를 옮긴다.

무엇이 트래픽을 정하나. 가중치 항은 채널 수와 커널 크기, 곧 모델 구조가 정한다. 활성값 항은 거기에 더해 입력 해상도와 batch가 정한다. 활성값이 트래픽의 대부분이고, 그 활성값은 모델 앞쪽 고해상도 레이어에서 나온다. 초기 두 해상도 밴드(112×112, 56×56)만으로 활성값 30.62 MB가 발생한다. 트래픽을 정하는 것은 파라미터 수가 아니라 해상도·채널·batch, 그리고 재사용 정도다.

광고 · Advertisements

06.2 inverted residual에서 왜 트래픽이 느나

inverted residual 블록은 expand·depthwise·project 세 단계다. expand가 채널을 t배(보통 6배)로 부풀린다. depthwise는 채널을 못 줄이므로 그 넓은 텐서를 통째로 읽고 쓴다. 그 결과 활성값 트래픽이 t에 거의 비례해 커진다.

블록 A 모양에서 확장한 경로(t=6)와 안 한 경로(t=1)를 맞대면, depthwise가 다루는 텐서가 정확히 6배(=t)이고 블록 전체 활성값 트래픽이 4.67배다. 블록 전체 비가 6배가 아닌 까닭은 t와 무관한 skip add의 고정 트래픽이 비율을 희석하기 때문이다. 확장이 트래픽 증가의 원인이고, 그 양은 확장계수 t로 조절된다. 확장은 정확도를 위한 설계이고, 트래픽이 그 대가다.

06.3 파라미터 수와 트래픽은 왜 별개인가

파라미터 수는 정적인 모델 크기다. 트래픽은 동적인 추론 비용이다. 파라미터는 트래픽의 가중치 항 하나에만 영향을 주고, 그 항은 보통 작다. 트래픽의 대부분인 활성값은 파라미터와 무관하게 해상도와 batch가 정한다.

그래서 순위가 뒤집힌다. 파라미터 1,296개인 초기 depthwise가, 파라미터 153,600개인 후기 project보다 트래픽이 크다. 분모를 분명히 하면, 활성값끼리 비교 시 약 16배, 레이어 전체 트래픽으로는 약 4배다. 둘 다 파라미터 적은 쪽이 더 크다는 결론은 같다. 또 batch를 1에서 16으로 키우면, 파라미터와 가중치 트래픽은 한 글자도 안 변하는데 활성값은 16배가 된다. "파라미터가 적으니 메모리도 적다"는 모델 저장 크기에서만 맞고, 추론 트래픽에서는 틀리다.

06.4 정리표

지금까지의 핵심 수치를 한 표에 모은다. 모두 FP32, batch 1, MobileNet-v2(width 1.0, 224×224) 기준이다.

주제 핵심 수치
전체 트래픽 66.18 MB = 가중치 13.24 + 활성값 52.94 활성값이 80%, 가중치가 20%
활성값 발원지 초기 두 밴드(112·56)에서 30.62 MB 앞쪽 고해상도 레이어가 트래픽의 발원지
블록 A (앞·24ch@56²) 활성값 99.6%, 가중치 0.4% 고해상도는 활성값 지배
블록 B (뒤·160ch@7²) 가중치 59%, 활성값 41% 저해상도·넓은 채널은 가중치 지배
확장 효과 블록 활성값 4.67배, depthwise 입력텐서 6.0배(=t) expand가 트래픽을 키운다
파라미터 역전 1,296개 레이어 트래픽 > 153,600개 레이어 파라미터 ≠ 트래픽
batch 스케일링 N배는 활성값만, 가중치는 불변 트래픽은 동적, 파라미터는 정적
INT8 트래픽 ÷4, 연산강도 ×4 (4.3 → 17.3) 바이트를 줄여 연산강도를 올린다
depthwise 연산강도 1.0~1.1 MAC/byte 재사용 없어 바닥, memory-bound

06.5 실무 takeaway

이 책에서 가져갈 다섯 가지다.

  1. 모델이 느린지 빠른지는 곱셈 수만으로 못 정한다. 연산강도를 보고 roofline 위 위치를 봐야 한다. MobileNet-v2는 곱셈이 적어도 memory-bound다.
  2. 활성값 트래픽이 보통 가중치보다 크다. 특히 앞쪽 고해상도 레이어에서 그렇다. 입력 해상도와 batch가 트래픽을 좌우한다.
  3. 파라미터 수로 메모리 비용을 추정하지 마라. 저장 크기와 추론 트래픽은 다른 양이다. batch나 해상도를 키우면 파라미터 그대로 트래픽만 는다.
  4. memory-bound 모델에는 바이트를 줄이는 수가 직접 듣는다. INT8 양자화는 트래픽을 4분의 1로, 연산강도를 4배로 만든다.
  5. 컴파일러의 fusion·tiling이 외부 트래픽을 줄인다. 다만 가중치는 안 줄고 활성값 지배·depthwise 바닥이라는 구조는 그대로다. 정확한 값은 프로파일러로 재야 한다.

출처

  • M. Sandler, A. Howard, M. Zhu, A. Zhmoginov, L.-C. Chen (2018), MobileNetV2: Inverted Residuals and Linear Bottlenecks, CVPR 2018, pp. 4510–4520. arXiv:1801.04381. — inverted residual 블록(Table 1), 단계 스펙(Table 2), 블록 MAdds 공식, 총 ~300 M MAdds·~3.4 M 파라미터.
  • A. Howard et al. (2017), MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, arXiv:1704.04861. — depthwise separable 합성곱 비용 공식과 절감비(3×3에서 8~9배).
  • S. Williams, A. Waterman, D. Patterson (2009), Roofline: An Insightful Visual Performance Model for Multicore Architectures, Communications of the ACM 52(4):65–76. — 메모리 트래픽 Q, 연산강도 I=W/Q, P=min(π, β·I), 변곡점 I=π/β, compute/memory-bound 경계.
  • Stanford CS231n, Convolutional Neural Networks. — 활성값은 초기 레이어에 집중, 파라미터는 후반 전결합층에 집중.
  • J. Lin, W.-M. Chen, Y. Lin, J. Gan, S. Han (2021), MCUNetV2: Memory-Efficient Patch-based Inference for Tiny Deep Learning, NeurIPS 2021. arXiv:2110.15352. — 메모리 병목이 초기 고해상도 단계에 위치.
  • V. Sze, Y.-H. Chen, T.-J. Yang, J. Emer (2017), Efficient Processing of Deep Neural Networks: A Tutorial and Survey, Proceedings of the IEEE. — 가중치·활성값 데이터 이동의 에너지 비용, 메모리 접근이 연산보다 비쌈.
광고 · Advertisements
이 시리즈 전체 챕터

학습경로 의존맵 보기 →