문제해결
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, rebel-compiler 패키지 위치, 그리고 검색 경로의 각 디렉터리에서 librbln.so / librbln_runtime.so를 찾을 수 있는지 여부가 표시됩니다.
코어 덤프 파일 수집¶
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()을 실행하세요.