콘텐츠로 이동

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로 전달됩니다.

PyTorch의 RBLN 런타임 경로: ATen op에서 Dispatcher로 전달된 RBLN 텐서는 PrivateUse1, torch.compile, RBLN Compiler, RBLN Driver를 차례로 거칩니다. 삽입 그림은 디스패처 행렬의 PrivateUse1 열을 강조합니다. PyTorch의 RBLN 런타임 경로: ATen op에서 Dispatcher로 전달된 RBLN 텐서는 PrivateUse1, torch.compile, RBLN Compiler, RBLN Driver를 차례로 거칩니다. 삽입 그림은 디스패처 행렬의 PrivateUse1 열을 강조합니다.

  1. torch.add 같은 사용자 연산은 aten::add 같은 ATen 연산자로 해석됩니다.
  2. PyTorch 디스패처가 rbln 텐서를 PrivateUse1으로 라우팅합니다. 이 키는 PyTorch가 RBLN 같은 out-of-tree 백엔드를 위해 예약한 디스패치 키입니다.
  3. torch.compile은 RBLN 경로의 진입점입니다. eager 모드에서는 연산자를 각각 컴파일하고 torch.compile(backend="rbln")로 명시적으로 캡처한 그래프는 전체를 컴파일합니다.
  4. RBLN Compiler는 RBLN 경로의 컴파일과 실행을 담당합니다.
  5. 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의 저수준 하드웨어 인터페이스를 제공합니다.

RBLN PyTorch 소프트웨어 스택: PyTorch부터 RBLN Driver까지 1–4번의 네 계층으로 구성됩니다. 컴파일러 계층에는 컴파일과 실행에 필요한 런타임 구성 요소가 포함되며 드라이버는 RBLN NPU의 저수준 인터페이스입니다. RBLN PyTorch 소프트웨어 스택: PyTorch부터 RBLN Driver까지 1–4번의 네 계층으로 구성됩니다. 컴파일러 계층에는 컴파일과 실행에 필요한 런타임 구성 요소가 포함되며 드라이버는 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 검사로 설치한 두 패키지의 호환성을 확인합니다.

다음 단계