콘텐츠로 이동

장치 모니터링 (rbln-smi)

rbln-smi는 RBLN NPU를 모니터링하고 관리하기 위한 명령줄 인터페이스(CLI) 도구입니다. 다음 기능을 지원합니다:

  • NPU 상태 모니터링 (온도, 전력, 활용도, 메모리)
  • 컨텍스트/프로세스 검사
  • 시스템 토폴로지 검사
  • RSD 그룹 관리 및 그룹 레벨 설정

rbln-smi는 RBLN 드라이버 패키지에 포함되어 있습니다. 전체 버전별 옵션 참조는 rbln-smi --help를 실행하세요.

Note

rbln-stat은 더 이상 사용되지 않으며 rbln-smi로 대체되었습니다. rbln-stat을 사용하는 기존 스크립트는 계속 동작할 수 있으나, 신규 사용에는 rbln-smi 사용을 권장합니다.

빠른 시작

$ rbln-smi

Expected output (example)

Monitor output (example)
+-------------------------------------------------------------------------------------------------+
|                                 Device Information KMD ver: N/A                                 |
+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| NPU |    Name   | Device  |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| 0   | RBLN-CA12 | rbln0   |  0000:51:00.0 |  38C |  43.9W  | P2   |   2.4GB / 15.7GiB   |  98.7 |
| 1   | RBLN-CA12 | rbln1   |  0000:d8:00.0 |  25C |   6.1W  | P14  |    0.0B / 15.7GiB   |   0.0 |
+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------+
|                                       Context Information                                       |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
| NPU | Process             |     PID      | CTX | Priority | PTID |            Memalloc | Status |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+
| 0   | python3             |   2928727    |  1  |   min    |  0   |              1.9GiB |  run   |
| 0   | python3             |   2930166    |  2  |   min    |  1   |            468.0MiB |  idle  |
| 0   | python3             |   2934705    |  3  |   min    |  2   |             88.0MiB |  idle  |
+-----+---------------------+--------------+-----+----------+------+---------------------+--------+

주요 개념 및 용어

디바이스 선택

  • 특정 NPU를 대상으로 하려면 -d, --device <ids>를 사용하세요 (쉼표로 구분된 목록 또는 범위).
  • 출력은 rbln0, rbln1과 같은 디바이스 레이블(Device 컬럼)을 참조합니다.

출력 형식

  • Table (기본값): 디바이스 및 컨텍스트에 대한 사람이 읽을 수 있는 요약.
  • JSON (-j): 기계가 읽을 수 있는 출력.
  • Query (-q): 공백으로 구분된(CSV 유사) 출력으로, 스크립트에 적합합니다.

공통 컬럼 및 성능 상태

기본 모니터 출력에는 일반적으로 다음이 포함됩니다:

Column Meaning
Name NPU 제품 이름 (예: RBLN-CA25).
Power 전력 소비량.
Perf 성능 상태 (P-state).
Temp 온도.
Util 활용도.
PID 프로세스 ID.
CTX 컨텍스트 ID.
Memalloc 할당된 메모리.

권위 있는 제품/패밀리 매핑 및 지원 카드 목록은 Support Matrix를 참조하세요.

Perf 컬럼은 P-state를 보고합니다. 일반적인 해석은 다음과 같습니다:

P-state Clock (Neural Engine) PCIe Note
P2 Nominal Gen5 -
P4 Nominal Gen4 -
P6 Half Gen4 -
P10 Half (No update) Thermal Throttling
P12 Minimal (No update) System Abort (Hang)
P14 Off (No update) Idle

명령어 참조

Note

일부 작업에는 sudo가 필요합니다. 특히 group, tdr, timeout, sort, mknod와 같은 서브커맨드는 sudo가 필요합니다.

일반 사용법

기본 호출 패턴은 다음과 같습니다:

$ rbln-smi [global options]
$ rbln-smi --topo [options]
$ sudo rbln-smi <subcommand> [arguments]

전역 옵션

다음 옵션은 모든 명령 모드에서 사용할 수 있습니다:

Option Description
-h, --help 도움말 정보를 표시합니다. 서브커맨드 도움말은 sudo가 필요합니다.
-b, --byte-format 사람이 읽을 수 있는 단위 대신 원시 단위로 값을 표시합니다.
-j, --json 결과를 JSON 형식으로 렌더링합니다.
-q, --query 공백으로 구분된(CSV와 유사한) 형식으로 데이터를 출력합니다.
-qd, --query-device <columns> 쿼리 모드 사용 시 특정 디바이스 컬럼을 선택합니다.
-qc, --query-context <columns> 쿼리 모드 사용 시 특정 컨텍스트 컬럼을 선택합니다.
-t, --topo 디바이스/시스템 토폴로지를 표시합니다(커널 6.2 이상 권장).
-L, --list NPU와 해당 UUID를 나열합니다.
-d, --device <ids> 쉼표로 구분된 목록 또는 범위로 NPU를 선택합니다.
-g, --group RSD 그룹별로 구성된 출력을 표시합니다.
-v, --version 버전 정보를 출력하고 종료합니다.

CLI 예제

기본 명령어

Summary

기본 보기. 디바이스 및 컨텍스트 정보의 스냅샷을 표시합니다.

Command

Command
$ rbln-smi [options]

Output (excerpt)

Monitor (excerpt)
Mon Nov 17 14:15:26 2025
+-------------------------------------------------------------------------------------------------+
|                        Device Information KMD ver: 2.1.0~dev.107+gafec0b9                       |
+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| NPU |    Name   | Device  |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | RBLN-CA25 | rbln0   |  0000:47:00.0 |  37C |  75.9W  |  P2  |  90.0MiB / 15.7GiB  |  50.0 |
| 1   |           | rbln1   |  0000:48:00.0 |  26C |         | P14  |    0.0B / 15.7GiB   |   0.0 |
+-------------------------------------------------------------------------------------------------+
|                                       Context Information                                       |
+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| NPU | Process             |     PID      |    CTX    | Priority | PTID |      Memalloc | Status |
+=====+=====================+==============+===========+==========+======+===============+========+
| 0   | command_submission  |    257082    |   10001   |   min    |  0   |       90.0MiB |  run   |

Summary

결과를 JSON 형식으로 출력합니다.

Command

Command
$ rbln-smi -j

Output (excerpt)

JSON output (excerpt)
{
  "KMD_version": "2.1.0~dev.107+gafec0b9",
  "devices": [
    {
      "npu": 0,
      "name": "RBLN-CA25",
      "sid": "SAMPLE_SID_0000",
      "uuid": "11111111-2222-3333-4444-555555555555",
      "device": "rbln0",
      "temperature": "24C",
      "card_power": "41448540uW",
      "pstate": "P14",
      "memory": { "used": "0", "total": "16877879296" },
      "util": "0.0"
    }
  ],
  "contexts": []
}

Summary

결과를 공백으로 구분된(CSV와 유사한) 형식으로 출력합니다.

Command

Command
$ rbln-smi -q

Output (excerpt)

Query output (excerpt)
driver_version:
  2.1.0~dev.107+gafec0b9
devices:
 npu      name        sid             uuid                                  device status ...
   0 RBLN-CA25 SAMPLE_SID_0000 11111111-2222-3333-4444-555555555555          rbln0 normal ...
   1 RBLN-CA25 SAMPLE_SID_0001 66666666-7777-8888-9999-AAAAAAAAAAAA          rbln1 normal ...

Summary

지정된 NPU만 출력을 제한합니다.

Command

Command
$ rbln-smi -d 0,1

Output (excerpt)

Device filter (excerpt)
+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| NPU |    Name   | Device  |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | RBLN-CA25 | rbln0   |  0000:05:00.0 |  24C |  41.6W  | P14  |    0.0B / 15.7GiB   |   0.0 |
| 1   |           | rbln1   |  0000:06:00.0 |  25C |         | P14  |    0.0B / 15.7GiB   |   0.0 |
+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+

Summary

디바이스/시스템 토폴로지 정보를 출력합니다(거리 행렬 포함).

Command

Command
$ rbln-smi --topo [--device <ids>]

Output (excerpt)

Topology (example)
Hardware Topology
Device Distance  n0  n1  n2  n3
rbln0        n0   0   4   4   4
rbln1        n1   4   0   4   4
rbln2        n2   4   4   0   4
rbln3        n3   4   4   4   0

Summary

NPU와 해당 UUID를 나열합니다.

Command

Command
$ rbln-smi -L

Output (excerpt)

-L (excerpt)
NPU 0: UUID: 11111111-2222-3333-4444-555555555555 (example)
NPU 1: UUID: 66666666-7777-8888-9999-AAAAAAAAAAAA (example)

서브커맨드 (sudo 필요)

Summary

RSD 그룹을 생성하거나 삭제합니다.

Command

Command
$ sudo rbln-smi group [-c <group_id> -a <npu_ids>] [-d <group_ids>]

Options

Argument Description
-c, --create <group_id> 새로운 RSD 그룹을 생성합니다(-a와 함께 사용). all을 지정하면 각 디바이스마다 그룹 1개씩 할당됩니다.
-a, --attach <npu_ids> NPU(쉼표로 구분)를 새 그룹에 연결합니다.
-d, --destroy <group_ids> 하나 이상의 RSD 그룹을 제거합니다. 제거된 그룹의 NPU는 그룹 0에 합쳐집니다. 단일 ID 또는 ,/:로 구분한 다중 ID를 받으며, 두 구분자는 혼용할 수 있습니다(예: 1,2:3). all을 지정하면 모든 그룹을 제거합니다.

Note

--destroy에 다중 ID를 전달하면 각 그룹은 독립적으로 처리됩니다. 한 ID의 실패가 나머지 처리를 막지 않으며, 실패한 ID는 stderrskip destroying group <id>: <reason> 형태로 출력되고, 처리 종료 시 failed to destroy group(s): <ids> 메시지와 함께 실패한 모든 ID가 나열되며 명령은 0이 아닌 종료 코드로 종료됩니다.

Example session

Group workflow (example)
$ sudo rbln-smi group -c 1 -a 0,1
RSD group 1 created with devices [0,1].

$ rbln-smi --group
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   | Device  |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 1   | 0   | RBLN-CA25 | rbln0   |  0000:05:00.0 |  23C |  41.0W  | P14  |    0.0B / 15.7GiB   |   0.0 |
| 1   | 1   |           | rbln1   |  0000:06:00.0 |  25C |         | P14  |    0.0B / 15.7GiB   |   0.0 |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+

$ sudo rbln-smi group -d 1
RSD group 1 destroyed.

# 한 번의 호출로 다중 그룹 제거 (쉼표 또는 콜론 구분).
$ sudo rbln-smi group -d 1,2,3
RSD group 1 destroyed.
RSD group 2 destroyed.
RSD group 3 destroyed.

$ sudo rbln-smi group -d 1:2:3
RSD group 1 destroyed.
RSD group 2 destroyed.
RSD group 3 destroyed.

# per-ID 집계: 한 ID의 실패가 나머지 처리를 막지 않습니다.
$ sudo rbln-smi group -d 1,99,3
RSD group 1 destroyed.
skip destroying group 99: <reason>
RSD group 3 destroyed.
failed to destroy group(s): 99

$ sudo rbln-smi group -c all
All RSD groups created.

$ sudo rbln-smi group -d all
All RSD groups destroyed.

Summary

RSD 그룹에 대해 TDR(Timeout Detection and Recovery) 동작을 활성화하거나 비활성화합니다. TDR이 활성화되어 있으면 그룹별 timeout(timeout 서브커맨드 참고)이 만료될 때 드라이버가 hang된 job을 감지하고 NPU reset 사이클을 실행하여 디바이스를 복구합니다. 비활성화되어 있으면 만료된 job은 timeout 처리되지만 NPU는 자동 reset되지 않습니다.

Command

Command
$ sudo rbln-smi tdr -g <group_ids> -v <value>

Notes

<value>0(비활성) 또는 1(활성)이며, 0이 아닌 값은 모두 활성으로 처리됩니다. reset 발동 임계값 자체는 timeout 서브커맨드로 별도 설정합니다. 성공 시 명령은 출력을 표시하지 않습니다.

Output (example)

TDR set (example)
$ sudo rbln-smi tdr -g 1 -v 1
# (no output on success)

Summary

TDR timeout을 설정합니다 — 드라이버가 job을 hang으로 간주하기까지 기다리는 시간(초)입니다. 임계값은 RSD 그룹 단위로 적용되며, tdr 서브커맨드에서 설명한 TDR 메커니즘이 이 값을 사용합니다.

Command

Command
$ sudo rbln-smi timeout -g <group_ids> -v <value>

Notes

<value>는 초 단위 음이 아닌 정수입니다. 0은 특수값으로, 드라이버가 timeout 없음으로 처리하여 job이 무한 대기합니다. reset 사이클은 TDR이 활성화되어 있을 때만 실행되며, tdr0이면 timeout은 만료되더라도 NPU는 자동 reset되지 않습니다. 성공 시 명령은 출력을 표시하지 않습니다.

Output (example)

Timeout set (example)
$ sudo rbln-smi timeout -g 1 -v 10
# (no output on success)

Summary

PCI BDF로 NPU 디바이스를 정렬하고 다시 바인딩합니다.

Command

Command
$ sudo rbln-smi sort

Notes

성공 시 이 명령은 일반적으로 출력을 표시하지 않습니다.

Output (example)

Sort (example)
$ sudo rbln-smi sort
# (no output on success)

Summary

--rsd로 지정한 RSD 제어 디바이스가 인식하는 NPU들에 대해 /dev/rbln* 캐릭터 디바이스 노드를 생성합니다. udev가 디바이스 노드를 만들지 않는 컨테이너/initramfs 환경에서 사용합니다. 이미 존재하는 노드는 별도 오류 없이 건너뛰므로 명령을 반복 실행해도 안전합니다(idempotent).

Command

Command
$ sudo rbln-smi mknod [--rsd <path>] [--dev-dir <path>]

Options

Argument Description
--rsd <path> NPU 목록 조회에 사용할 RSD 제어 디바이스. 기본값 /dev/rsd0.
--dev-dir <path> 노드를 생성할 디렉터리. 기본값 /dev.

Notes

노드는 mode 0666으로 생성되며, 이는 호스트 udev 기본값과 동일합니다. 노드 생성 동안 프로세스 umask를 0으로 비웠다가 종료 시 복원하므로 --dev-dir 내 다른 파일의 권한에는 영향이 없습니다.

컨테이너에서 실행하려면 호출자가 디바이스 노드 생성 권한(CAP_MKNOD)을 가져야 합니다 — CAP_MKNODmknod(2)로 캐릭터/블록 특수 파일을 만들 수 있도록 허용하는 Linux capability입니다(capabilities(7) 참고). 예: --cap-add=MKNOD로 컨테이너 실행. 그 외 mknod(2) 에러(예: CAP_MKNOD 없이 실행 시 EPERM)는 stderr로 출력되고 명령은 non-zero로 종료됩니다.

Output (example)

Mknod first run (example)
$ sudo rbln-smi mknod
created /dev/rbln0
created /dev/rbln1
2 device(s) processed (2 created).
Mknod re-run (example)
$ sudo rbln-smi mknod
2 device(s) processed (0 created).
Mknod with custom dev dir (example)
$ sudo rbln-smi mknod --dev-dir /run/rbln-dev
created /run/rbln-dev/rbln0
created /run/rbln-dev/rbln1
2 device(s) processed (2 created).

문제 해결

권한 오류 / sudo 필요

명령을 sudo로 실행하세요 (예: sudo rbln-smi group -h).

디바이스가 표시되지 않는 경우

  • 드라이버가 설치되어 있고 NPU가 감지되었는지 확인하세요.
  • rbln-smi -L을 시도하여 디바이스를 나열하세요.

토폴로지 출력 누락

--topo를 사용할 수 없거나 불완전한 경우, 커널/버전 요구 사항을 확인하고 --device <ids>를 통해 특정 디바이스로 다시 시도하세요.

관련 문서