Codex가 QR kernel을 232배 끌어올린 14일, 성능보다 중요한 verifier
Original: Auto-research with codex: How I achieved a 232x Faster Kernel View original →
GPU kernel을 baseline보다 232배 빠르게 만든 과정에서 가장 재현할 만한 부분은 최종 코드가 아니다. 14일 동안 1,500회 넘게 제출하고, 매 결과를 기록하며, profiler와 정답 검사기를 다음 실험에 연결한 운영 방식이다. 작성자는 GPU Mode의 qr_v2 대회에서 183명 중 12위를 기록했다. 대략 419,000µs였던 torch.geqrf 기반 baseline과 최종 1,805µs 결과를 비교해 232배라는 수치를 계산했다.
행렬 계산을 tensor core가 좋아하는 모양으로
과제는 FP32 정사각 행렬 묶음을 compact Householder QR 형식으로 분해하는 것이었다. 검사기는 결과에서 Q와 R을 복원해 A ≈ QR, 직교성, 삼각 행렬 조건을 확인했다. Householder QR은 열을 하나씩 처리해야 해 직렬 의존성이 생긴다. 해결의 방향은 좁은 panel 안에 직렬 작업을 가두고, 나머지 trailing block 갱신을 WY 표현으로 묶어 GEMM 세 번에 가까운 형태로 바꾸는 것이었다. tensor core가 쉬는 시간을 줄이는 구조적 선택이다.
성능은 한 번에 나오지 않았다. blocked WY QR에서 시작해 Triton panel, CUDA graph replay, 고정 shape 특화, fused layout assembly, custom Cholesky 경로가 차례로 더해졌다. 3,000µs 아래에서는 작은 parameter 조정만 반복하는 local maximum에 자주 갇혔다. 작성자는 여러 아이디어 계열을 동시에 유지하는 beam 방식으로 실험 다양성을 확보했다.
agent가 연구하려면 판정 장치가 먼저
작업 공간에는 문제 설명, 제출 방법을 적은 AGENTS.md, 성공과 실패를 남기는 log가 있었다. Codex에는 ‘n=512에서 현재 최고 기록을 이겨라’처럼 수치로 확인 가능한 목표를 줬고, benchmark·profile·submit을 직접 반복하게 했다. 사람은 2~3시간마다 병목과 다음 가설을 묻고 방향을 조정했다. 자동화가 사람을 없앤 사례라기보다, 사람이 검증 가능한 탐색 공간을 설계한 사례에 가깝다.
커뮤니티 토론은 일반화 문제를 날카롭게 짚었다. 한 댓글은 대회 상위 해법 상당수가 대회 밖 shape에서 깨졌다고 지적했고, 다른 댓글은 wall-clock, profiler, pass/fail처럼 매 단계에 oracle이 있었기 때문에 이 루프가 작동했다고 정리했다. 특정 입력에 맞춘 kernel 최적화와 범용 library 코드는 목표가 다르다. 빠른 숫자만 옮기면 이 구분이 사라진다.
232배는 인상적이지만 더 넓은 교훈은 단순하다. agent에게 긴 시간을 주기 전에 정답 판정, 대표 입력, 성능 측정, 실패 기록을 먼저 준비해야 한다. verifier가 약하면 agent는 잘못된 성공을 빠르게 쌓는다. 원문에는 실험 경로와 kernel 구조 변화가 상세히 정리돼 있다.
Related Articles
Linux용 ChatGPT 데스크톱 앱이 x64와 ARM64 프리뷰로 열렸다. Ubuntu 24.04·26.04, Debian 13, Fedora 43·44에서 ChatGPT, Work, Codex를 한 앱으로 쓸 수 있다.
MachineLearning 커뮤니티의 한 글은 RTX 5090에서 cuBLAS가 batched FP32 MatMul에 비효율적인 kernel을 고르고 있을 가능성을 제기한다. 핵심은 단순한 체감 저하가 아니라, reproducible benchmark와 profiling data를 갖춘 dispatch 문제 제기라는 점이다.
HN은 Codex의 새 방향을 “무엇을 할 수 있나”보다 “어디까지 컴퓨터를 맡겨도 되나”로 읽었다. desktop agent, non-developer workflow, sandbox, 민감한 file 접근이 댓글의 핵심이었다.