~14 min · cpu-soc, power, performance-per-watt, powermetrics, thermal, energy-per-token
Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"이 트랙의 모든 설계 결정은 제약 하나 아래서 내려졌어. 속도도 아니고. 비용도 아니고. 열이야."
트랙 전체를 설명하는 제약
앞의 다섯 레슨을 질문 하나 들고 다시 읽어봐. 왜? 왜 사 온 코어 대신 아키텍처 라이선스인가. 코어를 전력 예산에 맞춰 튜닝할 수 있게. 왜 빠른 대신 넓은가. 마지막 1기가헤르츠가 첫 1기가헤르츠보다 에너지를 더 먹으니까. 왜 코어가 두 종류인가. 백그라운드 작업이 싼 쪽에서 돌게. 왜 CPU에 행렬 유닛이 있고 뉴럴 엔진과 미디어 엔진이 있는가. 전문가는 범용 코어 에너지의 몇 분의 일로 제 일을 하니까. 모든 답이 같은 답이야. 이 칩은 배터리가 있고 팬이 없는 기기를 위해 설계됐고, 거기서 와트당 성능은 마케팅 문구가 아니라 제품이 존재할 수 있게 하는 유일한 지표야.
설계가 맥으로 옮겨오면서 제약은 느슨해졌고 모양은 남았어. Mac Studio는 폰보다 훨씬 많이 끌어다 쓸 수 있고, 애플 규격은 '최대 연속 전력'을 480 W로 잡아. 하지만 안의 칩은 그걸 쓰라고 만들어진 적이 없고, 애플 자체 측정이 안 쓴다고 말해. 512 GB M3 Ultra 구성은 애플 테스트에서 유휴 9 W, 최대 270 W야. 나머지 전력 예산은 설계가 안 쓰는 여유야.
하루 종일 추론을 돌리는 기계한테 이게 뜻하는 것
이 집의 맥들은 하루 24시간 켜져 있어. 몇 대는 추론을 계속 서빙해. 애플 전력 페이지의 숫자 둘이 그 규모를 정해줘.
기계 (애플이 테스트한 구성)
유휴
최대
증거
Mac Studio (2025), M3 Ultra 32C/80G, 512 GB
9 W
270 W
벤더 (support.apple.com/102027)
Mac Studio (2025), M4 Max 14C/32G, 36 GB
6 W
145 W
벤더 (같은 페이지)
Mac Studio, 최대 연속 전력 (규격)
—
480 W
벤더 (기술 사양)
GeForce RTX 5090 (카드 단독)
—
575 W
벤더 (NVIDIA)
RTX PRO 6000 Blackwell (카드 단독)
—
600 W
벤더 (NVIDIA 데이터시트)
DGX Spark (GB10 SoC TDP. 본체엔 240 W 전원 공급 장치가 딸려 나와)
—
140 W
벤더 (NVIDIA 하드웨어 페이지)
27B 모델을 초당 32.6토큰으로 디코드하는 M3 Ultra(실측, office, 실험 트랙)는 그러는 동안 270 W보다 많이 끌어다 쓸 수 없고, 거의 확실히 훨씬 적게 써. 애플의 최대치는 기계 전체 스트레스 수치니까. 그러면 토큰당 에너지 상한이 8줄쯤이고, 진짜 값은 그 아래야. 코드 블록이 그 산수를 하고, 상한을 측정값으로 바꾸는 방법을 보여줘. 애플 자체 샘플러인 powermetrics는 CPU, GPU, 뉴럴 엔진 전력을 밀리와트로 보고하고, 필요한 건 루트 권한이랑 돌릴 모델뿐이야. 이 퀘스트의 세션은 그걸 못 돌렸어. 실험실 기계들은 루트 비밀번호 없이 ssh로 닿거든. 그래서 이 레슨은 명령어랑 상한을 주고, 상한을 상한이라고 라벨 붙여.
정직한 비교
외장 카드는 자기 메모리에 들어가는 모델이면 절대 디코드 경주를 이겨(CUDA 트랙). 맥이 근처에도 못 가는 전력 예산으로. 자기 프로세서랑 메모리가 따로 있는 기계 안의 575 W 카드는 킬로와트급 컴퓨터고, 시끄러워. 맥의 자리는 곡선 위의 다른 점이야. 카드의 절반도 안 되는 전력으로 초당 토큰은 적게, 조용하게, 유휴 9 W로, 그리고 카드가 못 담는 모델을 담을 수 있게. 이 상한들이 맥한테 주지 않는 게 토큰당 줄이야. 벤더 최대치끼리 놓으면 카드의 토큰당 4.6 J가 Studio의 8.3 J 상한을 이기고, 맥이 실제로 상한 아래 어디 있는지는 이 퀘스트가 못 잰 powermetrics 값이야. 어느 점도 모두한테 맞는 점은 아니야. 어떤 워크로드가 어느 점에 속하는지는 엣지 시대 트랙이 논증해. 이 레슨의 일은 두 점이 존재하는 건 서로 다른 두 제약이 그렸기 때문이고, 맥의 제약은 열이었다는 걸 보여주는 것뿐이야.
Code
energy_per_token.py — 벤더 전력 수치와 실측 디코드로 구한 상한·python
#!/usr/bin/env python3
"""Joules per token, bounded. Power figures are vendor maxima (Apple's tested
maximum for the exact office configuration; NVIDIA board power). Decode rates
are measured (office) or ceiling arithmetic (the card) — the labels say which."""
rows = [
# machine, watts, tok/s, power label, rate label
("office M3 Ultra, Qwen3.5-27B 4-bit", 270, 32.6, "vendor max (Apple)", "measured 2026-09-15"),
("office M3 Ultra, Qwen3.5-9B 4-bit", 270, 95.1, "vendor max (Apple)", "measured 2026-09-15"),
("RTX 5090, 14.4 GB model (fits)", 575, 1792 / 14.4, "vendor board power", "ceiling = 1792 GB/s ÷ 14.4 GB (physics, not measured)"),
]
print(f"{'machine / model':38} {'W':>4} {'tok/s':>6} {'J/token (upper bound)':>22}")
for name, w, tps, plabel, rlabel in rows:
print(f"{name:38} {w:4d} {tps:6.1f} {w / tps:22.2f} [{plabel}; {rlabel}]")
print("\nA bound is not a measurement. Replace the watts with a powermetrics sample:")
print(" sudo powermetrics --samplers cpu_power,gpu_power,ane_power -i 1000 -n 30")
print("while a model decodes; add CPU + GPU power, divide by tokens per second.")
직접 재기: 모델이 디코드하는 동안 powermetrics (루트 필요)·bash
# terminal 1: decode something for ~30 s in your MLX env
python -m mlx_lm generate --model mlx-community/Qwen3.5-9B-4bit \
--prompt "Explain unified memory in 400 words." --max-tokens 300
# terminal 2: sample power once a second for 30 s
sudo powermetrics --samplers cpu_power,gpu_power,ane_power -i 1000 -n 30 \
| grep -E "CPU Power|GPU Power|ANE Power"
# CPU Power: 1234 mW
# GPU Power: 45678 mW <- the number that matters for decode
# ANE Power: 0 mW <- the Neural Engine is idle; MLX runs on the GPU
# joules per token = (CPU mW + GPU mW) / 1000 / tokens-per-second
모델이 30초 동안 디코드하는 사이에 네 맥에서 powermetrics 레시피를 돌려. 평균 GPU와 CPU 전력이랑 디코드 속도를 기록하고, 토큰당 줄을 계산해서 완전한 도장을 단 실측 줄로 카드에 추가해. 그다음 energy_per_token.py의 상한이랑 비교하고, 네 맥이 애플 최대치보다 실제로 얼마나 아래서 돌았는지 한 문장으로 써.
Hint
GPU 레일이 거의 전부를 지고 ANE 레일은 0을 읽을 거야. 노트북이면 전원을 꽂고 돌려. 배터리에선 스케줄러가 GPU를 제한할 수 있어서, 칩이 아니라 정책을 재게 돼.
Progress
Progress is local-only — sign in to sync across devices.