RBLN PyTorch: RBLN NPU를 위한 PyTorch 확장¶
RBLN PyTorch 베타 상태
RBLN PyTorch는 현재 베타 단계이며 활발히 개발 중입니다. 릴리스마다 API가 변경되거나 제거될 수 있으며 하위 호환성이 보장되지 않습니다. 현재 지원되는 연산은 제한적입니다. 사용해 보고 피드백을 보내 주시기 바랍니다. 피드백은 정식 릴리스를 위한 안정화에 반영됩니다.
개요¶
RBLN PyTorch(torch-rbln)는 PyTorch에서 RBLN NPU를 직접 사용할 수 있게 하는 PyTorch 확장입니다. eager(define-by-run) 실행을 지원하므로 모델 개발, 디버깅, 서빙 전반에서 익숙한 PyTorch 워크플로를 유지할 수 있습니다.
torch-rbln은 표준 PyTorch 코드에서 RBLN NPU를 자연스럽게 사용할 수 있도록 설계되었습니다. 이를 위해 rbln 디바이스 문자열, torch.rbln 모듈, rbln 백엔드의 torch.compile 등을 구현합니다. Rebel100™(RBLN-CR 카드)과 ATOM™(RBLN-CA 카드) 두 NPU 제품군에서 실행되며 PyTorch 코드에서 나타나는 차이는 실행 방식 › Rebel100™과 ATOM™에 정리되어 있습니다. 이 페이지에서는 RBLN PyTorch의 기능, 동작 방식, 이를 가능하게 하는 소프트웨어 계층과 다음에 참고할 문서를 설명합니다.
RBLN PyTorch의 기능¶
| 인터페이스 | 제공 기능 | 관련 문서 |
|---|---|---|
device="rbln" | cuda나 cpu에서 작성하는 것과 같은 코드로 RBLN NPU에서 텐서 생성, 산술, 인덱싱, 복사를 수행합니다. eager 연산은 연산자별로 컴파일하여 캐시에 저장됩니다. | 실행 방식, 지원 연산(eager) |
torch.rbln | 디바이스 관리와 속성(device_count, set_device, synchronize, device_summary, get_device_properties), 스트림과 이벤트, 메모리 통계와 할당기 제어, 드라이버 메모리 조회(mem_get_info), 숨은 오버헤드를 설명하는 explain(), torch.compile이 만든 프로그램을 확인하는 capture_programs()를 제공합니다. | API, 컴파일된 프로그램 |
torch.compile(backend="rbln") | RBLN Compiler로 그래프를 컴파일합니다. 백엔드는 첫 torch.compile 호출에서 등록됩니다. | 실행 방식 |
torch.distributed의 rbln-ccl 백엔드 | RBLN 디바이스 간 집합 통신용 c10d 프로세스 그룹입니다. 실제 하드웨어가 필요합니다. | 튜토리얼: rbln-ccl 집합 통신, 실행 방식 › 분산 실행 |
torch.profiler 브리지 | 런타임을 시작하기 전에 RBLN_PROFILER=1을 설정하면 RBLN NPU의 트레이스가 Kineto 브리지를 통해 torch.profiler 트레이스에 포함됩니다. Rebel100™ NPU에서만 지원하며 ATOM™ NPU에서는 호스트 활동이 표시됩니다. | 튜토리얼: Rebel100™ 프로파일링 |
python -m torch_rbln.diagnose | 라이브러리 검색 경로, 패키지 위치, 로드한 librbln.so, ABI(Application Binary Interface) 판정 결과를 출력합니다. | 설치, 문제 해결 |
실행 흐름¶
PyTorch 연산이 실행되면 디스패처가 텐서의 디바이스 메타데이터를 기준으로 백엔드를 선택합니다. rbln 디바이스의 텐서는 PrivateUse1 키를 통해 RBLN 경로로 라우팅된 뒤 torch.compile을 거쳐 RBLN Compiler로 전달됩니다.
torch.add같은 사용자 연산은aten::add같은 ATen 연산자로 해석됩니다.- PyTorch 디스패처가
rbln텐서를PrivateUse1으로 라우팅합니다. 이 키는 PyTorch가 RBLN 같은 out-of-tree 백엔드를 위해 예약한 디스패치 키입니다. torch.compile은 RBLN 경로의 진입점입니다. eager 모드에서는 연산자를 각각 컴파일하고torch.compile(backend="rbln")로 명시적으로 캡처한 그래프는 전체를 컴파일합니다.- RBLN Compiler는 RBLN 경로의 컴파일과 실행을 담당합니다.
- RBLN Driver는 저수준 디바이스 인터페이스를 제공합니다.
계산을 수행하는 연산자와 달리 데이터 이동이나 인덱싱만 수행하는 연산자(copy_, view, cat, index_select 등)는 RBLN PyTorch의 네이티브 C++ 구현을 사용하며 컴파일러를 거치지 않습니다. 지원 연산 표에는 eager 실행에서 각 연산자가 사용하는 경로가 표시되어 있습니다. torch.compile 그래프 안에서는 RBLN Compiler가 경로를 결정합니다.
소프트웨어 스택¶
앞의 런타임 흐름은 RBLN PyTorch에서 각 연산의 실행 순서를 보여 줍니다. 다음 스택은 같은 시스템을 PyTorch, torch-rbln, RBLN Compiler, RBLN Driver의 소프트웨어 계층으로 나눈 것입니다. 컴파일러 계층에는 컴파일과 실행에 필요한 런타임 구성 요소가 포함되며 드라이버는 RBLN NPU의 저수준 하드웨어 인터페이스를 제공합니다.
| 계층 | 라이브러리 / 파일 | 역할 |
|---|---|---|
PyTorch(torch) | libtorch_python.so | Python과 PyTorch C++ 백엔드 사이의 인터페이스 |
libtorch.so | PyTorch 메인 라이브러리. PyTorch C++ API 제공 | |
libtorch_cpu.so | LibTorch CPU 백엔드. CPU fallback 연산도 실행 | |
libc10.so | PyTorch 저수준 유틸리티와 핵심 구조(텐서 관리, 디바이스 추상화, 메모리 할당 등) | |
RBLN PyTorch(torch-rbln) | libtorch_rbln.so | ATen 연산자 C++ 라이브러리: 복사, 뷰, 인덱싱 등 데이터 이동 커널, c10d 프로세스 그룹, Kineto 브리지 |
register_ops.py | 빌드 시 native_functions.yaml에서 생성하는 계산 연산자용 Python 바인딩. 각 바인딩은 torch.compile로 해당 연산자를 컴파일 | |
libc10_rbln.so | RBLN C10 확장: 디바이스 타입, 할당기, 스트림, 로깅, libc10의 디바이스 매핑 훅 | |
torch.rbln | rbln 디바이스 모듈로 등록하는 Python 모듈: 디바이스 관리, 스트림과 이벤트, 메모리, explain() | |
RBLN Compiler(rebel-compiler) | librbln.so | RBLN NPU용 런타임 구성 요소를 포함하는 컴파일러 라이브러리. torch-rbln이 import 시 확인하는 ABI 진입점 제공 |
| RBLN Driver | librbln-thunk.so | RBLN NPU용 저수준 디바이스 / 하드웨어 인터페이스 |
torch-rbln과 rebel-compiler는 함께 릴리스됩니다. 각 SDK 릴리스에 포함되는 버전은 릴리스 노트에 기재되어 있으며 import 시 ABI 검사로 설치한 두 패키지의 호환성을 확인합니다.
다음 단계¶
- 설치 - 사전 빌드 휠 설치와 소스 빌드 방법
- 실행 방식 -
device="rbln"과device="cuda"의 동작 차이(dtype, 지연 메모리 할당, eager 디스패치, CPU fallback) - 튜토리얼: 실행 및 디버깅 - 첫 연산과 모듈 실행, fallback 로그와
explain()보고서 읽기 - 튜토리얼: Rebel100™ 프로파일링 -
torch.profiler트레이스의 RBLN 디바이스 행 읽기 - 튜토리얼: rbln-ccl 집합 통신 -
torch.distributed로 두 RBLN 카드 간all_gather실행 - 튜토리얼: Llama3.2-1B -
transformers모델 포팅, 순전파 설명과 컴파일,float32CPU 기준 결과와 비교 검증 - API 및 지원 연산 -
torch.rbln모듈과 eager 연산자 지원 범위 표 - 환경 변수 - 로깅, fallback 제어, 디바이스 매핑, 텐서 병렬 실행, ABI 검사
- 문제 해결 - 일반적인 설정 및 런타임 문제 해결과 문제 보고 방법