autorenew
Anthropic의 Claude TPU 버그 폭로: 정밀도 불일치로 상위 토큰이 사라진 부동소수점 대참사

Anthropic의 Claude TPU 버그 폭로: 정밀도 불일치로 상위 토큰이 사라진 부동소수점 대참사

부동소수점 숫자들로 가득한 화면을 바라보다가 멘탈이 녹아내린 적 있나요? 최근 Hari Krishnaswamy의 X 게시물에서 풍기는 기분이 그랬습니다. 전 Solidity 리드였고 현재 Cantina의 CEO인 그는 행렬 알고리즘 디버깅의 악몽을 이야기합니다. 그의 스레드는 Anthropic의 발표를 인용하고, 상세 포스트모템 보고서에서 직접 가져온 이미지를 하나 공유합니다. 이건 특히 까다로운 문제 하나를 깊이 파헤친 기록입니다: TPU 구현 버그 때문에 Claude의 AI가 가끔씩 자체적으로 가장 높은 확률을 가진 토큰을 놓쳐버리던 사건이죠.

수치적 오류와 씨름해본 사람이라면 Hari의 말이 가슴에 와닿을 겁니다. "행렬 알고리즘 디버깅은 끔찍하다," 그는 씁니다. "부동소수점 숫자 덩어리를 멍하니 보고 벽에 머리를 박게 된다." 딱 맞는 표현입니다. 그는 한때 행렬 루틴을 위해 확장 정밀도(extended precision) 솔버를 만든 경험을 공유하는데, 그 솔버가 부동소수점 오류를 추적하는 데 결정적인 역할을 했다고 합니다—작은 부정확성들이 축적되어 큰 실패로 번지는 그런 교활한 문제들 말이죠. AI 토큰 생성처럼 높은 스테이크의 연산에서는 소수점 하나의 위치가 모든 걸 망가뜨릴 수 있다는 걸 다시 상기시켜 줍니다.

그럼 버그 자체를 좀 더 자세히 들여다보죠. 왜냐하면 이건 AI 엔지니어링이 마법과 흑마술의 혼합이라는 걸 잘 보여주는 사례니까요. 2024년 12월경, Anthropic 팀은 그들의 TPU 설정—AI 수학 연산을 처리하는 Google의 강력한 하드웨어—이 temperature(출력 무작위성을 조절하는 매개변수)를 0으로 설정했을 때 가끔씩 가장 확률이 높은 토큰을 떨구는 현상을 발견했습니다. 그들은 일단 빠른 우회책을 붙여 시스템을 안정화시켰습니다.

Anthropic의 TPU top-k 버그에 대한 코드 조각과 근본 원인 설명

그 이미지가 바로 결정적 증거입니다. 코드 해킹은 각 행(row)에서 최고 logit(확률로 변환되기 전의 원시 점수)을 수동으로 보존해서 확률 비교가 엉키는 엣지 케이스를 피하도록 합니다. 하지만 시간이 흘러 2025년 8월, 어떤 코드 수정이 실수로 XLA 컴파일러의 더 깊은 문제를 드러냈습니다—바로 컴파일러가 연산의 정밀도를 자동으로 올려버리는 동작 때문이었습니다.

원인을 간단히 설명하면 이렇습니다: Claude는 다음 토큰 확률을 bf16(메모리와 성능 절약을 위한 빠른 16비트 부동소수점 포맷)으로 계산합니다. 그러나 TPU는 본래 fp32(더 높은 정밀도의 32비트)를 네이티브로 사용합니다. 여기서 컴파일러가 기회를 포착해 xla_allow_excess_precision라는 플래그(기본값 true)를 통해 일부 연산을 자동으로 fp32로 업그레이드했습니다. 스마트해 보이지만 문제가 생겼습니다. "top-k 토큰을 찾는" 수학의 일부가 다른 정밀도로 실행되면서 어떤 토큰이 우선순위인지 서로 다르게 판단하게 된 겁니다. 결과적으로—가장 확률이 높은 선택이 경쟁에서 사라져버렸습니다.

이 문제는 8월 25일부터 Claude Haiku 3.5에 큰 영향을 미쳤고, Sonnet 4와 Opus 3에도 파급을 일으켰습니다. 사용자들은 이상한 문자들이 영어 텍스트에 끼어들거나 코드에서 문법 오류 같은 뒤틀림이 생기는 등 엉망인 출력물을 목격했습니다. Anthropic은 Haiku에서는 9월 4일, Opus에서는 9월 12일에 변경 사항을 롤백했고 Sonnet에는 사전 예방적으로 적용했습니다. 지금은 XLA 팀과 협력해 올바른 컴파일러 수정 작업을 진행하는 한편, 임시 방편으로 정밀도를 끌어올린 정확한 exact top-k를 실행하고 있습니다(약간의 속도 저하가 있지만 정확성이 우선).

이건 단순한 AI의 실수만이 아닙니다—블록체인 개발자들에게도 경종을 울리는 사례입니다. 밈 토큰 스마트 컨트랙트나 DeFi 알고리즘은 가격 책정, 수확량 최적화(yield farming), 혹은 생성형 NFT 아트에까지 확률적 모델이나 행렬 연산을 의존할 때가 많습니다. 부동소수점의 실수 하나가 자금 손실이나 이상한 토큰 드롭으로 이어질 수 있습니다. Hari가 쓴 확장 정밀도 트릭은 Solidity나 Rust로 된 코드의 엣지 케이스 감수성 검토(audit)에서 금과도 같은 팁입니다.

Anthropic의 투명성은 정말 칭찬할 만합니다. 그들은 중첩된 버그들(라우팅 문제와 출력 손상 포함)을 모두 인정했고, 재현 코드를 XLA 팀과 공유했으며 테스트를 강화했습니다. 우리 같은 크립토 실무자들에게도 이는 정밀도 검증과 다양한 하드웨어 시뮬레이션을 두 배로 신경 쓰라는 신호입니다. 다음에 모델이 수상하게 굴면, 정밀도를 올려보고 무슨 변화가 일어나는지 확인해 보세요.

여러분은 어떠세요—dApp에서 부동소수점 유령 같은 문제를 디버깅해 본 적 있나요? 아래에 여러분의 고생담을 남겨 주세요.

추천 기사