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

NVIDIA도 통합 메모리를 만들어

~14 min · cuda, nvidia, unified-memory, gb10, gh200, convergence, vendor-claim

Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"벽을 세운 회사가 이제 풀을 팔아. 기가바이트당 대역폭 칸을 읽으면 그 풀들은 맥 위가 아니라 옆에 놓여. 모양이 옳았고, 거래는 모양과 함께 와."

NVIDIA의 풀 셋

VRAM 벽에 대한 NVIDIA 자체의 답은 애플이 2020년에 출하한 답과 같아. 큰 메모리를 일관 링크 뒤에 두어 GPU가 복사 없이 주소 지정하게 하는 것. 제품 셋이 그걸 실어. GH200은 최대 480 GB LPDDR5X를 가진 Grace CPU를 HBM을 가진 Hopper GPU에 "900 gigabytes per second"의 NVLink-C2C로 잇고, NVIDIA의 페이지는 중요한 부분을 말해. "the CPU and GPU share a single per-process page table". 주소 공간 하나, GPU가 CPU의 메모리에서 페이지를 폴트로 끌어오는, 복사 단계 없는 여정 트랙의 매핑-건드림-wired 순서 그대로. GB200 NVL72는 그걸 랙으로 키워. DGX Spark, GB10 데스크톱은 소비자 규모 판이야. "128 GB LPDDR5x, coherent unified system memory", "273 GB/s", CPU와 GPU가 보드 하나에서 "5x the bandwidth of fifth-generation PCIe"의 NVLink-C2C로 이어지고, 140 W. NVIDIA의 소프트웨어를 얹은 Mac Studio의 모양이고, 플랫폼 레슨이 그 조합이 왜 팔리는지 설명해. 20년치 CUDA 코드가 그 위에서 그대로 돌아.

모양과 함께 오는 거래

코드 블록의 가운데 칸이 읽을 칸이야. 기가바이트당 대역폭. 카드는 거대한 버스가 붙은 작은 메모리야. 5090에서 GB당 56 GB/s. 풀은 소박한 버스가 붙은 큰 메모리고, 풀이 커질수록 비율은 떨어져. M5 Max의 128 GB에 4.8, M5 Ultra의 512에 2.4, M3 Ultra에 1.6, Spark의 128 GB에 2.1, Vera의 1.5 TB에 0.8. Spark의 273 GB/s는 27B 상한 초당 19토큰을 사. M3 Ultra의 3분의 1이고 AMD의 128 GB 부품과 같은 급. NVIDIA 자체의 풀은 자기 소비자 규모에서 맥보다 느리게 디코드해. NVIDIA 공학의 실패가 아니야. 넓은 버스와 큰 메모리가 패키지 하나에 동시에 안 들어가는 물리고, 그게 애플의 숙제 트랙 전부야. Vera CPU는 반대쪽 끝에서 거래를 명시해. "SOCAMM, detachable, field-replaceable modules" 위의 "up to 1.5 TB of memory", "up to 1.2 terabytes per second". 갈아 끼울 수 있는 1.5테라바이트, 맥보다 낮은 GB당 대역폭에, 하나를 위한 풀이 아니라 GPU 옆의 CPU인 칩에.

복제가 증명하는 것

둘이고, 수렴 트랙이 둘 다 더 밀고 가. 첫째, 아키텍처가 옳았다는 것. 가장 큰 GPU 회사가 자기 CPU의 LPDDR에서 GPU까지 일관 풀을 짓고 그걸 128 GB 넣은 데스크톱을 팔 때, 애플이 2020년에 노트북을 위해 그린 다이어그램은 벽 반대편에 대한 업계의 다이어그램이 된 거야. 둘째, 풀은 애플만의 것이 아니고, 그 이점들(용량, 주소 공간 하나, 복사 없음)은 이제 CUDA를 붙여서 살 수 있어. 같은 물리가 제약하는 GB당 대역폭에. Spark의 가격이 이야기의 마지막을 말해. $3,999에 출시, 보도된 NVIDIA 자체 포럼에 따르면 "due to the constrained memory supplies worldwide"로 $4,699로 인상. 일주일 뒤 Mac Studio의 512 GB 구성이 판매를 멈춘 같은 메모리 시장에서. 애플은 말이 없었고 언론은 DRAM 부족을 들었어. 이제 풀을 짓는 모두가 같은 DRAM을 사.

Code

pools.py — 모든 풀을 표 하나에, 디코드를 정하는 비율과 함께·python
#!/usr/bin/env python3
"""NVIDIA builds unified memory too. Every pool in one table: capacity, bandwidth, the
ratio between them, and the link that makes it one pool. Vendor figures; the ratio and
the 27B ceiling are divisions."""
pools = [  # name, GB, GB/s, link, source
    ("Apple M3 Ultra, Mac Studio",            512, 819,  "UltraFusion, 'over 2.5TB/s' die to die",           "Apple"),
    ("Apple M5 Ultra, Mac Studio",            512, 1229, "UltraFusion, 'over 4.4TB/s'",                       "Apple"),
    ("NVIDIA GB10, DGX Spark",                128, 273,  "NVLink-C2C, '5x the bandwidth of fifth-generation PCIe'", "NVIDIA"),
    ("NVIDIA GH200 Grace Hopper (CPU+GPU)",   480+96, 0, "NVLink-C2C, '900 gigabytes per second'; 'a single per-process page table'", "NVIDIA"),
    ("NVIDIA Vera CPU (SOCAMM)",              1500, 1200, "LPDDR5X on 'detachable, field-replaceable modules'", "NVIDIA"),
    ("AMD Ryzen AI Max+ 395",                 128, 256,  "one die's memory controller; 256-bit LPDDR5x-8000", "AMD"),
]
print(f"{'pool':38} {'GB':>5} {'GB/s':>5} {'GB/s per GB':>11} {'27B ceiling':>11}   link")
for name, gb, bw, link, src in pools:
    ratio = f"{bw/gb:11.2f}" if bw else f"{'n/a':>11}"
    ceil = f"{bw/14.42:11.0f}" if bw else f"{'n/a':>11}"
    print(f"{name:38} {gb:5d} {bw:5d} {ratio} {ceil}   {link} [{src}]")
print("\nGH200's pool is CPU LPDDR5X plus GPU HBM3 behind one page table; its two halves have different bandwidths, so no single figure is honest.")

# pool                                      GB  GB/s GB/s per GB 27B ceiling   link
# Apple M3 Ultra, Mac Studio               512   819        1.60          57   UltraFusion, 'over 2.5TB/s' die to die
# Apple M5 Ultra, Mac Studio               512  1229        2.40          85   UltraFusion, 'over 4.4TB/s'
# NVIDIA GB10, DGX Spark                   128   273        2.13          19   NVLink-C2C, '5x the bandwidth of fifth-generation PCIe'
# NVIDIA GH200 Grace Hopper (CPU+GPU)      576     0         n/a         n/a   NVLink-C2C, '900 gigabytes per second'; 'a single per-process page table'
# NVIDIA Vera CPU (SOCAMM)                1500  1200        0.80          83   LPDDR5X on 'detachable, field-replaceable modules'
# AMD Ryzen AI Max+ 395                    128   256        2.00          18   one die's memory controller; 256-bit LPDDR5x-8000

External links

Exercise

벤더 페이지에서 풀 둘을 더 pools.py에 더해. 'unified'나 'coherent' 메모리로 팔리는 어떤 기계든. 그리고 GB당 대역폭을 계산해. 그 칸을 용량에 대해 머릿속으로 그려 보고 각각이 M3 Ultra의 1.6에 비해 어디 놓이는지 카드에 적어. 그다음 네가 돌리는 가장 큰 모델에 어느 걸 살지, 그리고 왜 용량만이 아니라 비율이 그걸 정했는지 적어.
Hint
네가 더하는 모든 풀은 같은 곡선에 놓일 거야. 기가바이트 많을수록 GB당 GB/s 적게. 하나가 곡선을 깨는 것 같으면 그 대역폭 수치가 공유 풀이 아니라 GPU 자체의 HBM 것인지 확인해. GH200이 흔한 혼동이야. 페이지 테이블 하나 뒤에 메모리 둘.

Progress

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

댓글 0

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

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