개요

이 글은 Qualcomm의 심규홍 박사님이 발표해주신 자료를 토대로 작성한다.
대상: 트랜스포머를 이해하고 있는 개발자들을 위한 세미나

Motivation

트랜스포머 애플리케이션은 서버 베이스 모델에서는 활발하게 사용되고 있다. 이제 모바일 베이스로 들어갈려고 한다. 트랜스포머는 scaling-law를 따른다. 더 크고, 더 많이 쌓을수록 더 좋은 성능이 나온다. 따라서 돈을 들이면 성능이 보장된다. 그 예시가 LLM이다. 그러나 Efficiecy 관점에서 충분히 고민을 해봐야할 문제가 많다. RAM 사이즈, NPU 퍼포먼스, Cache 사이즈 등 고려해야 할 사항이 많다. On-device LLM에 대한 사이즈가 어느정도 적절할까?

Efficiency의 의미?

  • Parameter-efficient, Computation-efficient를 의미한다. 트랜스포머는 이 둘의 관계가 비례한다.
  • Parameter sharing, MoE, Early-exit, Hyper-Net 등은 Computation과 Parameter 관점에서 서로 다른 방향을 가진다.

Efficient를 높이는 방법

  • 더 좋은 하드웨어
  • 더 좋은 추론 커널
  • 더 좋은 경량화 기법
  • 더 좋은 모델 아키텍처

Mobile LLM

  • SwiGLU
    기존 트랜스포머의 Feed-Forward 구조를 대체하는 연산
    퍼포먼스가 가장 좋다. 다양한 LLM에서 FF 대신에 SwiGLU를 사용한다.

  • Deep and Thin
    Deeper: 모델의 표현력를 제어한다
    Wider: representation space의 복잡도를 제어한다.
    Depth가 너무 깊어지면 훈련이 잘 안되는 것이 사실이었지만, 지금은 기법이 좋아져서 100~200 레이어도 훈련이 잘 되는 편이다.

  • Embedding Sharing
    언어 모델의 임베딩 매트릭스는 각 토큰이 어떻게 표현되는지의 weight이다. 따라서 임베딩 레이어와 마지막 Projection 레이어의 weight matrix를 공유한다. 임베딩 레이어 사이즈가 크다. GPT-2는 전체 모델의 31.02% 파라미터를 차지한다.

  • Group Query Attention
    일반적인 트랜스포머는 K, Q의 수가 똑같다. 그런데 GQA는 V, K는 줄인다. 반면 Multi-Query는 V, K를 1개만 쓴다.

  • Layer Sharing x 2
    Block, Layer, Modyle을 여러 번 반복한다. 그런데 연산량이 많아지는데 괜찮은가? 트랜스포머는 메모리에서 병목이 걸린다. 만약 모든 파라미터가 대충 DRAM에 들어가 있다면, 걱정거리를 덜 수 있다. 또한 한 층, 한 층을 캐시 메모리에 저장할 수 있다면, 그 다음 블럭을 계산하는 것은 매우 빠르다. 실험을 통해 실행 시간이 Layer-Sharing에 비례함을 알 수 있다.

  • But Layer Sharing is Not a New Technique
    ALBERT에서 이미 이러한 기법을 사용하였다. 충분한 반복을 고려하면, Universal Transformer 역할을 기대할 수 있다. 왜 보편적인 구조가 안되었는지는 모르겠지만, 하드웨어 관점에서 매우 유용한 방법이다. 발표자의 생각에 따르면 모든 인코더를 캐시에 올릴 수 있다면 베스트이다.

The Unreasonable Ineffectiveness of the Deeper Layers

Measuring similarity between adjacent layers

  • 더 깊은 레이어는 높은 유사성을 보인다. 이는 특성 표현이 크게 변하지 않음을 의미한다.
  • 간단한 아이디어: 반복적으로 층의 시퀀스를 제거한다.
  • (선택) LoRA 파인튜닝으로 프루닝 후 손실을 복구한다.

Mixture-of-Depths: Dynamic Compute Allocation

  • 토큰을 계산할 때, 각 층마다 라우팅을 하여 연산 여부를 결정
  • SA마다 KV 캐시에서 토큰을 유지할지 말지를 결정할 수 있음을 암시

레퍼런스

  • ALBERT: A Lite BERT for Self-Supervised Learning of Language Representations
  • Universal Transformers
  • Sparse Universal Transformer
  • Depth-Adaptive Transformer
  • Lessons on Parameter Sharing Across Layers in Transformers
  • Dynamic Layers Tying for Parameter-Efficient Transformers
  • Distill-Whisper: Robust Knowledge Distillation via Large-Scale Pseudo Labeling
  • One Wide Feedforward is All You Need
  • White-Box Transformers via Sparse Rate Reduction
  • LaCo: Large Language Model Pruning via Layer Collapse
  • ShortGPT: Layer in Large Language Models are more Redundant than You Expect