"맥이 마주한 건 GPU가 아니야. GPU에 자기 메모리가 있다고 가정하고 돌아가는 20년치 코드야."
NVIDIA가 2006년에 출하한 것
NVIDIA 자신의 설명: "NVIDIA released the first version of CUDA in November 2006 and it came with a software environment that allowed you to use C as a high-level programming language." 툴킷 아카이브의 가장 오래된 항목은 "CUDA Toolkit 1.0 (June 2007)". 출하된 건 더 빠른 그래픽 카드가 아니었어. 사람들이 이미 아는 언어로 카드용 일반 프로그램을 쓰는 방법이었어. 컴파일러, 런타임, 그리고 복리로 불어나는 부분인 라이브러리. 선형대수의 cuBLAS, 나중에 신경망의 cuDNN, 추론의 TensorRT, 카드 여럿이 얘기하는 NCCL. 2010년대의 모든 딥러닝 프레임워크가 그 위에 지어졌고, 그래서 언어 모델이 누구나 돌리고 싶은 것이 됐을 즈음엔 논문에서 NVIDIA 하드웨어 위의 도는 커널까지의 길이 포장돼 있었고 모두의 코드가 이미 그 길을 걷고 있었어. 그게 해자야. 메모리 트랙이 값 매길 수 있는 실리콘에 있지 않고, 다음 레슨이 값 매기는 대역폭에 있지 않아. 나이에 있어.
문마다의 나이
코드 블록은 문마다 벤더 자신의 발표에서 날짜를 세. CUDA는 거의 스무 살. 여정 트랙의 모든 맥 경로가 결국 닿는 GPU API인 애플의 Metal은 열두 살. 애플 실리콘 맥은 여섯 살 미만. 버스 시절 프레임워크의 맥으로 가는 문인 PyTorch의 MPS 백엔드는 네 살. 애플 자체 프레임워크 MLX는 세 살 미만, Ollama의 MLX 엔진은 반 년. CUDA는 MLX의 일곱 배 나이고, 그 비율은 라이브러리의 깊이, 이식된 모델의 수, 커널을 쓸 수 있는 사람 풀의 크기, 이미 찾은 버그의 수에 대한 공정한 대리 척도야. 쥐 트랙은 커뮤니티가 263일 만에 맥을 찾아낸 이야기를 했어. 이 레슨은 그때쯤 커뮤니티가 NVIDIA에 16년째 있었다는 걸 상기시켜.
플랫폼의 기계 모델이 가정하는 것
CUDA의 프로그래밍 모델엔 호스트와 장치가 있고, 각각 자기 메모리가 있고, 그 사이를 옮기는 동사가 있어. 여정 트랙의 PyTorch 레슨은 그 모델을 메모리 하나짜리 기계에 얹으면 무슨 일이 생기는지 쟀어. 진짜 시간을 치르는 불필요한 복사, 그리고 CUDA엔 커널이 있고 Metal엔 아직 없는 연산 커버리지 격차. NVIDIA 자체의 추론 지침, 2023년 최적화 글은 두 단계를 물리 트랙과 정확히 같게 서술해. 프리필은 "a matrix-matrix operation that's highly parallelized", 디코드는 "the speed at which the data … is transferred to the GPU from memory dominates the latency"인 "a memory-bound operation". 그리고 나머지 분량을 플랫폼의 20년이 쌓은 요령들에 써. 배칭, 페이지드 캐시, 양자화, 추측 디코딩. 맥은 그 요령들을 마지막에 받거나 다시 구현해. Ollama 레슨은 그중 하나가 도착하는 걸 지켜봤어. 그러니 이 트랙 나머지의 정직한 틀은 이래. NVIDIA는 토큰이 신경 쓰는 두 숫자, 대역폭과 연산에서 앞서고, 어떤 스펙 시트에도 없는 한 숫자, 시간에서 앞서. 맥의 논거는 다른 곳에서 만들어져. 카드가 세우는 벽과 카드에 없는 풀에서. 그리고 이 트랙은 그렇게 말하기 전에 둘 다 값 매겨.