본문 바로가기
C.W.K.
Stream
Lesson 04 of 06 · published

학습은 NVIDIA의 땅이야

~13 min · cuda, training, fine-tuning, tensor-cores, optimizer-state, physics

Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"디코드는 가중치를 읽어. 학습은 읽고, 쓰고, 옵티마이저용 사본 둘을 더 들고, 토큰마다 전부에 6을 곱해. 풀은 첫 문장을 위해 생긴 모양이야."

다른 예산

지금까지 모든 레슨이 값 매긴 건 추론이야. 대역폭 위의 토큰당 읽는 바이트. 학습은 메모리와 연산 둘 다에서 다른 예산이야. 메모리에선 흔한 옵티마이저로 하는 전체 파인튜닝이 파라미터마다 bf16 가중치, 그 그래디언트, fp32 옵티마이저 모멘트 둘, fp32 마스터 사본을 들어. 16바이트쯤. 활성값 하나를 저장하기 전에. 7B는 배치 전에 112 GB가 필요하고, 그래서 128 GB 노트북은 못 하고 512 GB Studio는 하고, 그래서 큰 모델 트랙의 체크포인트들은 그 크기에선 추론 전용이야. 연산에선 학습 토큰 하나가 파라미터당 부동소수점 연산 여섯쯤이야. 순전파 하나와 그 두 배 크기의 역전파. 7B에 10억 토큰이면 42 엑사FLOP. 그 숫자는 메모리 버스가 얼마나 넓은지 신경 안 써. 기계가 초당 곱셈을 몇 번 하는지 신경 써.

50 대 1

실험실은 office의 GPU를 fp32 19.5 TFLOP/s, bf16 21.9로 쟀어. NVIDIA의 H100 페이지는 BF16 텐서 처리량을 희소 포함 1,979 TFLOPS(밀집 989), FP8을 밀집 1,979로 적어. 코드 블록이 나눗셈을 해. 10억 토큰 파인튜닝은 완벽한 활용률에서 office에 598시간, H100 하나에 bf16으로 12시간, FP8로 6시간. 어느 쪽도 못 닿는 같은 완벽한 활용률에서. 공개된 큰 실행들은 피크에 한참 못 미치는 모델 FLOP 활용률을 보고하고, 여정 트랙이 보여 줬듯 PyTorch를 지나는 노트북 GPU는 자기 것의 훨씬 적은 몫에 닿아. 학습을 키우면, 진짜 사전학습은 수백억 파라미터에 수조 토큰이고, 맥의 숫자는 몇 주가 아니라 몇 년, 랙의 며칠에 대해서. M5 세대의 가속기는 맥의 수치를 애플이 주장한 최대 4.5배 바꿔. 데이터센터 부품에 대한 자릿수는 안 바꾸고, 인터커넥트 레슨이 왜 맥이 랙으로 못 쌓이는지 말했어. 1,800의 NVLink에 대한 10 GB/s의 Thunderbolt.

애플은 어디서 학습하고, 맥은 뭘 학습하나

자기 파운데이션 모델에 대한 애플 자신의 설명: "Apple's AXLearn framework"에서 학습되고, 그건 "allows us to train the models with high efficiency and scalability on various training hardware and cloud platforms, including TPUs and both cloud and on-premise GPUs". 풀을 설계한 회사가 남의 실리콘에서 학습하고, 그렇게 말해. 맥이 학습하는 건 mlx 퀘스트가 가르치는 더 작은 것이야. 학습 가능한 파라미터가 모델의 몇 퍼센트고 16바이트 예산이 그것들에만 적용되는 저랭크 어댑터 파인튜닝. 처음부터 만드는 작은 모델. 임베딩. 이 집 자체의 분류기. 진짜 일이고 이 집은 그걸 해. 라이벌이 가진 땅은 아니고, 이 퀘스트는 풀이 거기서 경쟁하는 척 안 해. 라이벌 관계는 일로 결판나. 풀엔 들어가고 카드엔 안 들어가는 모델의 추론은 맥으로. 의미 있는 어떤 규모의 학습이든 NVIDIA로. 다음 레슨은 NVIDIA가 자기 풀을 짓기 시작하는 자리야.

Code

training_math.py — 파라미터당 바이트, 토큰당 FLOP, 기계당 시간·python
#!/usr/bin/env python3
"""Training is a different budget: bytes and FLOPs. Full fine-tuning in bf16 with Adam
needs about 16 bytes per parameter before activations; a training step costs ~6 FLOPs per
parameter per token. Compute rates are vendor peak figures (dense, no sparsity) and the
lab's measured MLX matmul on office; real utilization is a fraction of either."""
params = 7e9
tokens = 1e9
bytes_full = params * 16                           # bf16 weights 2 + grads 2 + Adam m,v fp32 8 + master fp32 4
flops = 6 * params * tokens
rates = [  # name, TFLOP/s, note
    ("M3 Ultra, MLX fp32 matmul (measured)",      19.5,   "this quest, CPU track"),
    ("M3 Ultra, PyTorch MPS bf16 matmul (measured)", 21.9, "this quest, journey track"),
    ("H100 SXM, BF16 tensor core, dense",          989.5,  "NVIDIA: 1,979 TFLOPS with sparsity, halved"),
    ("H100 SXM, FP8 tensor core, dense",           1979,   "NVIDIA: 3,958 TFLOPS with sparsity, halved"),
]
print(f"full fine-tune of a {params/1e9:.0f}B: {bytes_full/1e9:.0f} GB of optimizer state and weights before activations")
print(f"{tokens/1e9:.0f}B training tokens: {flops/1e18:.0f} EFLOP\n")
for name, tflops, note in rates:
    secs = flops / (tflops * 1e12)
    print(f"{name:52} {tflops:7.1f} TFLOP/s -> {secs/3600:8.1f} h at 100% utilization   [{note}]")
print("\nutilization is never 100%: published large runs report model-FLOPs utilization well below peak, and a laptop GPU through PyTorch far below that.")

# full fine-tune of a 7B: 112 GB of optimizer state and weights before activations
# 1B training tokens: 42 EFLOP
# M3 Ultra, MLX fp32 matmul (measured)                    19.5 TFLOP/s ->    598.3 h at 100% utilization
# M3 Ultra, PyTorch MPS bf16 matmul (measured)            21.9 TFLOP/s ->    532.7 h at 100% utilization
# H100 SXM, BF16 tensor core, dense                      989.5 TFLOP/s ->     11.8 h at 100% utilization
# H100 SXM, FP8 tensor core, dense                      1979.0 TFLOP/s ->      5.9 h at 100% utilization

External links

Exercise

파인튜닝하고 싶은 모델의 파라미터 수와 쓸 토큰 수로 training_math.py를 돌려. 전체 파인튜닝과 파라미터 2%의 저랭크 어댑터에 드는 메모리, 그리고 네 맥의 실측 행렬곱 속도에서의 시간을 적어. 둘 중 네 맥이 실제로 할 수 있는 걸 카드에서 결정해.
Hint
전체 파인튜닝의 파라미터당 16바이트가 네 작업 집합을 넘으면 답은 어댑터. 시간이 몇 주에 이르면 답은 어댑터거나 빌린 카드. 둘 다 정직한 결과야. 풀의 모양은 추론에 유리하고, 이 퀘스트는 라이벌의 트랙에서 그렇게 말해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.