요즘.zip
커뮤니티 해설난이도 어려움파이토치 한국 사용자 모임 · 10월 20일(화) 공개

TorchTPU: PyTorch 코드를 Google TPU에서 직접 실행하기

기존 PyTorch 코드를 TPU에서 실행하는 새 백엔드의 원리와, 호환성·정밀도·대규모 학습 성능을 어떤 조건에서 확인했는지 살펴봅니다.

쉽게 말하면비유하자면 한 조리 기구에 맞춰 쓴 조리법을 다른 종류의 조리 기구에서도 거의 그대로 쓸 수 있게 해 주는 연결 장치다. 요리는 되지만, 새 기구의 화력을 다 쓰려면 조리법을 따로 손봐야 한다.

왜 봐야 하나
AI 개발 도구 PyTorch로 만든 모델을 구글의 AI 전용 칩 TPU에서 시험해 볼 문턱이 낮아졌다는 뜻이다. 다만 오류 없이 도는 것, 같은 결과를 내는 것, 빠르게 도는 것은 따로 확인해야 한다. 호환성·성능 수치는 개발팀 보고이며 독립 재현한 것은 아니다.

Google와 Meta가 공개한 TorchTPU는 기존 PyTorch 코드를 Google TPU에서 실행하도록 연결하는 백엔드다. 익숙한 즉시 실행과 torch.compile을 지원해 코드를 옮기는 부담을 줄이고, 필요한 경우 TPU에 맞춰 더 최적화할 수 있게 한다. 이 글은 그 원리와 모델 호환성·정밀도·대규모 학습 실험을 설명한다. 원문은 10월 20일 발표됐고 한국어 포럼에는 다음 날 유입됐다. 개발팀이 제시한 실행 성공률과 수치 검사 통과율은 분모와 목적이 다르므로 구분해서 읽어야 한다.

알아낸 것

  • Google와 Meta가 PyTorch의 연산·컴파일·분산 기능을 TPU에 연결하는 공개 백엔드를 소개했습니다.
  • 4,917개 모델 중 4,821개가 실행 검사를, 별도 대표 모델 657개 중 638개가 허용 오차 내 수치 검사를 통과했습니다.
  • 235B 모델 학습에서 TPU 칩과 전체 배치를 함께 늘렸을 때 처리량이 확장됐으며, 하드웨어와 병렬화에 맞춘 최적화를 사용했습니다.

한계와 주의할 점

  • 원문은 10월 20일 공개됐고 포럼에는 10월 21일 유입됐습니다. 포럼 날짜를 새 발표일로 사용하지 않았습니다.
  • 오류 없이 실행되는 것과 같은 결과를 내는 것, 빠르게 실행되는 것은 서로 다른 검증입니다.
  • 동적 입력 크기와 일부 정밀도·운영 기능은 보강 중이며, 공식 개발팀의 성능 보고를 독립 재현한 것은 아닙니다.

용어 풀이

eager 실행
PyTorch의 기본 실행 방식으로, 연산을 호출하는 즉시 하나씩 실행한다. TorchTPU는 Strict(기본)·Debug(동기)·DeferAndFuse(지연 융합) 세 가지 eager 모드를 제공한다.
StableHLO
ML 연산을 표현하는 상위 수준 중간 표현(IR)이다. TPU는 XLA 컴파일러를 통해 StableHLO를 입력받아 실행 파일로 컴파일한다. PyTorch의 뷰·제자리 쓰기와 달리 순수 함수형이라 변경이 불가능하다.
BF16
bfloat16이라는 16비트 수 표현 방식이다. 수를 표현할 범위와 정밀도의 균형을 바꿔 행렬 계산을 빠르게 하며, TPU의 기본 행렬 곱셈에서는 FP32 누적과 함께 사용된다. 정확도 영향은 모델과 연산에 따라 확인해야 한다.
MFU
모델이 사용하는 부동소수점 연산 처리량을 장비의 이론적 최대 처리량과 비교한 비율이다. 같은 정밀도와 계산량 산정 조건에서 하드웨어 활용 수준을 살피는 지표로, 업무 정답률과는 다르다.
weak scaling
전체 문제 크기를 하드웨어 수에 비례해 늘리면서 칩당 처리량이 유지되는지 보는 확장성 지표다. Qwen3 MoE 235B 실험에서 1024칩→8192칩으로 늘릴 때 배치를 8배 늘려도 TensorCore당 TPS가 거의 유지된 것이 이에 해당한다.
bounded dynamism
텐서 차원의 최대 상한을 컴파일 시점에 알고, 실제 크기는 런타임에만 알 수 있는 경우를 지원하는 기능이다. 동적 버퍼를 상한 크기로 할당하고 XLA가 패딩·슬라이싱을 자동 처리해 재컴파일을 피한다. 현재 개발 중이며 기본으로 비활성화돼 있다.
Pallas
TPU용 커널을 작성하기 위한 JAX 기반 언어다. TorchTPU는 torch.tpu.pallas.jax_op API로 Pallas 커널을 PyTorch 함수처럼 호출할 수 있게 하며, Tokamax 라이브러리도 Pallas로 작성됐다.

더 깊이 읽기 읽는 데 약 7분

배경과 문제

TPU는 머신러닝의 행렬 곱셈을 빠르게 처리하도록 설계된 전용 칩이다. 그러나 칩이 빠르다는 것만으로 기존 PyTorch 프로그램을 쉽게 옮길 수 있는 것은 아니다. 연산을 TPU가 실행할 형태로 바꾸고, 메모리·통신·컴파일을 연결하는 소프트웨어가 필요하다. 익숙한 개발 방식이 달라지면 작은 실험이나 오류 추적부터 어려워진다.

TorchTPU는 2025년 중반 Google에서 시작해 Meta의 PyTorch 팀과 협력한 프로젝트다. 표준 PyTorch 연산을 쓰는 모델이 장치 이름을 cuda에서 tpu로 바꾸는 정도의 적은 수정으로 실행되도록 설계됐다. 이는 이식의 출발점을 낮춘다는 뜻이다. GPU에 맞춰 작성한 연산이나 샤딩 방식까지 자동으로 TPU의 최고 성능을 낸다는 뜻은 아니다.

기존 접근의 한계

공식 글은 이전 PyTorch/XLA가 Lazy Tensor와 컴파일 중심의 방식이어서 코드 수정, 컴파일 지연, 새로운 분산 기능 지원에 부담이 있었다고 설명한다. TorchTPU가 우선하는 것은 PyTorch처럼 연산을 호출하며 확인하는 eager 실행이다. 이후 속도가 필요할 때 여러 연산을 묶어 컴파일하는 흐름으로 이어진다.

여기에는 단순 번역 이상의 문제가 있다. PyTorch에서는 여러 텐서가 같은 저장 공간을 바라보고 그 값을 제자리에서 바꿀 수 있다. 반면 TPU 컴파일에 사용하는 StableHLO는 새 값을 만드는 함수형 표현이다. TorchTPU는 공유된 데이터의 일부를 보는 뷰와 그 변경을 추적·변환해, 익숙한 PyTorch 동작을 유지하면서 컴파일 가능한 형태로 바꾼다.

구현 방식: 연산부터 컴파일·분산 실행까지

먼저 PyTorch가 연산을 디스패치하면 C++로 만든 TPU 백엔드가 이를 받는다. Strict는 기본 eager 모드로 연산을 하나씩 TPU에 보내되 CPU와 비동기로 진행한다. Debug는 실행을 동기화해 문제 지점을 찾기 쉽게 한다. DeferAndFuse는 연산을 잠시 모았다가 결과를 CPU로 가져오는 등 값이 실제 필요한 지점에 함께 실행해, 작은 연산을 여러 번 처리하는 부담과 중간 저장 공간을 줄인다.

모아 둔 연산은 StableHLO로 표현하고 XLA가 TPU 실행 코드로 컴파일한다. torch.compile을 쓰면 더 큰 계산 그래프를 묶을 수 있다. 반복 실행은 프로세스 안, 같은 머신, 원격 저장소의 캐시로 재컴파일을 줄인다. 원격 영속 캐시는 별도 활성화가 필요하며, 처음 보는 그래프나 입력 크기에서 생기는 컴파일 비용까지 사라지는 것은 아니다.

분산 실행은 PyTorch의 Process Group 인터페이스와 연결돼 FSDP 같은 도구를 이용한다. 최고 성능이 필요한 연산에는 Pallas 커널을 선택해 쓸 수 있다. 기본 백엔드가 JAX 런타임을 필수로 쓰지 않는다는 것과, 선택적으로 JAX 기반 Pallas 코드를 연결할 수 있다는 것은 양립한다. 모든 사용자가 다른 프레임워크로 모델 전체를 다시 작성해야 하는 구조는 아니다.

결과와 숫자의 의미

모델 호환성 검사에서는 4,917개 중 4,821개, 약 98%가 오류 없이 실행됐다. 이는 합성 가중치로 실행·그래프 변환·컴파일을 확인하는 검사이며 모델의 업무 정확도 98%가 아니다. 수치 검사는 별도 대표 모델 657개 중 638개, 약 97%가 통과했다. LLM은 GPU 기준 퍼플렉서티의 상대 차이 0.10 이내, 다른 모델은 정해진 평균제곱오차 기준을 사용했다. 통과는 허용 오차 안이라는 뜻이지 모든 출력이 비트 단위로 같다는 뜻이 아니다.

대규모 학습은 Qwen3 MoE 235B, TPU v7, 길이 4,096의 입력, TensorCore당 배치 16 조건이다. 1,024칩에서 8,192칩으로 늘릴 때 전체 배치도 32,768에서 262,144로 늘렸다. TensorCore당 초당 토큰 수는 2,236에서 2,104, MFU는 28.8%에서 27.1%, 한 단계 시간은 29.3초에서 31.2초였다. 장비 수만큼 일을 더 맡겨도 개별 장비의 처리 효율이 비슷한 약한 확장성(weak scaling) 결과다. 같은 고정 작업이 8배 빨라졌다는 실험은 아니다.

이 235B 실험에는 Pallas 커널, 활성값 오프로딩과 재계산, 여러 층을 묶는 scan, 통신과 계산의 겹치기 등 최적화가 들어갔다. 별도의 순수 PyTorch 코드 예시와 같은 조건으로 합칠 수 없다. 처리량 그래프는 규모 확대를 보여주지만, 손실 그래프는 첫 12단계만 비교한다. 따라서 최종 학습 수렴까지 같다고 입증한 결과로 읽어서는 안 된다.

구체적인 예시

정밀도는 실제 이식에서 확인할 문제다. 기본 medium 모드의 TPU 행렬 곱셈은 입력을 BF16으로 바꾸고 합을 FP32로 누적한다. 따라서 FP32 텐서를 쓴다는 사실만으로 다른 장치와 같은 계산 정밀도를 기대할 수 없다. high는 3회, highest는 6회로 계산을 나눠 더 높은 정밀도를 근사한다. 약 3배·6배 비용은 해당 행렬 연산의 추가 계산량에 대한 설명이며 전체 프로그램 지연이 반드시 그만큼 늘어난다는 뜻은 아니다.

원문에는 FLUX 모델을 단계적으로 최적화한 실제 예도 있다. eager 기준 학습 단계 시간이 11.49초였고, DeferAndFuse, 샤딩, 전용 attention 커널, torch.compile 등을 차례로 적용한 뒤 최종 2.78초가 됐다. 하나의 설정만 바꾼 효과가 아니라 여러 변경의 누적 결과다. 이 예는 코드를 옮겨 실행하는 단계와 하드웨어를 충분히 활용하는 단계를 구분해야 하는 이유를 보여준다.

한계와 오해하기 쉬운 점

호환성 및 성능 수치는 개발팀의 보고를 확인한 것이며, 이번 해설에서 직접 실행해 재현한 것은 아니다. 공식 글이 인용하는 외부 추론 비용 벤치마크도 특정 모델·소프트웨어·입출력 길이 조건의 결과다. 이를 상용 API의 실제 요금표나 모든 GPU보다 저렴하다는 결론으로 확대할 수 없다.

동적인 입력 크기 지원에는 일부 시험 결과가 있지만 완전히 끝난 기능으로 볼 수 없다. 글은 bounded dynamism의 운영 안정화, 연산 범위 확대, 향후 TPU의 FP8·FP4 지원, 강화학습 실행과 진단 도구 등을 앞으로 보강할 계획으로 설명한다. 현재 제공하는 기능과 다음 6~12개월의 개발 목표를 구분해야 한다.

실제로 어떻게 활용할까

실무에서는 기존 CPU나 GPU에서의 출력, 입력 크기, 자료형을 기준으로 정하고 TPU eager 실행 결과를 먼저 비교하는 방식으로 접근할 수 있다. 이 단계에서 오류와 허용 오차를 확인한 다음 컴파일과 캐시를 적용하면, 어떤 변경이 결과와 성능에 영향을 주는지 구분하기 쉽다. 이는 이 글의 구조에서 도출한 활용 방법이며 새로 수행한 실험 결과는 아니다.

성능을 판단할 때는 입력을 처음 처리하는 속도, 다음 토큰 생성 속도, 학습 단계 시간, 메모리 사용량을 따로 재야 한다. 모델에 따라 Pallas 커널이나 vLLM·SGLang·TorchTitan 같은 스택을 추가로 검토할 수 있다. TorchTPU의 가치는 기존 PyTorch 개발 흐름에서 TPU를 시험할 길을 넓힌 데 있으며, 모든 연산 지원이나 특정 서비스의 비용 절감을 보장한 데 있지는 않다.

원문에서 확인한 근거 5곳
  • TorchTPU는 eager 실행을 우선하고, 표준 PyTorch 코드의 장치 지정 등 적은 수정으로 TPU 이식을 시작하도록 설계됐다. 모든 코드의 무수정 실행이나 최고 성능을 보장하는 것은 아니다.Introducing TorchTPU
  • Strict·Debug·DeferAndFuse는 각각 연산별 비동기 실행, 동기 디버깅, 연산을 모아 융합하는 eager 실행 방식이다.Eager execution, StableHLO lowering, and
  • Hugging Face 모델 검증에서 Tier 1은 4,917개 중 4,821개(98%)가 크래시 없이 실행됐고, Tier 2는 657개 중 638개(97%)가 GPU 대비 수치 검사를 통과했다.1: Hugging Face Model Coverage
  • Qwen3 MoE 235B의 TPU v7 확장 실험은 전체 배치도 장비 수에 맞춰 늘렸다. TensorCore당 TPS는 2,236에서 2,104, MFU는 28.8%에서 27.1%였으며 고정 배치 가속 실험이 아니다.Case Study 3: Scaling Training
  • 기본 medium 행렬 곱셈은 BF16 입력과 FP32 누적을 쓴다. high와 highest의 약 3배·6배 비용은 여러 차례 나눠 계산하는 행렬 연산 비용이며 전체 실행 시간의 고정 배율이 아니다.Numerical Precision

10월 22일(목) 정리 · AI가 쓰고 원문과 대조

AI 목록

다른 AI 글

전체 보기
물리 연구를 통째로 맡겨 보는 AI 시험 FrontierPhysics물리학자 42명이 자기 연구로 만든 과제 56개를 AI 에이전트에게 통째로 맡겼더니, 가장 잘한 AI도 168번 가운데 46…평가·벤치마크난이도 보통AI가 아는 것과 '안다'는 말의 차이를 잰 벤치마크 FinDendro날짜가 붙은 미국 금융 사실 2,226건으로 AI가 실제로 맞히는 것과 '안다'고 말하는 것을 견줬더니, 대부분의 모델에서…평가·벤치마크난이도 보통에이전트 메모에 근거 기록을 연결하는 기억 기법 WikiTraceAI 에이전트가 쌓아 둔 교훈마다 근거가 된 작업 기록을 연결해 되짚게 했더니, 메모 때문에 틀리는 일이 줄고 평균 점수가…연구 · 프리프린트난이도 보통세포 종류별로 DNA 변이 영향을 예측하는 알파게놈 2DNA 100만 글자와 '어떤 세포인지'를 함께 넣는 모델을 만들어, 변이가 세포 종류마다 유전자 활동을 어떻게 바꾸는지 이…공식 연구 발표난이도 어려움시그널 암호 코드 보안을 AI가 증명한 AlphaProof Code사람이 '무엇을 증명할지'를 정하면 AI 에이전트 팀이 증명을 쓰는 방식으로, 메신저 시그널의 암호 코드가 보안 약속을 지킨…공식 연구 발표난이도 어려움AI 모델 파일에 남은 GPU 지문을 읽는 체크포인트 포렌식공개된 AI 모델 파일에 남은 초기값 흔적으로 첫 값을 만든 GPU 계열을 가려내는 방법을 내놓았다. 중국 4개 회사의 모델…기술 보고서난이도 어려움생활 속 일을 실제로 해내는 AI를 평가하는 LifeVal시간 사용 조사와 이용자 설문으로 생활 과제를 정한 평가이며, 공개된 일부 과제 점수의 의미와 한계를 살펴봅니다.평가난이도 쉬움잡음을 지웠더니 언어 판별이 나빠졌다: SceneMaker의 한국어 방송 실험한국어 방송 6편의 발화 3,115구간에서 잡음 제거가 언어 판별 점수를 낮춘 사례를 살펴보고, 검수 방식과 적용 범위를 구…커뮤니티 해설난이도 보통