TPU에서의 LLM에 대한 시스템적 관점 (Part 0: Intro | Part 1: Rooflines)
LLM 훈련은 종종 연금술처럼 느껴지지만 모델의 성능을 이해하고 최적화하는 것이 꼭 그럴 필요는 없습니다. 이 책은 언어 모델 스케일링의 과학을 쉽게 설명하는 것을 목표로 합니다. 즉, TPU(및 GPU)의 작동 방식과 서로 통신하는 방법, 실제 하드웨어에서 LLM이 실행되는 방식, 그리고 대규모 환경에서 효율적으로 실행되도록 훈련 및 추론 중에 모델을 병렬화하는 방법을 다룹니다. 만약 여러분이 “이 LLM을 훈련하는 데 비용이 얼마나 들까?”, “이 모델을 직접 서비스하려면 메모리가 얼마나 필요할까?”, 또는 “AllGather란 무엇일까?”와 같은 질문을 해본 적이 있다면, 이 책이 여러분에게 유용하기를 바랍니다.
번역 안내: 원저자(Jacob Austin)의 허락을 받아 원문을 번역 중입니다.
해당 글의 1인칭은 원문 저자를 지칭합니다.
원문: How to Scale Your Model
번역: 신종훈
딥러닝의 많은 부분이 여전히 일종의 흑마법과 같지만, 모델 성능 최적화는, 심지어 매우 큰 규모에서도, 꼭 그럴 필요는 없습니다! 상대적으로 간단한 원칙들이 단일 가속기에서부터 수만 개에 이르기까지 모든 곳에 적용되며, 이를 이해하면 다음과 같은 많은 유용한 일들을 할 수 있습니다:
사전 지식: 독자가 LLM과 트랜스포머 아키텍처에 대한 기본적인 이해는 있지만, 대규모 환경에서의 작동 방식까지는 알지 못한다고 가정하겠습니다. LLM 훈련의 기초를 알고 있어야 하며, JAX에 대한 기본적인 지식이 있다면 이상적입니다. 유용한 배경 자료로는 트랜스포머 아키텍처에 대한 이 블로그 게시물과 트랜스포머 논문 등이 있습니다. 또한 이 목록에서에서 같이 읽으면 좋을 글들을 확인해 보세요.
목표 및 피드백: 이 책을 다 읽고 나면, 주어진 하드웨어 플랫폼에서 트랜스포머 모델에 가장 적합한 병렬 처리 방식을 추정하고, 훈련 및 추론에 걸리는 시간을 대략적으로 계산하는 데 자신감을 느끼게 될 것입니다. 만약 그렇지 않다면, 이메일을 보내거나 댓글을 남겨주세요! 어떻게 하면 더 명확하게 만들 수 있을지 여러분의 의견을 듣고 싶습니다.
3, 4년 전만 해도 대부분의 ML 연구자들은 이 책의 내용을 이해할 필요가 없었을 것이라고 생각합니다. 하지만 오늘날에는 ‘작은’ 모델조차 하드웨어 한계에 가깝게 실행되기 때문에, 새로운 연구를 하려면 대규모 환경에서의 효율성을 고려해야 합니다.
‘모델 스케일링’의 목표는 훈련이나 추론에 사용되는 칩의 수를 늘리면서 처리량을 비례적으로, 즉 선형적으로 증가시키는 것입니다. 이를 “strong scaling(강력 혹은 경성 스케일링)“이라고 합니다. 추가 칩을 사용하는 것(‘병렬 처리’)은 보통 계산 시간을 줄여주지만, 칩 간의 추가적인 통신 비용을 발생시킵니다. 통신이 계산보다 오래 걸리게 되면 우리는 ‘통신 병목(communication bound)’ 상태가 되어 강력 스케일링을 할 수 없게 됩니다.
이 책의 목표는 TPU(및 GPU) 하드웨어의 작동 방식과, 트랜스포머 아키텍처가 현재 하드웨어에서 좋은 성능을 내기 위해 어떻게 발전해 왔는지를 설명하는 것입니다. 이 내용이 새로운 아키텍처를 설계하는 연구자들과 현 세대의 LLM을 빠르게 실행시키기 위해 노력하는 엔지니어들 모두에게 유용하기를 바랍니다.
이 책의 전체적인 구조는 다음과 같습니다:
섹션 1에서는 루프라인 분석과 스케일링을 제한할 수 있는 요인(통신, 계산, 메모리)에 대해 설명합니다. 섹션 2와 섹션 3에서는 TPU와 최신 GPU가 개별 칩으로서, 그리고 매우 중요하게는, 제한된 대역폭과 지연 시간을 가진 상호 연결(interconnected) 시스템으로서 어떻게 작동하는지에 대해 자세히 다루며 이를 통해 아래와 같은 질문에 답해볼 것입니다:
5년 전 ML 분야는 ConvNet, LSTM, MLP, 트랜스포머 등 다채로운 아키텍처의 향연이었지만, 지금은 대부분 트랜스포머만 남았습니다
섹션 5: 훈련 과 섹션 7: 추론은 이 글의 핵심으로, 다음과 같은 근본적인 질문을 다룹니다: 특정 크기의 모델과 주어진 수의 칩이 있을 때, 어떻게 모델을 병렬화하여 “strong scaling” 영역에 머무를 수 있을까? 이는 간단한 질문이지만 놀랍도록 복잡한 답을 가지고 있습니다. 넓게 보자면 모델을 여러 칩에 분산시키는 데 사용되는 4가지 주요 병렬 처리 기법(데이터, 텐서, 파이프라인, expert)이 있으며, 메모리 요구사항을 줄이기 위한 여러 다른 기법(rematerialisation, 옵티마이저/모델 샤딩(ZeRO), 호스트 오프로드, 그래디언트 축적(gradient accumulation))이 있습니다. 여기서는 이러한 기법들 중 많은 것을 논의합니다.
위의 섹션들을 다 읽고 나면, 새로운 아키텍처나 설정에 대해 스스로 병렬 처리 방식을 선택할 수 있게 되기를 바랍니다. 섹션 6과 섹션 8은 이러한 개념들을 인기 있는 오픈 소스 모델인 LLaMA-3에 적용하는 실용적인 튜토리얼입니다.
마지막으로, 섹션 9 과 섹션 10에서는 이러한 아이디어 중 일부를 JAX에서 구현하는 방법과, 문제가 발생했을 때 코드를 프로파일링하고 디버깅하는 방법을 살펴봅니다.
책 전반에 걸쳐 스스로 풀어볼 수 있는 문제들을 제공하려고 노력했습니다. 모든 섹션을 읽거나 순서대로 읽지 않으셔도 됩니다. 또한 피드백을 부탁드립니다. 당분간 이 책은 초안이며 계속해서 수정될 예정입니다. 감사합니다!
이 문서에 담긴 많은 아이디어를 도출해 낸 James Bradbury와 Blake Hechtman에게 감사를 표합니다.
이 시리즈는 아마 필요 이상으로 긴 것 같지만, 길이가 읽으시는데 방해물이 되지 않기를 바랍니다. 처음 세 챕터는 사전 지식이며 익숙하다면 건너뛰어도 좋지만, 이후 사용될 표기법을 소개합니다. 마지막 세 파트는 실제 모델을 다루는 방법을 설명하므로 가장 실용적일 수 있습니다.
Part 1: 사전 지식
챕터 1: 루프라인 분석에 대한 간략한 소개. 알고리즘은 연산, 통신, 메모리 세 가지에 의해 제한됩니다. 이를 통하여 알고리즘이 얼마나 빨리 실행될지 근사치를 구할 수 있습니다.
챕터 2: TPU를 어떻게 생각해야 할까. TPU는 어떻게 작동할까요? TPU는 우리가 훈련하고 서빙할 수 있는 모델에 어떤 영향을 미칠까요?
챕터 3: 샤딩된 행렬과 이를 곱하는 방법. 여기서는 우리가 가장 좋아하는 연산인 (샤딩된) 행렬 곱셈을 통해 모델 샤딩과 다중 TPU 병렬 처리를 설명합니다.
파트 2: 트랜스포머
챕터 4: 당신이 알아야 할 모든 트랜스포머 수학. 트랜스포머는 순전파(forward pass)와 역전파(backwards pass) 과정에서 얼마나 많은 FLOPs를 사용할까요? 파라미터의 수를 계산할 수 있나요? KV 캐시의 크기는요? 여기서 이러한 수학을 다룹니다.
챕터 5: 훈련을 위해 트랜스포머를 병렬화하는 방법. FSDP. Megatron 샤딩. 파이프라인 병렬 처리. 주어진 수의 칩으로, 주어진 크기의 모델을 주어진 배치 크기로 가능한 한 효율적으로 훈련하려면 어떻게 해야 할까요?
챕터 6: TPU에서 LLaMA 3 훈련하기. TPU에서 LLaMA 3를 어떻게 훈련할 수 있을까요? 시간이 얼마나 걸릴까요? 비용은 얼마나 들까요?
챕터 7: 트랜스포머 추론의 모든 것. 모델을 훈련 후 서빙을 해야 합니다. 추론은 지연 시간(latency)이라는 새로운 고려 사항을 추가하고 메모리 환경을 바꿉니다. 분산 서빙(disaggregated serving)이 어떻게 작동하는지와 KV 캐시에 대해 어떻게 생각해야 하는지 이야기할 것입니다.
챕터 8: TPU에서 LLaMA 3 서빙하기. TPU v5e에서 LLaMA 3를 서빙하는 데 비용이 얼마나 들까요? 지연 시간과 처리량(latency/throughput)의 트레이드오프는 무엇일까요?
파트 3: 실용적인 튜토리얼
챕터 9: TPU 코드 프로파일링 방법. 실제 LLM은 위의 이론처럼 간단하지 않습니다. 여기서는 JAX + XLA 스택과 JAX/TensorBoard 프로파일러를 사용하여 실제 문제를 디버깅하고 수정하는 방법을 설명합니다.
챕터 10: JAX로 TPU 프로그래밍하기. JAX는 계산 병렬화를 위한 마법 같은 API들을 제공하지만, 이를 사용하는 방법을 알아야 합니다. 재미있는 예제와 풀이가 있는 문제들이 있습니다.
챕터 11: 결론 및 추가 자료. TPU와 LLM에 대한 마무리와 추가적인 읽을거리.