TorchNeuron은 PyTorch 플러그인으로, Trainium용 새로운 백엔드를 제공하여 eager 모드와 torch.compile에 대한 지원을 가능하게 합니다.
또한 FSDP 및 TP와 같은 네이티브 분산 API도 지원합니다.
자세한 내용은 Pytorch 블로그를 읽어보세요.
2026년 10월 20일부터 TorchNeuron은 공개 베타로 이용 가능할 예정입니다. 연구원과 개발자는 pip install torch-neuronx를 통해 설치할 수 있습니다.
현재까지 Hugging Face의 AWS Trainium 및 Inferentia(각각 대규모 비용 효율적인 학습 및 추론을 위해 설계된 AI 칩)에서의 경험은 optimum-neuron을 통해 제공되어 왔습니다. 이 라이브러리는 PyTorch XLA를 기반으로 하는 torch-neuronx 패키지에 의존합니다. 이는 당시 자연스러운 선택이었지만, 컴파일러처럼 생각해야 함을 의미했습니다: eager 실행 대신 lazy tensor 사용, 정적 모양만 허용, 그래프가 끊길 때마다 재컴파일 필요 등이었습니다. Optimum Neuron은 이러한 복잡성을 숨기기 위해 존재했으며, 이를 수행하기 위해 사용자 정의 코드(모델링 클래스, 트레이너 등)를 유지 관리해야 했습니다.
TorchNeuron이 이 상황을 변화시킵니다. 이는 PyTorch에 직접 통합되어 neuron을 네이티브 장치로 노출하며, eager 실행, PyTorch 자체의 분산 프리미티브(DTensor, FSDP2), 그리고 torch.compile을 지원합니다.
Hugging Face 라이브러리의 경우, Trainium은 다른 어떤 장치와 마찬가지로 하나의 장치가 됩니다: Transformers, Diffusers, Accelerate, PEFT 및 TRL이 이 장치에서 직접 실행되며, 다른 모든 가속기에서 사용하는 것과 동일한 클래스와 스크립트를 사용합니다. 이제부터 Neuron 사용자들은 Optimum Neuron을 거치는 대신 이러한 라이브러리들을 직접 사용할 것을 권장합니다.
텍스트 생성은 이제 Transformers에서 광범위한 모델에 대해 네이티브로 지원됩니다. TorchNeuron을 사용하면, 상위 100개에서 가장 많이 사용되는 텍스트 생성 모델 아키텍처 중 89%가 별도의 설정 없이(out of the box) 지원되는데, 이는 Optimum Neuron v0.4.5의 46%에 비해 크게 증가한 수치입니다. 코드에서 device_map=neuron 인수를 전달하기만 하면 모델이 Neuron 장치로 이동하게 됩니다.
다음은 텐서 병렬 처리(tensor parallelism)를 사용한 텍스트 생성 예시로, Neuron 인스턴스의 모든 기능을 최대한 활용할 수 있도록 합니다. 이 코드는 반복적인 재컴파일을 방지하기 위해 Neuron에서 강력히 권장되는 정적 캐시(static cache)를 사용한다는 점에 유의하십시오.
import os
import torch
import torch.distributed as dist
...
이제 Neuron이 네이티브 PyTorch 장치가 되었기 때문에, Trainium에서 학습할 때 다른 모든 가속기와 동일한 Hugging Face 라이브러리(Transformers, Accelerate, PEFT, TRL)를 사용할 수 있습니다. 전용 트레이너나 모델 코드의 Neuron 전용 포크가 더 이상 필요하지 않습니다. 표준 TRL 파인튜닝 스크립트는 몇 가지 Neuron 전용 설정만으로 Trainium 인스턴스에서 실행됩니다.
다음은 TRL의 SFTTrainer를 기반으로 구축된 지도 학습 파인튜닝(supervised fine-tuning) 스크립트입니다.
. 이전에 GPU에서 TRL로 모델을 파인튜닝한 경험이 있다면 익숙하게 느껴질 것입니다.
import os
import torch
from datasets import load_dataset
...
병렬 처리는 Transformers에 의해 네이티브하게 처리됩니다. DistributedConfig를 사용하여 텐서 병렬(TP) 및 FSDP 크기를 model_init_kwargs에 지정하면, SFTTrainer가 이를 from_pretrained로 전달하고 모델 가중치가 로드됨에 따라 모델이 샤딩(sharded)됩니다. 트레이너는 이미 분산된 것을 감지하므로 다시 래핑하지 않습니다. 따라서 --fsdp 플래그나 Accelerate FSDP 설정이 필요 없습니다.
스크립트의 어떤 부분도 Trainium에 종속되지 않습니다. 동일한 코드가 모든 하드웨어에서 실행됩니다. 하지만 Trainium에서 실행할 때 알아두면 좋은 몇 가지 사항이 있습니다:
정적 형태(Static shapes). 이 스크립트는 torch.compile에서 자동 동적 형태를 비활성화하고, 최대 2048 토큰의 시퀀스를 생성하기 위해 래핑된 패킹(wrapped packing)을 사용합니다. TRL ≥ 1.16에서는 Neuron에서 배치(batches)가 128 토큰의 배수로 패딩되므로 입력 형태의 수가 제한됩니다. 컴파일된 그래프는 동일한 형태를 가진 후속 단계에 재사용됩니다. torch.compile을 . --torch_compile true로 전달하는 것만으로 충분합니다: Trainium 인스턴스에서, torch.compile
장치를 감지하고 Neuron 백엔드를 자동으로 선택하며, 별도의 설정이 필요 없습니다.비동기 가중치 로딩 기능 비활성화 (Async weight loading off). Transformers에 내장된 비동기 가중치 로딩은 Neuron에서 지원되지 않으므로, 현재는 HF_DEACTIVATE_ASYNC_LOAD=1로 이를 비활성화합니다.
아래 명령어는 torchrun을 사용하여 훈련을 시작하며, 이는 각 NeuronCore당 하나의 프로세스를 시작합니다. TP_SIZE와 FSDP_SIZE는 병렬 처리 레이아웃을 설정하고, 이들의 곱이 프로세스 수가 됩니다: 여기서는 4 x 8 = 32로, --nproc_per_node과 일치합니다. 이 32개의 프로세스는 4 x 8 그리드를 형성합니다. 텐서 병렬 처리(Tensor parallelism)는 각 레이어를 TP 그룹의 4개 코어에 걸쳐 분할하고, FSDP는 파라미터, 기울기(gradients), 옵티마이저 상태를 8개의 TP 그룹에 걸쳐 샤딩(shards)합니다.
TP_SIZE=4 FSDP_SIZE=8 HF_DEACTIVATE_ASYNC_LOAD=1 uv run torchrun --nproc_per_node=32 sft_neuron_example.py \
--model_name_or_path Qwen/Qwen3-8B \
--dataset_name HuggingFaceH4/ultrachat_200k \
...
이것은 8개의 Trainium2 칩(32 NeuronCore)에서 실행되었으며, 이는 trn2.48xlarge 인스턴스의 절반에 해당합니다.
훈련이 완료될 때까지 진행되며, trainer.save_model은 표준 Transformers 체크포인트를 작성합니다. 이 중 어느 것도 Neuron에 종속되어 있지 않으므로, 그대로 Hugging Face Hub에 푸시하여 다른 모든 하드웨어에서 로드할 수 있습니다.
Diffusers 라이브러리의 많은 파이프라인이 TorchNeuron의 eager 모드 및 컴파일된 모드와 호환됩니다. FLUX.1-dev, FLUX.2, Qwen-Image, Qwen-Image-2.1, H3 또한 텐서 병렬 처리를 통해 Neuron 장치를 최대한 활용할 수 있도록 호환됩니다. 다음은 TP를 사용하는 방법을 보여주는 예시입니다:
import torch, torch.distributed as dist, torch_neuronx # TP
from torch.distributed.device_mesh import DeviceMesh # TP
from diffusers import QwenImage21Pipeline, QwenImage21Transformer2DModel, TensorParallelConfig
...
이 코드 조각은 NEURON_LOGICAL_NC_CONFIG=2 torchrun --nproc_per_node=8 run.py로 실행할 수 있습니다.
TP와 호환되는 파이프라인이 점점 더 많아지고 있습니다. 만약 원하는 파이프라인이 호환되지 않는다면, 이 가이드에 따라 지원을 추가할 수도 있습니다.
모델을 가속화하기 위해 Neuron 커널이 Hub에 점점 더 많이 제공될 예정이니, Neuron 팀의 커널들을 꼭 확인해 보세요. Neuron 커널은 Neuron Kernel Interface (NKI)를 사용하여 작성할 수 있으며, 이를 통해 연산을 최적화하는 데 낮은 수준의 제어(lower control)가 가능합니다. 이러한 방식으로 사용자는 자신만의 사용자 정의 연산(custom operations)을 실행하고 Hub에 공유할 수 있습니다.
예를 들어, 이 커널을 사용하여 Trainium에서 비전 트랜스포머(vision transformers)를 최대 2.4배까지 가속화할 수 있습니다!
TorchNeuron 개발과 저희의 피드백에 대한 신속한 대응으로 HF 통합을 최대한 좋게 만들어주신 AWS 팀에게 특별히 감사드립니다.