YouTubeStanford Online·2026년 11월 5일·0

Stanford CME295 Transformers & LLMs

Quick Summary

LLM 시스템의 핵심은 모델과 학습·추론 상태를 GPU 메모리에 수용하고, 메모리 이동과 장치 간 통신 및 순차 생성의 병목을 줄이는 것이다.

영상 보기

클릭 전까지는 가벼운 미리보기만 먼저 불러옵니다.

원본 열기

🖼️ 인포그래픽

Stanford CME295 Transformers & LLMs 내용을 설명하는 본문 이미지

🖼️ 4컷 인포그래픽

Stanford CME295 Transformers & LLMs의 핵심 내용을 4단계로 요약한 인포그래픽
Stanford CME295 Transformers & LLMs 핵심 내용을 4단계로 압축한 4컷 인포그래픽

💡 한 줄 결론

LLM 시스템의 핵심은 모델과 학습·추론 상태를 GPU 메모리에 수용하고, 메모리 이동과 장치 간 통신 및 순차 생성의 병목을 줄이는 것이다.

📌 핵심 요점

  1. 연산 성능만으로 실행 가능성과 속도를 판단할 수 없다. 1,000억 매개변수를 FP16으로 저장하면 가중치만 200GB가 필요해 H200의 141GB를 넘는다. 학습에는 활성값·기울기·옵티마이저 상태도 필요하므로 연산 처리량, 메모리 용량, 대역폭을 함께 평가해야 한다.
  2. FlashAttention은 메모리 접근을 줄여 정확한 어텐션을 빠르게 계산한다. 작은 Q·K·V 조각을 SRAM으로 가져와 분자와 분모를 누적하고, 누적 최댓값으로 수치 안정성을 유지한다. 전체 N×N 중간 행렬의 저장을 피하며, 학습에서는 역전파 중 재계산으로 저장·읽기 비용도 줄인다.
  3. 분산 학습은 저장 상태와 계산을 어떻게 나눌지 결정하는 문제다. ZeRO는 파라미터·기울기·옵티마이저 상태의 중복 저장을 줄인다. 데이터·텐서·파이프라인·컨텍스트·전문가 병렬화는 조합할 수 있지만, 통신 비용과 GPU 유휴 시간이 늘어날 수 있다.
  4. 추론은 프리필과 디코딩의 병목을 구분해야 한다. 입력을 병렬 처리하는 프리필과 달리 디코딩은 토큰을 순차 생성하며 메모리 대역폭의 영향을 크게 받는다. TTFT는 첫 토큰까지의 시간, TPOT는 출력 토큰당 시간이며, 전체 완료 시간은 출력 길이에도 좌우된다.
  5. 캐시 관리와 생성 가속은 서로 다른 제약을 해결한다. PagedAttention은 KV 캐시를 블록으로 관리해 메모리 낭비를 줄이고, GQA·MLA는 저장할 K·V 표현을 줄인다. 추측 디코딩은 초안 생성과 병렬 검증을 결합하며, 적절한 수락·잔여 분포 샘플링으로 목표 모델의 출력 분포를 보존한다.

🧩 배경과 문제 정의

  • LLM은 트랜스포머 디코더를 수십억~수조 개 매개변수 규모로 확장하고, 수조~수십조 토큰으로 사전학습한다. 이를 실제로 학습하고 서비스하려면 대규모 연산과 저장을 감당하는 인프라가 필요하다.
  • 디코더의 주요 연산은 행렬곱이므로 병렬 연산에 강한 GPU가 적합하지만, GPU의 메모리 용량과 데이터 전송 속도에는 한계가 있다.
  • 핵심 과제는 모델과 학습에 필요한 데이터를 하드웨어에 수용하고, 학습과 추론을 빠르게 수행하는 것이다. FlashAttention은 어텐션 계산을 근사하지 않고 연산 방식과 메모리 접근을 바꾸어 효율을 높인다.

🕒 시간순 섹션별 상세정리

1. LLM의 규모가 학습·서빙 인프라를 요구한다

  • LLM은 문제를 텍스트 입력과 텍스트 출력으로 표현하며, 트랜스포머의 디코더를 수십억~수조 개 매개변수 규모로 확장한다 [01:12]
  • 사전학습에는 수조~수십조 토큰이 사용된다. 거대한 모델과 학습 데이터를 처리하려면 학습과 서빙을 뒷받침할 하드웨어와 인프라가 필요하다 [01:47]

2. 행렬곱의 병렬성이 GPU 활용의 근거가 된다

  • 디코더의 주요 구성 요소인 마스킹된 멀티헤드 어텐션과 피드포워드 신경망은 다수의 행렬곱으로 이루어진다 [02:32]
  • 행렬곱 결과의 각 원소는 해당 행과 열의 내적으로 독립적으로 계산할 수 있다. GPU는 많은 코어와 특화 하드웨어를 통해 이러한 계산을 병렬로 수행한다 [04:02]

3. 총연산량과 초당 연산 성능을 구분해야 한다

  • 부동소수점 연산 횟수인 FLOPs는 필요한 계산의 총량과 연산 예산을 나타낸다 [04:40]
  • FLOP/s 또는 대문자 S를 쓰는 FLOPS는 초당 부동소수점 연산 횟수로, 하드웨어가 얼마나 빠르게 계산하는지를 나타낸다 [05:03]

4. GPU 성능은 연산 속도·메모리 용량·전송 속도로 평가한다

  • Nvidia H200의 사양에는 테라플롭스 단위의 연산 성능과 메모리 용량이 포함된다. 메모리는 중간 계산 결과와 모델 갱신에 필요한 데이터를 저장하는 데 쓰인다 [05:56]
  • 데이터 전송 속도도 별도의 핵심 사양이며, 제시된 GPU에서는 초당 테라바이트 규모다 [06:12]

5. 대형 모델은 매개변수만으로도 단일 GPU 메모리를 초과한다

  • H200의 메모리는 141GB다. 매개변수 1,000억 개를 매개변수당 2바이트인 FP16으로 저장한다고 가정하면, 가중치만으로 200GB가 필요해 이 용량을 초과한다 [07:47]
  • 학습에는 가중치 외에도 활성값, 기울기, 옵티마이저 상태를 저장해야 하므로 추가 메모리가 필요하다 [08:20]

6. 메모리 수용과 실행 속도가 시스템 최적화의 두 목표다

  • 학습에서는 많은 토큰을 처리해야 하고, 추론에서는 많은 요청을 서비스해야 한다. 따라서 모델을 하드웨어에 수용하는 문제와 실행을 빠르게 만드는 문제를 함께 해결해야 한다 [09:06]
  • FlashAttention은 단일 GPU에서 어텐션 연산을 효율화하는 방법이다. 계산을 근사하는 대신 수행 방식을 바꾸는 정확한 방법이다 [09:50]

7. 어텐션 점수 행렬은 시퀀스 길이의 제곱으로 커진다

  • 디코더의 각 토큰은 자신과 앞선 토큰에 어텐션을 적용한다. 이때 쿼리와 키의 내적을 계산하는 QKᵀ가 큰 중간 행렬을 만든다 [10:46]
  • 시퀀스 길이가 1,000이면 점수 행렬에는 100만 개 원소가 생긴다. 시퀀스가 길어질수록 이 행렬을 저장하는 부담이 커진다 [11:19]

8. HBM과 SRAM의 용량·속도 차이가 계산 전략을 결정한다

  • HBM은 큰 중간 결과를 저장할 공간을 제공하지만 SRAM보다 느리다. 전송 속도는 대략 HBM이 초당 1TB 안팎, SRAM이 초당 수십 TB 수준으로 드러난다 [12:56]
  • SRAM은 빠르지만 용량이 작아 거대한 어텐션 행렬을 저장하기 어렵다. H200의 141GB는 HBM 용량이며, SRAM 용량은 수백 MB 수준으로 추정된다 [13:59]

9. 일반적인 softmax 계산은 HBM 접근을 반복한다

  • Softmax의 한 원소를 계산하려면 해당 원소의 지수값을 행 전체의 지수값 합으로 나눠야 한다. 따라서 단순한 계산 방식에서는 행 전체를 처리해야 한다 [15:33]
  • 일반적인 어텐션 구현은 QKᵀ 결과를 HBM에 쓰고, 이를 다시 읽어 softmax를 계산한 뒤 결과를 HBM에 저장한다. 이후 그 결과를 다시 불러와 값 행렬 V와 곱하므로 중간 결과의 읽기와 쓰기가 반복된다 [16:28]

10. 필요한 최종 결과는 softmax 점수로 가중한 값의 합이다

  • FlashAttention의 출발점은 행 전체를 한꺼번에 처리하는 대신, 어텐션 결과를 반복적으로 계산할 수 있는지에 있다 [17:13]
  • 한 쿼리와 각 키의 내적으로 얻은 점수를 S라고 하면 필요한 결과는 softmax(S)·V다. 이는 각 값에 정규화된 어텐션 점수를 곱해 더한 가중합이다 [21:01]

11. 분자와 분모를 누적하면 연산을 융합할 수 있다

  • 가중합을 하나의 분수로 정리하면 분자는 Σ exp(sᵢ)vᵢ, 분모는 Σ exp(sⱼ)가 된다. 두 합은 원소를 순서대로 처리하면서 각각 누적할 수 있다 [22:00]
  • 이 형태를 이용하면 점수 행렬 계산, softmax, V와의 곱을 별도 단계로 처리하는 대신 연산을 융합할 수 있다 [22:30]

12. 세 원소 예제로 누적 계산의 갱신 규칙을 확인한다

  • 점수 세 개는 하나의 쿼리와 세 키의 내적에 해당한다. 첫 원소에서는 분자를 N₁ = exp(s₁)v₁, 분모를 D₁ = exp(s₁)로 초기화한다 [25:31]
  • 이후 새 원소마다 기존 분자에 exp(sₜ₊₁)vₜ₊₁을, 기존 분모에 exp(sₜ₊₁)을 더한다. 세 원소를 모두 처리한 뒤 N₃/D₃를 계산하면 원하는 가중합을 얻는다 [26:42]

13. 지수값의 수치 불안정성은 공통 배율로 제어한다

  • 지수함수의 출력은 매우 커질 수 있어, 단순 누적 계산은 실제 구현에서 수치 불안정성을 일으킬 수 있다. 합산에 사용하는 수의 크기를 제어해야 한다 [27:48]
  • 분자와 분모에 같은 상수를 곱해도 비율은 변하지 않는다. 이 성질을 이용해 결과를 유지하면서 지나치게 큰 중간값을 피할 상수를 선택할 수 있다 [28:38]

14. 지금까지의 최대 점수를 이용해 지수값을 조정한다

  • 분자와 분모에 곱할 상수로, 현재 처리 위치까지 등장한 점수의 최댓값에 음수를 취한 뒤 지수함수를 적용한 값을 사용할 수 있다. 목적은 계산 중 다루는 값이 지나치게 커지는 것을 막는 것이다 [29:28]
  • 이 상수 자체가 0이 되는 수치 문제도 제기된다. 상수를 직접 계산하는 대신, 지수함수끼리 곱하면 지수가 더해지는 성질을 이용한다 [29:59]

15. 누적 최댓값을 이용한 지수 계산의 안정화

  • 지금까지 확인한 원소의 최댓값을 변수 M에 저장한다. 첫 원소를 처리할 때는 M₁=S₁이며, 분자와 분모에 같은 배율 exp(−M₁)을 적용해 비율을 유지한다 [31:19]
  • exp(S₁)을 먼저 계산하고 배율을 곱하는 대신, S₁−M₁을 먼저 구한 뒤 지수함수를 적용한다. 큰 지수값을 중간 결과로 만들지 않는 계산 순서다 [31:46]

16. 새로운 최댓값에 맞춘 기존 누적값의 재조정

  • 두 번째 원소를 처리할 때는 S₁과 S₂ 중 큰 값으로 최댓값을 갱신한다 [32:09]
  • 새 원소에 새로운 배율을 적용하는 동시에, 이미 누적한 분자와 분모도 같은 기준으로 재조정해야 한다 [32:30]

17. 매우 작은 지수값과 오버플로의 차이

  • 새로운 최댓값이 훨씬 크면 exp(M₁−M₂)가 매우 작아진다. 이는 새 항의 기여가 기존 항보다 압도적으로 크다는 관계를 반영한다 [33:24]
  • 표현할 수 없을 만큼 작은 기여를 0으로 취급하는 것보다, 합에 크게 기여하는 값을 너무 커서 표현하지 못하는 문제가 더 심각하다 [34:11]

18. 배율의 비율로 기존 합을 보정하는 원리

  • 기존 누적값에 C₁을 적용하고 새 항에 C₂를 적용한 채 더하면, 전체 분자와 분모에 동일한 상수가 곱해진 형태가 되지 않는다. 전체 합의 배율을 C₂로 통일해야 원래 비율을 유지할 수 있다 [36:17]
  • 기존 누적값에 C₂/C₁을 곱하면 배율을 통일할 수 있다. C₁=exp(−M₁), C₂=exp(−M₂)이므로 보정 계수는 exp(M₁−M₂)가 된다 [37:21]

19. SRAM에서 어텐션을 누적해 거대한 중간 행렬 제거

  • 쿼리와 키의 내적으로 점수를 구하고, 작은 Q·K·V 조각을 빠른 SRAM으로 옮겨 해당 쿼리의 가중합에 필요한 분자와 분모를 누적한다 [39:02]
  • 나머지 키와 값도 작은 조각으로 가져와 누적값을 갱신하면, 전체 N×N 소프트맥스 행렬을 저장하지 않고 출력값을 계산할 수 있다 [40:18]

20. 역전파 재계산으로 저장과 접근 비용 절감

  • 역전파에는 순전파에서 계산한 중간값이 필요하다. 이를 HBM에 저장했다가 다시 읽는 대신, SRAM을 활용하는 융합 연산으로 역전파 중 재계산할 수 있다 [43:01]
  • 중간 결과가 크고 저장 위치에 접근하는 비용이 높으면, 결과를 버렸다가 다시 계산하는 편이 실행 시간을 줄일 수 있다 [43:45]

21. 근사 없이 유지되는 어텐션 계산

  • FlashAttention은 원래 소프트맥스를 근사하는 방법이 아니다. 누적한 분자와 분모를 나누면 일반적인 계산식과 동일한 결과를 얻는 정확한 계산 방식이다 [44:56]
  • 속도 개선은 계산 대상을 GPU 내부 구성요소에 배치하고 전달하는 방식을 바꿔, 메모리별 읽기·쓰기 속도 차이를 활용한 결과다 [45:42]

22. 순전파의 융합 연산과 학습용 재계산의 적용 범위

  • 연산을 결합해 중간값 저장을 줄이는 방법과, 저장하지 않은 값을 다시 계산하는 방법이 실행 시간 단축의 핵심이다 [46:33]
  • 역전파용 재계산은 그래디언트가 필요한 학습에 해당한다. SRAM에서 어텐션을 계산하는 첫 번째 방법은 순전파에도 적용할 수 있다 [47:04]

23. GPU 세대별 특성을 반영한 후속 최적화

  • Q와 K로 만드는 점수 행렬은 N×N 크기이므로 매우 커질 수 있다. 이 중간 행렬을 저장하지 않는 것이 최적화의 중요한 대상이다 [48:27]
  • FlashAttention 후속 버전들은 Hopper와 Blackwell처럼 GPU 계열마다 다른 특성을 고려해 추가로 최적화한다 [49:08]

24. FlashAttention 이후에도 남는 단일 GPU의 한계

  • N×N 어텐션 행렬을 저장하지 않아 메모리 부담을 줄이고, SRAM보다 느린 HBM의 읽기·쓰기를 줄여 실행 속도를 높인다 [50:11]
  • 이러한 최적화를 적용해도 모델이 너무 크면 단일 GPU의 메모리가 부족할 수 있다. 더 큰 모델을 학습하려면 여러 GPU를 활용하는 방법이 필요하다 [50:56]

25. 학습 메모리를 차지하는 네 가지 요소

  • 모델 파라미터 자체를 저장해야 하며, 순전파에서 생성되는 활성값도 공간을 차지한다. 활성값 저장량은 모델 크기뿐 아니라 시퀀스 길이와 배치 크기의 영향을 받는다 [52:09]
  • 각 토큰에 해당하는 활성값을 계산하고 저장해야 하므로 시퀀스가 길어질수록 활성값 메모리가 늘어난다. 배치 크기가 커져도 저장해야 할 양이 증가한다 [52:46]

26. 데이터를 나눠 처리하는 데이터 병렬화

  • 데이터 병렬화는 데이터를 여러 장치에 나눠 각 장치에서 순전파와 역전파를 수행하는 방식이다 [54:34]
  • 단순하게 구현하면 모든 장치에 모델 파라미터, 그래디언트, 옵티마이저 상태를 각각 복제하므로 같은 정보를 중복 저장하게 된다 [55:07]

27. ZeRO의 상태 분할과 통신 비용

  • ZeRO는 Zero Redundancy Optimizer의 약자로, 옵티마이저 상태와 그래디언트, 파라미터를 여러 GPU에 분할해 중복 저장을 줄인다 [55:36]
  • 장치에 필요한 파라미터가 없으면 다른 장치에서 받아와야 한다. 장치별 메모리 사용량을 줄이는 대신 통신 비용이 추가된다 [56:14]

28. 모델 병렬화와 상태 분할을 구분하는 계산 위치

  • 모델 병렬화는 데이터 차원을 나누는 데서 더 나아가, 모델 계산의 일부를 한 장치에서 수행하고 다른 부분을 다른 장치에서 수행하도록 분산한다 [57:20]
  • 상태를 분할한 데이터 병렬화에서는 각 장치가 자신에게 배정된 데이터에 대해 모델 전체 계산을 수행한다. 필요한 파라미터가 없으면 다른 장치에서 받아와 같은 장치에서 계산한다 [58:29]

29. 텐서 병렬화로 장치별 연산을 분할한다

  • 필요한 계산을 한 장치에 담을 수 없다면 학습 자체가 불가능하다. 분산 처리에 따른 속도 저하를 감수하더라도 학습을 실행할 수 있게 만드는 것이 우선이다 [1:00:17]
  • 텐서 병렬화는 행렬 연산을 여러 장치에 나눈다. 셀프 어텐션에서는 서로 독립적인 헤드 계산과 투영을 장치별로 수행한 뒤 결과를 결합할 수 있다 [1:01:05]

30. 파이프라인 병렬화는 계층을 나누지만 유휴 시간을 만든다

  • 파이프라인 병렬화는 모델의 연속된 구성 요소나 계층을 서로 다른 장치에 배치한다. 각 장치는 자신이 맡은 계산을 수행하고 다음 장치로 결과를 전달한다 [1:02:42]
  • 순전파 결과를 다음 장치로 보내더라도 역전파에 필요한 활성값은 보관해야 한다. 해당 단계의 기울기 계산에 이 활성값이 필요하다 [1:03:11]

31. 컨텍스트 병렬화는 쿼리를 나누고 K·V를 교환한다

  • 긴 시퀀스에서는 모든 토큰에 대한 쿼리·키·값 계산과 어텐션 연산의 부담이 커진다. 컨텍스트 병렬화는 장치별로 쿼리 그룹을 맡기고 키와 값을 장치 사이에서 이동시킨다 [1:04:52]
  • 두 장치의 예에서는 각 장치가 자신의 쿼리와 로컬 K·V로 계산한 뒤 K·V를 상대 장치에 전달해 계산을 이어간다. 같은 방식을 더 많은 토큰 그룹과 이웃 장치로 확장할 수 있다 [1:06:07]

32. 전문가 병렬화는 토큰을 담당 전문가가 있는 장치로 보낸다

  • 전문가를 사용하는 모델은 순전파마다 모든 파라미터를 사용하지 않고, 토큰에 배정된 피드포워드 전문가에서 계산을 수행한다 [1:06:57]
  • 전문가를 여러 장치에 나누어 배치하면 셀프 어텐션 이후 각 토큰을 담당 전문가가 있는 장치로 전송할 수 있다. 전문가 계산을 마친 토큰은 원래 장치로 돌아온다 [1:07:44]

33. 다섯 병렬화 방식의 조합에는 활용률과 통신 비용이 따른다

  • 데이터·텐서·파이프라인·컨텍스트·전문가 병렬화는 서로 조합할 수 있다. 데이터 분할과 모델 계산 분할을 함께 활용해 여러 GPU에 작업을 배분한다 [1:08:37]
  • 병렬화를 최대한 늘리는 것이 항상 유리하지는 않다. GPU가 충분히 활용되지 않으면 시간당 임대 비용의 효율이 낮아지고, 파라미터 등을 장치 사이에서 전달하는 통신 비용도 발생한다 [1:09:20]

34. 긴 입력보다 긴 출력이 추론 시간을 크게 늘릴 수 있다

  • 입력 10토큰·출력 1만 토큰인 요청과 입력 1만 토큰·출력 10토큰인 요청을 비교하면 후자가 더 빠르다. 입력은 처음에 병렬로 처리할 수 있지만 출력은 자기회귀 방식으로 한 토큰씩 생성해야 하기 때문이다 [1:11:03]
  • 요청 지연에는 대기 시간인 TQ도 포함된다. 여러 사용자의 요청을 묶는 배칭 전략은 사용자가 경험하는 지연에 영향을 준다 [1:11:45]

35. TTFT와 TPOT는 인프라 성능을 구분해 보여준다

  • TTFT는 첫 토큰까지의 시간, TPOT는 출력 토큰당 시간, TTLT는 마지막 토큰까지의 시간이다. TTFT와 TPOT를 관찰하면 대기열·프리필 처리와 출력 생성 속도가 적절한지 평가할 수 있다 [1:13:15]
  • TTLT는 모델의 추론 과정과 요청된 출력 길이에도 영향을 받는다. 긴 추론이나 긴 이야기 생성으로 TTLT가 늘었다고 해서 시스템 성능이 나쁘다고 단정할 수는 없다 [1:13:58]

36. 출력 가격과 지연·비용 상한을 함께 고려한다

  • 제시된 가격 사례에서는 출력 토큰 가격이 입력 토큰 가격의 약 5배다. 이 비율은 관찰된 가격 관계이며, 반드시 5배여야 한다는 법칙은 없다 [1:15:28]
  • 빠르고 저렴한 시스템이라는 목표는 정량적 제약으로 구체화할 수 있다. TTFT와 TPOT가 각각 정해진 상한 안에 들어오도록 하고, 비용에도 별도의 상한을 둘 수 있다 [1:16:23]

37. 연산 처리량·메모리 대역폭·산술 집약도로 병목을 판단한다

  • 연산 처리량은 초당 수행할 수 있는 연산량이며, 하드웨어 사양의 테라플롭스 수치로 확인할 수 있다. 데이터 타입에 따라 처리량이 달라지고, 더 가벼운 수치 표현은 초당 더 많은 연산을 가능하게 한다 [1:17:03]
  • 메모리 대역폭은 계산에 필요한 데이터를 HBM에서 SRAM으로 얼마나 빠르게 옮길 수 있는지를 제한한다. 산술 집약도는 이동한 메모리 양에 대한 수행 연산량의 비율이다 [1:17:41]

38. GPU 메모리 계층은 용량과 칩 면적의 절충을 요구한다

  • 제시된 규모는 HBM 약 100GB, SRAM 약 100MB, 메모리 대역폭 초당 테라바이트 수준이다. 연산 성능은 수천 테라플롭스 규모지만 데이터 타입에 크게 의존하므로 조건 없이 일반화할 수 없다 [1:19:20]
  • SRAM은 칩에서 차지하는 면적이 커 용량을 늘리는 데 제약이 있다. 큰 SRAM과 강력한 연산 유닛을 모두 최대한 확보하려는 설계에는 물리적 절충이 필요하다 [1:20:25]

39. 루프라인 모델은 디코딩과 프리필의 병목 차이를 설명한다

  • 루프라인 모델은 산술 집약도에 따라 달성 가능한 연산 처리량의 상한을 나타낸다. 꺾이는 지점인 릿지 포인트는 메모리 대역폭 제한과 연산 처리량 제한이 만나는 경계다 [1:21:29]
  • 디코딩은 모델 가중치를 불러와 한 번에 토큰 하나를 예측하므로 메모리 이동량에 비해 계산량이 적다. 따라서 메모리 대역폭이 병목인 영역에 놓인다 [1:21:58]

40. KV 캐시 재사용과 캐시 입력 요금은 구분해야 한다

  • 추론에서는 이전 토큰의 키와 값을 저장해 이후 토큰의 어텐션 계산에 재사용한다. KV 캐시는 이미 수행한 계산을 반복하지 않도록 한다 [1:23:20]
  • 제시된 가격 사례에서 캐시된 입력의 가격은 새 입력의 약 10분의 1이다. 기존 계산 결과를 재사용할 수 있어 처리 비용이 낮아진다 [1:23:44]

41. 최대 출력 길이만큼 미리 예약하면 KV 메모리가 낭비된다

  • 요청마다 허용된 최대 출력 길이를 기준으로 연속된 GPU 메모리 블록을 예약하는 방식은 구현할 수 있다. 그러나 실제 출력은 최대 길이보다 짧은 경우가 많다 [1:25:47]
  • 사용하지 않은 예약 공간이 다른 요청에도 배정되지 못하면 메모리가 남아 있어도 활용할 수 없다. 이런 할당을 대규모로 반복하면 사용되지 않으면서 재사용도 어려운 공간이 누적된다 [1:26:18]

42. PagedAttention은 블록 단위 할당으로 단편화를 줄인다

  • PagedAttention은 K·V를 하나의 연속된 공간에 배치하는 대신 크기 B의 블록에 저장한다. 요청별 메타데이터와 조회 테이블로 각 K·V를 어디에 저장하고 어디서 읽을지 관리한다 [1:26:55]
  • B가 너무 작으면 관리해야 할 메타데이터가 커지고, 너무 크면 미사용 공간이 늘어 기존의 단편화 문제가 반복된다. 실무적인 규모의 예로 B=16이 드러난다 [1:27:28]

43. GQA는 K·V 공유로 캐시 크기와 표현력 사이를 조정한다

  • MHA는 H개 헤드에 각각 쿼리·키·값 투영을 둔다. GQA는 쿼리 헤드를 유지하면서 K·V 투영을 G개로 줄여 여러 쿼리 헤드가 공유하게 하며, G=H이면 MHA와 같아진다 [1:29:00]
  • G=1이면 토큰당 하나의 키와 값을 공유하는 MQA가 된다. 메모리를 줄일 수 있지만 K·V의 표현력이 충분하지 않아 모델이 좋은 특징을 구성하는 데 불리할 수 있다 [1:29:19]

44. 어텐션 그룹 수는 표현력과 효율의 절충이다

  • 파라미터를 줄이면 모델의 표현력이 낮아질 수 있다. 사전학습 단계에서 그리드 탐색과 절제 실험으로 적절한 그룹 수 G를 결정해야 한다 [1:30:02]
  • G가 헤드 수 H에 너무 가까우면 성능 개선이 미미하다. G 선택에는 표현력과 효율 사이의 절충이 따른다 [1:30:24]

45. MLA는 키·값을 토큰당 하나의 작은 잠재 표현으로 압축한다

  • Multi-Latent Attention은 여러 키·값 벡터를 하나의 작은 표현으로 바꾼다. LoRA와 유사하게 행렬 연산을 작은 중간 표현을 거치는 형태로 분해하고, 학습한 디코더로 키·값 표현을 복원한다 [1:31:00]
  • 저장하는 것은 복원된 키·값이 아니라 공유 잠재 표현이다. 첫 투영 행렬을 모든 헤드와 키·값이 공유하므로, 토큰마다 여러 벡터 대신 하나의 표현을 저장할 수 있다 [1:31:44]

46. 추측 디코딩은 느린 생성과 저렴한 병렬 검증을 결합한다

  • 자기회귀 방식으로 새 토큰을 하나씩 생성하는 과정은 느리지만, 주어진 여러 토큰을 입력해 검증하는 과정은 병렬로 처리할 수 있다. 이 차이를 이용해 생성 비용을 낮춘다 [1:33:14]
  • 초안 모델이 다음 K개 토큰을 먼저 생성한다. 목표 모델은 프롬프트와 초안 토큰들을 함께 입력받아 검증한다 [1:33:52]

47. 수락 확률과 거절 후 재추출로 목표 분포에 맞춘다

  • 제안된 토큰에 목표 모델이 부여한 확률이 초안 모델의 확률보다 높으면 수락한다. 그렇지 않으면 두 확률의 비율에 따라 확률적으로 수락한다 [1:34:22]
  • 제안을 거절하면 잔여 분포에서 토큰을 다시 추출한다. 이 거절 샘플링 절차가 목표 모델의 토큰 확률분포를 재현하는지가 검증해야 할 핵심 성질이다 [1:34:44]

48. 수락 경로의 확률 질량은 두 분포의 최솟값이다

  • 최종 토큰을 나타내는 확률변수 X에 대해, 각 토큰 x의 출력 확률이 목표 분포와 같아야 한다. 전체확률법칙을 적용하면 출력 확률을 수락 경로와 거절 경로의 기여로 나눌 수 있다 [1:36:25]
  • 초안 분포를 D, 목표 분포를 T라고 하면, 초안 토큰 x의 수락 확률은 min(1, T(x)/D(x))다. 여기에 초안이 x를 제안할 확률 D(x)를 곱하면 수락 경로의 기여는 min(D(x), T(x))가 된다 [1:38:42]

49. 잔여 분포가 부족한 확률 질량을 채워 목표 분포를 복원한다

  • 전체 거절 확률은 1에서 전체 수락 확률을 뺀 값이다. 수락 확률의 합을 대입하고 목표 분포의 확률 합이 1이라는 성질을 이용하면, 거절 확률은 모든 토큰에 대한 max(T(x)−D(x), 0)의 합으로 압축된다 [100:22] [1:38:57]
  • 거절 후에는 max(T(x)−D(x), 0)을 전체 토큰에 대한 같은 값의 합으로 나눈 잔여 분포에서 추출한다. 거절 확률을 곱하면 정규화 항이 상쇄된다 [102:28] [1:39:12]

50. 검증은 다음 토큰도 제공하지만 거절 이후의 초안 계산은 낭비된다

  • 목표 모델이 입력된 초안 토큰들을 검증하는 계산에서 그다음 토큰도 얻을 수 있다. 검증 과정이 추가 토큰 생성에도 기여한다 [104:18] [1:40:50]
  • 초안 토큰이 거절되면 해당 지점에서 반복을 빠져나오며, 그 이후에 생성해 둔 초안 토큰들의 계산은 낭비된다. 따라서 초안 모델과 목표 모델의 분포를 가깝게 맞추는 것이 중요하다 [104:41] [1:41:52]

51. 지식 증류와 다중 토큰 예측으로 초안과 검증을 정렬한다

  • 지식 증류는 작은 초안 모델이 교사 모델의 예측을 맞추도록 학습시킨다. 다음 토큰의 분포를 배우게 하여 초안과 목표 모델의 분포를 정렬할 수 있다 [105:04] [1:42:54]
  • 다중 토큰 예측은 같은 LLM을 초안 생성과 검증에 모두 사용한다. 선형·소프트맥스 출력 헤드를 K개 학습해 초안 생성에 활용하고, 첫 번째 헤드를 검증기로 사용한다 [105:25] [1:43:55]

52. 메모리 수용량과 생성 속도는 서로 다른 최적화로 개선한다

  • Paged Attention은 데이터를 하드웨어 메모리에 수용하는 데 도움을 준다. 헤드 수를 줄이거나 더 작은 표현을 계산하는 방법도 저장 부담을 낮춘다 [105:54] [1:44:57]
  • 생성 속도를 높이는 방향은 한 번에 더 많은 토큰을 생성하는 것이다. 메모리에 맞추는 방법과 함께 적용해 LLM 추론의 주요 제약을 다룬다 [106:16] [1:45:38]

🧾 결론

  • 최적화의 출발점은 필요한 메모리를 확보하는 것이며, 그다음 실제 작업에서 계산·메모리 이동·통신 중 무엇이 실행 시간을 제한하는지 확인해야 한다.
  • 연산량을 줄이는 것만이 속도 개선 방법은 아니다. 중간값 저장을 피하고 필요할 때 재계산하면 연산이 늘어도 실행 시간이 줄어들 수 있다.
  • FlashAttention의 계산 방식 변경, 분산 학습의 작업 배분, KV 캐시 관리, 추측 디코딩은 적용 대상이 다르므로 작업 특성에 맞춰 결합해야 한다.
  • 정확성도 구분해서 평가해야 한다. FlashAttention은 어텐션을 근사하지 않으며, 추측 디코딩은 제시된 샘플링 절차로 목표 분포를 보존한다. GQA의 그룹 수는 표현력과 효율의 절충을 수반한다.

📈 투자·시사 포인트

  • GPU 인프라를 평가할 때는 최대 연산 성능과 함께 메모리 용량·대역폭·장치 간 통신·실제 활용률을 확인해야 한다. GPU 수를 늘려도 통신과 유휴 시간이 커지면 비용 효율이 낮아질 수 있다.
  • AI 서비스의 비용 경쟁력을 비교하려면 입력·출력 길이, 캐시 재사용 여부, TTFT·TPOT를 함께 봐야 한다. 같은 요청 수라도 출력이 길어지면 생성 시간과 비용 부담이 달라진다.
  • 메모리 관리와 실행 최적화 소프트웨어는 같은 하드웨어에서 처리 가능한 작업량과 실행 시간을 바꿀 수 있다. 하드웨어 사양과 소프트웨어 적용 수준을 함께 살펴볼 필요가 있다.
  • 제시된 출력·캐시 입력 가격 비율은 사례다. 이를 공급자 전반의 가격 구조나 수익성으로 일반화하려면 별도 근거가 필요하다.

⚠️ 불확실하거나 확인이 필요한 부분

  • HBM·SRAM의 용량과 대역폭, 연산 처리량은 장치와 데이터 타입에 따라 달라진다. 자료의 대략적인 수치를 모든 GPU에 적용하면 안 된다.
  • FlashAttention 비교에서 연산량을 75.2 GFLOPS와 66.6 GFLOPS로 표기한 부분은 확인이 필요하다. 자료 자체가 구분한 총연산량 FLOPs와 초당 처리량 FLOP/s 중 무엇을 뜻하는지 원래 비교 조건과 함께 점검해야 한다.
  • 출력 가격이 입력의 약 5배, 캐시 입력 가격이 새 입력의 약 10분의 1이라는 관계는 제시된 가격 사례에 한정된다.
  • 자막 기반 정리: 타임스탬프가 있는 자막을 기준으로 정리했으며, 고유명사·수치·인용은 원문 확인 필요 시 별도 검증한다.
  • 영상 속 주장: 발표자의 해석·전망·비교는 확인된 외부 사실이 아니라 영상 속 주장으로 분리해 읽는다.
  • 검증 필요: 수치, 기업 실적, 정책·시장 전망은 발행 전 최신 자료로 별도 검증이 필요하다.

✅ 액션 아이템

  • 대상 모델의 가중치·활성값·기울기·옵티마이저 상태를 나누어 메모리 예산을 계산하고, 시퀀스 길이와 배치 크기의 영향을 반영한다.
  • 대표 입력·출력 길이와 동시 요청 조건에서 TTFT·TPOT·전체 완료 시간·비용을 측정하고 각각의 허용 상한을 정한다.
  • FlashAttention과 KV 캐시 관리 방식의 적용 여부를 확인하고, 같은 작업 조건에서 메모리 사용량과 실행 시간을 비교한다.
  • 분산 학습에서는 병렬화 조합별 GPU 활용률·통신 시간·유휴 시간을 측정해 메모리 수용과 처리 속도를 함께 평가한다.

❓ 열린 질문

  • 실제 서비스의 입력·출력 길이와 동시 요청 분포에서는 연산 처리량, 메모리 대역폭, 대기열 중 어느 요소가 가장 큰 병목인가?
  • 모델과 장치 구성이 주어졌을 때 메모리 수용 조건을 만족하면서 통신 비용과 유휴 시간을 줄이는 병렬화 조합은 무엇인가?
  • GQA의 그룹 수나 MLA의 잠재 표현 크기를 바꿀 때 저장량 감소와 모델 품질 사이의 적절한 절충점은 어디인가?

관련 문서

공통 태그와 주제 흐름을 기준으로 같이 보면 좋은 문서를 이어서 제안합니다.