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

인터페이스가 주는 것, 그리고 가져가는 것

~16 min · modular, pcie, interface-tax, bandwidth, latency, physics

Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"뽑을 수 있는 경계는 전부 네 데이터가 건너야 하는 경계야."

선물

앞 레슨에서 인터페이스가 주는 걸 나열했어. 교체, 독립된 속도, 수리, 허락 없는 혁신. 추상적인 얘기가 아니야. 2026년의 PC 주인은 ASUS 보드 위에 AMD 프로세서 옆에 NVIDIA 카드를 꽂고 Micron 메모리를 끼우고, 내년에 그중 아무거나 갈아 끼우고, 그 회사들 중 누구한테도 허락을 안 구해. 그게 선물이고, 큰 선물이야.

가격, 물리로

인터페이스는 신호가 실리콘 한 조각을 떠나 커넥터와 기판을 건너 다른 조각으로 들어가는 자리야. 그런 건넘마다 네 가지를 치러.

  • 대역폭. 커넥터엔 정해진 핀 수가 있고, 기판 배선이 실을 수 있는 신호 속도가 있어. 16레인 PCI Express 5.0은 방향당 63 GB/s쯤 옮기고, PCIe 6.0은 그걸 두 배인 126쯤으로 올려. 애플 패키지 안에서 M3 Ultra의 메모리 버스는 819 GB/s고, UltraFusion 다이 간 링크는 "2.5TB/s 이상"이야. 인터페이스는 자기가 연결하는 것보다 한두 자릿수 좁아.
  • 지연. 패키지 안에 머무는 메모리 접근은 나노초 단위야. PCIe를 건너는 트랜잭션은 마이크로초 단위고. 직렬화되고, 패킷으로 잘리고, 확인 응답을 받아야 하니까.
  • 전력과 면적. 기판을 가로질러 신호를 몰고 가는 건 다이를 가로지르는 것보다 훨씬 많은 에너지가 들고, 그걸 하는 송수신기는 실리콘이랑 핀을 먹어. 소켓에 꽂는 메모리 모듈은 납땜한 칩보다 더 길고 더 시끄러운 경로야. Framework가 256비트 Ryzen AI Max에 대해 AMD 엔지니어들 말을 전하면서 쓴 문장이 "그 거대한 256비트 메모리 버스를 뽑아내려면 LPDDR5x를 납땜해야 한다"였고, 소켓 배치는 "메모리 클럭을 대폭 낮추지 않고는 불가능"했대.
  • 복사. 프로세서 둘이 메모리를 따로 가지면, 한쪽이 만들고 다른 쪽이 필요한 데이터는 건너서 복사돼야 해. 복사는 소프트웨어 눈에 보이는 인터페이스야.

애플 패키지는 CPU, GPU, 메모리 사이에서 이 넷 중 아무것도 안 치러. 거기엔 건널 인터페이스가 없으니까. 통합 메모리를 지지하는 공학 논증 전체가 이 한 문장이야. 반대하는 공학 논증 전체는, 더 좋은 부품으로 가려고 그 경계를 건널 수도 없다는 거고.

복사가 실제로 떨어지는 자리

대부분의 비교가 양방향으로 틀리는 부분이 여기야. 가중치가 4비트로 14 GB인 언어 모델을 생각해. 자체 메모리 32 GB짜리 외장 GPU에선 가중치가 로드할 때 PCIe를 한 번 건너. 63 GB/s면 0.25초쯤. 그 뒤 모든 토큰은 카드 자체 메모리에서 카드 자체 대역폭으로 디코드돼. RTX 5090이면 1,792 GB/s. 인터페이스는 0.25초를 받아갔고, 그다음엔 맥보다 두 배 넘게 빠른 카드 메모리가 넘겨받았어. 이 경주는 통합 메모리가 못 이겨. 지고, 이 퀘스트는 그렇게 말해.

이번엔 가중치가 60 GB인 모델. 32 GB엔 안 들어가. 안 들어간 만큼은 시스템 메모리에 살고, 거기 사는 레이어는 토큰마다 PCIe를 건너. 가중치 28 GB가 경계의 잘못된 쪽에 앉아 있으면, 카드가 아무리 빨라도 디코드는 63 ÷ 28 ≈ 초당 2.2토큰을 못 넘어. 통합 메모리가 충분한 맥에선 같은 60 GB를 토큰마다 819 GB/s로, 경계 없이 읽어. 디코드 상한 산수로 M3 Ultra에서 초당 13토큰쯤. 이 경우는 통합 메모리가 이기고, 여섯 배 이상으로 이기고, 정확히 GPU를 교체 가능하게 만든 그 인터페이스가 가중치가 건너야 하는 인터페이스라서 이겨.

코드 블록이 두 계산을 다 해. 결과를 정하는 게 뭔지 봐. 어느 쪽 메모리의 대역폭도 아니야. 모델이 경계의 빠른 쪽에 들어가느냐야. 용량이 어느 구간에 있는지를 정하고, 대역폭이 그 구간이 얼마나 빨리 도는지를 정해. 이 문장을 붙들고 있어. 메모리 트랙의 대부분이고, 숙제 트랙의 전부야.

Code

interface_tax.py — 모델이 들어가면 복사는 한 번, 안 들어가면 토큰마다·python
#!/usr/bin/env python3
"""Two machines, two models. Vendor bandwidths (GB/s): RTX 5090 memory 1792,
PCIe 5.0 x16 ~63 per direction, M3 Ultra unified 819. Decode ceiling =
bandwidth ÷ bytes read per token (physics, ignores everything but the bytes)."""

PCIE5_X16 = 63       # GB/s, one direction, after encoding (32 GT/s × 16 lanes × 128/130 ÷ 8)
VRAM_5090 = 1792     # GB/s, NVIDIA spec
VRAM_GB = 32
UNIFIED_M3U = 819    # GB/s, Apple spec


def discrete_gpu(weights_gb: float) -> tuple[float, float]:
    """(load seconds, decode ceiling tok/s) for a discrete card."""
    load_s = weights_gb / PCIE5_X16
    on_card = min(weights_gb, VRAM_GB)
    spilled = max(0.0, weights_gb - VRAM_GB)
    # per-token time: on-card bytes at VRAM speed + spilled bytes across PCIe
    per_token = on_card / VRAM_5090 + spilled / PCIE5_X16
    return load_s, 1 / per_token


def unified(weights_gb: float) -> tuple[float, float]:
    return 0.0, UNIFIED_M3U / weights_gb     # nothing crosses a boundary


for gb in (14, 28, 60, 120):
    d_load, d_tps = discrete_gpu(gb)
    _, u_tps = unified(gb)
    fits = "fits in VRAM " if gb <= VRAM_GB else "spills to host"
    print(f"{gb:4d} GB weights  {fits}  discrete: load {d_load:5.2f}s, ceiling {d_tps:7.1f} tok/s"
          f"   unified M3 Ultra: ceiling {u_tps:6.1f} tok/s")

External links

Exercise

interface_tax.py를 돌려. 그다음 VRAM_GB를 24, VRAM_5090을 1008(RTX 4090의 GDDR6X)로 바꿔서, 또 VRAM_GB를 96(RTX PRO 6000, 1,792 GB/s)으로 바꿔서 다시 돌려. 카드마다 목록에서 통합 메모리 맥의 상한이 외장 카드를 추월하는 제일 작은 모델 크기를 찾고, 그 교차점이 카드 대역폭이 아니라 VRAM에 따라 움직이는 이유를 한 문장으로 써.
Hint
교차점은 넘침이 시작되는 자리야. 그 위에선 카드의 토큰당 시간이 넘친 바이트 ÷ 63에 지배되고, 카드의 1,792 GB/s는 의미를 잃어. 그 아래에선 카드 메모리가 그냥 맥보다 빨라. 카드 대역폭은 들어갈 때 얼마나 크게 이기는지를 정하고, VRAM은 어디서부터 안 들어가는지를 정해.

Progress

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

댓글 0

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

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