문제 해결¶
librbln.so / librbln_runtime.so를 찾을 수 없음¶
이 문제는 rebel-compiler와 함께 설치된 RBLN 런타임 라이브러리가 현재 Python 환경의 동적 로더에서 보이지 않을 때 발생합니다.
| 대표 메시지 | 패키지 |
|---|---|
RuntimeError: Cannot find libraries: ['librbln.so', 'librbln_runtime.so'] |
rebel-compiler |
FileNotFoundError: Could not find librbln.so |
torch-rbln |
다음 순서로 확인하세요.
rebel-compiler가 설치된 동일한 환경을 활성화합니다.pip show rebel-compiler또는uv pip list | grep rebel로 확인할 수 있습니다.- 다른 스택에서 설정한
LD_LIBRARY_PATH또는PYTHONPATH가 라이브러리 검색 순서에 영향을 주고 있는지 확인합니다. 가능하면 깨끗한 셸이나 프로젝트 venv만 사용하세요. - 구성이 불확실하면 설치 문서를 따라
rebel-compiler와torch-rbln을 다시 설치합니다.
추가 진단이 필요하면 다음 명령을 실행하세요.
torch 또는 rebel import가 먼저 실패하는 경우에는 다음 명령을 실행하세요.
보고서에는 LD_LIBRARY_PATH와 PYTHONPATH, torch-rbln과 rebel-compiler 패키지 위치, librbln.so 후보로 검토한 경로 목록과 그중 실제로 로드된 경로, 그리고 현재 환경의 rebel ABI 판정이 표시됩니다.
torch-rbln과 librbln.so의 ABI 불일치¶
import torch는 autoload 진입점을 통해 torch-rbln을 로드하고, 이때 로드한 librbln.so가 이 휠을 빌드할 때 기준으로 삼은 인터페이스를 구현하는지 확인합니다. 그 범위를 벗어나면 undefined symbol 크래시나 런타임 내부 손상으로 이어지는 대신, 사용 중인 라이브러리와 양쪽 버전을 알려주는 RBLN ABI mismatch 메시지와 함께 import가 실패합니다.
| 대표 메시지 | 원인 |
|---|---|
RBLN ABI mismatch: ... librbln.so only implements ABI <n> |
설치된 rebel-compiler가 torch-rbln보다 오래됨 |
RBLN ABI mismatch: ... librbln.so no longer accepts consumers below ABI <n> |
설치된 rebel-compiler가 torch-rbln보다 최신임 |
다음 순서로 확인하세요.
- 같은 SDK 릴리스의
torch-rbln과rebel-compiler를 설치합니다. 함께 배포되는 버전은 릴리스 노트에서 확인할 수 있습니다. python -m torch_rbln.diagnose를 실행하면 어떤librbln.so가 로드되었는지, 휠이 어떤 인터페이스를 기준으로 빌드되었는지, 런타임이 허용하는 범위와 그 판정 결과를 확인할 수 있습니다.
이 검사보다 앞선 런타임이거나 그런 런타임으로 빌드된 torch-rbln이면 비교할 대상이 없으므로, import는 경고만 남기고 계속 진행합니다.
버전이 맞는 휠을 아직 구할 수 없다면 검사를 건너뛰어 장비를 임시로 사용할 수 있습니다.
| 변수 | 설명 | 기본값 |
|---|---|---|
TORCH_RBLN_SKIP_ABI_CHECK |
인터페이스 검사를 건너뛰어, 버전이 맞지 않는 torch-rbln과 librbln.so를 함께 로드합니다 |
unset |
Warning
검사를 건너뛰면 실제 비호환이 발생하는 시점에 undefined symbol import 크래시나 런타임 문제가 발생할 수 있습니다.
코어 덤프 파일 수집¶
PyTorch RBLN 실행 중 문제가 발생하면 생성된 코어 덤프 파일을 client_support@rebellions.ai로 전달해 주세요.
1단계. ulimit 제한을 해제합니다.
2단계. 제한이 해제되었는지 확인합니다.
3단계. 문제가 발생한 모델 스크립트를 다시 실행합니다. 오류가 발생하면 /var/crash 아래에 코어 덤프 파일이 생성됩니다.
출력 예시는 다음과 같습니다.
CPU에서 실행되는 연산자 로그 확인¶
PyTorch RBLN이 아직 지원하지 않는 PyTorch 연산자나 특정 데이터 타입이 사용되면, 실행을 계속할 수 있도록 해당 연산은 CPU에서 수행됩니다. 이 동작은 모델 호환성을 높여 주지만, 해당 연산은 NPU 가속의 이점을 활용하지 못하므로 최적화 과정에서 이를 식별하는 것이 중요합니다.
기본적으로 PyTorch RBLN의 로그 레벨은 WARNING으로 설정되어 있어 CPU 폴백 메시지가 표시되지 않습니다. CPU 폴백 연산은 INFO 레벨에서 기록됩니다. CPU에서 실행되는 연산자를 확인하려면 TORCH_RBLN_LOG_LEVEL을 INFO 또는 더 상세한 레벨로 설정하세요.
| 레벨 | 설명 | 비고 |
|---|---|---|
DEBUG |
내부 상태, 함수 진입/종료, 파라미터 값 등 상세 정보 | 디버그 빌드 전용 |
INFO |
CPU 폴백 알림을 포함한 런타임 정보 | |
WARNING |
실행에 영향을 줄 수 있는 주요 경고 | 기본값 |
ERROR |
오류 및 치명적 장애만 출력 |
기본 설정으로 되돌리려면 다음 명령을 사용하세요.
이 설정으로 eager mode에서 모델을 실행하면, 연산이 RBLN NPU 대신 CPU에서 수행될 때마다 로그가 출력됩니다. 로그에는 연산자 이름과, 추적 가능한 경우 소스 코드 위치가 포함됩니다.
예상보다 낮게 표시되는 메모리 통계¶
memory_allocated() 또는 memory_stats()와 같은 메모리 통계 API가 rbln 디바이스에 텐서를 생성한 직후 예상보다 낮은 값을 반환할 수 있습니다. 큰 텐서를 할당한 후에도 디바이스 메모리 사용량이 0이거나 매우 낮게 보일 수 있습니다.
이는 RBLN 텐서가 lazy memory allocation을 사용하기 때문입니다.
- 텐서는 생성 시점에 먼저 CPU 메모리에 할당됩니다.
- 디바이스 메모리 할당은 실제로 디바이스 연산이 필요해질 때까지 지연됩니다.
- 디바이스 연산이 필요해지면 텐서 데이터가 CPU 메모리에서 디바이스 메모리로 전송됩니다.
memory_allocated(),memory_reserved(),memory_stats()와 같은 메모리 관련 API는 CPU 메모리가 아니라 디바이스 메모리만 반영합니다.torch.compile()에서 사용되는 Dynamo 캐시도 컴파일된 그래프와 관련 디바이스 메모리를 유지할 수 있습니다.
따라서 이러한 낮은 값은 버그가 아니라 예상된 동작이지만, 디버깅이나 성능 분석 과정에서 메모리 사용량을 해석하기 어렵게 만들 수 있습니다.
메모리 사용량을 더 정확하게 확인하려면 다음을 권장합니다.
- 텐서가 디바이스에서 materialize되는 연산을 수행한 뒤 메모리 통계를 확인합니다.
- 캐시된 그래프 메모리를 제외하려면 통계를 확인하기 전에 Dynamo 캐시를 리셋합니다.
캐시된 그래프 메모리를 제외하고 텐서 메모리 사용량만 확인하려면 메모리 통계를 확인하기 전에 torch._dynamo.reset()을 실행하세요.