PyTorch RBLN: RBLN NPU를 위한 PyTorch 확장¶
PyTorch RBLN 베타
PyTorch RBLN은 현재 베타 단계이며 활발히 개발 중입니다. 릴리즈마다 API가 변경되거나 제거될 수 있으며, 하위 호환성이 보장되지 않습니다. 현재 지원되는 연산이 제한적입니다. 아직 프로덕션 환경에서의 사용은 권장하지 않습니다. 많은 테스트와 피드백을 부탁드리며, 안정화 후 정식 릴리즈로 제공할 예정입니다.
요약¶
PyTorch RBLN (torch-rbln)은 PyTorch에서 RBLN NPU를 직접 사용할 수 있게 하는 PyTorch 확장입니다. eager(define-by-run) 실행을 지원하므로 PyTorch 생태계에서 모델 개발, 배포, 서빙 전반에 걸쳐 익숙한 워크플로우를 유지할 수 있으며, 디버깅에도 유용합니다.
CPU나 GPU에 사용되는 것과 같은 장치 지향 프로그래밍 모델을 따르기 때문에, PyTorch RBLN은 표준 PyTorch 코드에서 RBLN NPU를 자연스럽게 사용할 수 있도록 설계되었습니다. 이 페이지에서는 실행이 장치에 도달하는 방식, 이를 가능하게 하는 소프트웨어 계층, 그리고 설치, 지원 연산, 문제 해결로 이어지는 다음 단계를 설명합니다.
동작 방식¶
PyTorch 연산이 실행되면, 디스패처가 텐서의 장치 메타데이터를 기준으로 백엔드 구현을 선택합니다. rbln 장치의 텐서인 경우, 디스패처는 실행을 PrivateUse1을 통해 RBLN 경로로 라우팅하고 이후 torch.compile을 거쳐 RBLN 컴파일러로 보냅니다.
torch.add와 같은 사용자 연산은aten::add와 같은 ATen 연산자로 해석됩니다.- PyTorch 디스패처는 대상 백엔드의 구현을 선택하고
rbln텐서를PrivateUse1을 통해 라우팅합니다. PrivateUse1은 Out-of-Tree (OOT) 확장용으로 예약된 디스패치 키이며, RBLN과 같은 서드파티 백엔드가 사용합니다.torch.compile은 RBLN 경로의 진입점 역할을 합니다.- RBLN 컴파일러는 RBLN 경로의 컴파일과 실행을 담당합니다.
- RBLN 드라이버는 저수준 디바이스 인터페이스를 제공합니다.
소프트웨어 스택¶
위 런타임 흐름은 실행 순서를 보여 줍니다. 아래 스택은 같은 시스템을 PyTorch, torch-rbln, RBLN 컴파일러, RBLN 드라이버의 소프트웨어 계층으로 나눈 것입니다. 컴파일러 계층에는 컴파일과 실행을 위한 런타임 구성 요소가 포함되며, 드라이버는 RBLN NPU를 위한 저수준 하드웨어 인터페이스를 제공합니다.
위 그림에는 짧은 라벨만 표시했습니다. 각 박스는 아래 표에서 같은 계층 안의 행 하나에 대응하며, 순서도 위에서 아래까지 동일합니다. 구체적인 아티팩트는 라이브러리 / 파일 열에서, 보다 자세한 설명은 역할 열에서 확인할 수 있습니다.
| 계층 | 라이브러리 / 파일 | 역할 |
|---|---|---|
PyTorch (torch) |
libtorch_python.so |
Python과 PyTorch C++ 백엔드 사이의 인터페이스 |
libtorch.so |
PyTorch 메인 라이브러리; PyTorch C++ API 제공 | |
libtorch_cpu.so |
LibTorch CPU 백엔드 | |
libc10.so |
저수준 유틸리티 및 핵심 구조(텐서 관리, 디바이스 추상화, 메모리 할당 등) | |
PyTorch RBLN (torch-rbln) |
libtorch_rbln.so |
RBLN 런타임 호출(copy, resize 등)을 위한 ATen 연산 C++ 라이브러리 |
register_ops.py |
RBLN NPU용 Python 연산 구현(torch.compile 사용) |
|
libc10_rbln.so |
RBLN C10 확장: libc10을 RBLN 디바이스 타입 및 관련 훅(hook)용으로 확장 |
|
RBLN 컴파일러 (rebel-compiler) |
librbln.so |
RBLN NPU용 런타임 구성 요소를 포함하는 컴파일러 라이브러리 |
| RBLN 드라이버 | librbln-thunk.so |
RBLN NPU를 위한 저수준 디바이스 / 하드웨어 인터페이스 |