본문 바로가기
C.W.K.
Stream
Lesson 01 of 07 · published

맥 아홉, 일 아홉

~12 min · fleet, roles, launchd, capacity, measured

Level 0스펙 시트 훑는 사람
0 XP0/91 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"함대는 컴퓨터 하나의 사본 아홉이 아니야. 아홉 개의 부하에 맞춘 아홉 개의 용량이고, 그 맞춤이 설계의 전부야."

직접 읽은 역할들

지도 트랙은 맥 아홉을 칩과 메모리로 나열했어. 이 레슨은 2026-09-15에 각각이 뭘 하고 있었는지로 나열해. 역할 별칭으로 ssh 너머에서 읽어서. 각 기계의 이 집 자체 launchd 서비스 수, 그리고 얼마나 오래 켜져 있었는지. 패턴은 라이벌 트랙의 결정표가 예측한 그것이야. 512 GB Studio 둘이 풀이 필요한 부하를 실어. office는 서른 남짓한 앱과 피파 자신의 엔진과 컨트롤 플레인, 이 집 서비스 45개를 돌려. server는 집 서비스 일곱(이미지 엔진과 음성 형제가 그 안에 있어)을 돌리고, 그 셈 옆에 공유 모델을 들고 있는 추론 데몬 둘, MLX 엔드포인트와 Ollama 데몬을 돌려. 192 GB M2 Ultra 둘은 큰 풀은 필요하지만 가장 큰 건 필요 없는 일을 맡아. worker는 미디어 스캔, 트랜스코딩, 전사를 임대받고, music은 스튜디오야. 노트북들은 각각 서비스 넷이나 다섯을 실어. 동기화 클라이언트, 음성 도구, 가드들. 그리고 64 GB mini는 집에 음악을 서비스해. office 빼고 모든 기계가 19일째 켜져 있었어. office는 엔진이 재배포될 때 재부팅돼.

별칭칩, 메모리이 집 서비스배치를 정하는 것증거
officeM3 Ultra, 512 GB45엔진, 컨트롤 플레인, 피파의 집모든 데이터베이스의 쓰기 주체는 풀이 가장 크고 항상 켜진 기계에 살아읽음 2026-09-15
serverM3 Ultra, 512 GB7추론 허브용량: 이 집이 원하는 모델들은 192 GB에 안 들어가읽음
workerM2 Ultra, 192 GB7임대받은 미디어 작업ffmpeg와 스캔엔 충분한 풀, 가장 큰 건 불필요읽음
musicM2 Ultra, 192 GB5음악 스튜디오연산 무거운 창작 부하. 실험실에서 M2 Ultra로 쟀어읽음
macbook · pro2024 · pro2023M5 Max · M4 Max · M3 Max, 128 GB5 · 4 · 4노트북128 GB는 4비트 27B를 긴 컨텍스트로 담아. 나머지엔 허브의 클라이언트읽음
airM3, 24 GB4드럼 키트의 맥9B와 음성 도구. 스왑 절벽은 모델 하나 앞읽음
miniM4 Pro, 64 GB5음악 서버64 GB의 항상 켜진 어플라이언스읽음

맞춤은 뭘로 만들어지나

숫자 셋이 각 일을 배치해. 담아야 하는 가장 큰 모델, 항상 켜져 있어야 하는지, 진실을 쓰는지. 용량이 허브를 512 GB Studio에, 미디어 워커를 192 GB에 놓아. 항상 켜짐이 컨트롤 플레인을 닫히는 노트북이 아니라 9와트(그 구성에 대한 애플 수치)로 유휴하는 데스크톱 Studio에 놓아. 그리고 단일 쓰기 주체 규칙, 기계 하나가 각 데이터베이스를 소유하고 나머지 모두는 API 클라이언트라는 규칙이 컨트롤 플레인을 office에만 놓고, 그래서 office의 서비스 수가 다른 어떤 맥의 여섯 배야. 어느 것도 성능 순위가 아니야. music Studio는 실험실 자체의 숫자로 집에서 가장 빠른 디코드 기계고 추론을 전혀 안 돌려. 그 기계가 가진 일은 그게 가장 잘하는 일이고, 추론은 풀이 더 큰 어딘가에 있어. 다음 여섯 레슨이 함대를 붙드는 여섯 패턴이야.

Code

fleet_services.py — 역할 별칭으로 읽은, 각 맥이 돌리고 있는 것·python
#!/usr/bin/env python3
"""Nine Macs, nine jobs: what each is running right now. Counts the household's own
launchd labels and reads uptime over ssh by role alias -- a property read, not a
benchmark, so it runs on every Mac including the ones the lab never loads."""
import subprocess, sys
ALIASES = sys.argv[1:] or ["office", "server", "worker", "music", "macbook", "pro2024", "pro2023", "air", "mini"]
REMOTE = 'n=$(launchctl list 2>/dev/null | grep -c "com.cwk"); u=$(uptime | sed "s/.*up //; s/,.*user.*//"); echo "$n|$u"'
print(f"{'alias':8} {'household services':>18}  uptime")
for a in ALIASES:
    try:
        out = subprocess.run(["ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=6", a, REMOTE], capture_output=True, text=True, timeout=30).stdout.strip()
        n, up = (out.split("|") + ["?"])[:2]
        print(f"{a:8} {n:>18}  {up.strip()}")
    except (subprocess.TimeoutExpired, OSError) as exc:
        print(f"{a:8} unreachable ({exc.__class__.__name__})")
# 2026-09-15: office 45 (up 3 days) | server 7 | worker 7 | music 5 | macbook 5 | pro2024 4 | pro2023 4 | air 4 | mini 5 (all up 19 days)

External links

Exercise

닿을 수 있는 맥들에 fleet_services.py를 돌려. 하나도 셈에 들어가. 각 기계의 일을 한 구절로 쓰고 옆에 배치 사실 셋을 써. 담아야 하는 가장 큰 모델, 항상 켜짐 여부, 데이터베이스 소유 여부. 그다음 그 셋 말고 다른 이유로 기계에 있는 일이 있는지 확인해.
Hint
'거기 설치돼 있어서' 기계에 앉은 일이 있으면 옮기길 기다리는 일이야. 흔한 오배치는 노트북 위의 컨트롤 플레인이야. 뚜껑이 닫힐 때까진 돌아가.

Progress

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

댓글 0

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

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