콘텐츠로 이동

NPU 할당

RBLN NPU는 Docker 컨테이너 내에서 활용되어, 배포 및 관리를 간소화할 수 있습니다. 서버에 여러 개의 RBLN NPU가 있는 경우, 각 컨테이너에 특정 NPU를 사용하도록 구성하여 여러 개의 NPU를 사용하는 서버 환경에서 효율적인 자원 할당이 가능합니다.

Rebellions Scalable Design(RSD)

Rebellions Scalable Design(RSD)은 여러 대의 RBLN NPU를 효율적으로 관리·활용하기 위한 기술입니다. RSD는 다음을 제공합니다.

  • 디바이스 그룹화: 더 나은 자원 관리를 위해 NPU를 그룹으로 구성
  • 텐서 병렬화: 동일 그룹의 여러 NPU에 대형 언어 모델을 분산 실행
  • 결함 격리: 그룹을 분리해 한 그룹의 이슈가 다른 그룹에 영향을 주지 않음
  • 독립 스케줄링: 각 그룹을 독립적으로 관리해 성능 최적화

RSD는 단일 NPU와 멀티 NPU 환경 모두에 적용되며, 단일 NPU 컨테이너 역시 RSD의 관리 기능을 그대로 활용합니다.

카드 하나가 제시하는 디바이스 개수는 카드 모델에 따라 다르며, 이것이 디바이스를 어떻게 묶을지를 결정합니다. 카드 모델별 디바이스 구성은 컨테이너 할당 전략 아래의 참고에 정리되어 있습니다.

Note

RBLN NPU를 관리하고 모니터링하는 rbln-smi 도구는 RBLN 드라이버 패키지에 포함되어 있습니다. RBLN Container Toolkit을 사용하면 별도의 마운트 없이 컨테이너 내에서 rbln-smi를 바로 사용할 수 있습니다.

RBLN Container Toolkit

RBLN Container Toolkit은 Container Device Interface(CDI) 사양을 사용하여 RBLN NPU에 대한 컨테이너 접근을 간소화합니다.

설치 방법, CLI 레퍼런스, Kubernetes 배포, 문제 해결 등은 RBLN Container Toolkit 가이드에서 확인할 수 있습니다.

빠른 설정

툴킷 설치 후, 다음 명령으로 구성합니다:

1
2
3
4
5
6
7
8
9
# 구성
$ sudo rbln-ctk cdi generate
$ sudo rbln-ctk runtime configure
$ sudo systemctl restart docker

# NPU 접근이 가능한 컨테이너 실행
$ docker run \
  --device rebellions.ai/npu=all \
  -it IMAGE_NAME:TAG

툴킷이 구성되면 --device rebellions.ai/npu=all을 사용하는 모든 컨테이너에서 RBLN 라이브러리와 도구(rbln-smi 포함)를 자동으로 사용할 수 있습니다.

컨테이너 생성 가이드라인

Docker에서 RBLN NPU를 사용할 때 필요한 공통 요구사항과 옵션을 요약합니다.

RSD 그룹 관리

아래 절차는 rbln-smi 를 사용합니다. 드라이버에 직접 쓰기 때문에 드라이버만 설치되어 있으면 됩니다.

데몬으로도 같은 작업을 할 수 있습니다

rbln-smd 를 이미 운영 중인 호스트라면 rbln-smdi group 으로도 동일한 그룹 작업을 수행할 수 있습니다. 호스트를 원격으로 관리하거나, 그룹 변경을 root 셸이 아니라 데몬의 접근 제어를 거치게 하려는 경우에 적합합니다. 자세한 내용은 RBLN 시스템 관리 데몬 문서에서 확인할 수 있습니다.

RSD 그룹 구성 확인

$ rbln-smi -g
+-------------------------------------------------------------------------------------------------------+
|                                  RSD Management Group KMD ver: 3.5.1                                  |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   |  Device |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | 0   | RBLN-CR13 | rbln0   |  0000:1b:00.0 |  37C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 1   | RBLN-CR13 | rbln1   |  0000:1c:00.0 |  36C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------------+
|                                        RSD Context Information                                        |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| Grp | NPU |       Process       |      PID     |    CTX    | Priority | PTID |    Memalloc   | Status |
+=====+=====+=====================+==============+===========+==========+======+===============+========+
| N/A | N/A | N/A                 |      N/A     |    N/A    |    N/A   |  N/A |           N/A |   N/A  |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
$ rbln-smi -g
+-------------------------------------------------------------------------------------------------------+
|                                  RSD Management Group KMD ver: 3.4.1                                  |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   |  Device |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | 0   | RBLN-CA22 | rbln0   |  0000:1b:00.0 |  37C |  19.5W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 1   | RBLN-CA22 | rbln1   |  0000:1c:00.0 |  36C |  19.2W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------------+
|                                        RSD Context Information                                        |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| Grp | NPU |       Process       |      PID     |    CTX    | Priority | PTID |    Memalloc   | Status |
+=====+=====+=====================+==============+===========+==========+======+===============+========+
| N/A | N/A | N/A                 |      N/A     |    N/A    |    N/A   |  N/A |           N/A |   N/A  |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+

기본적으로 모든 NPU는 Grp 열에 나타난 것처럼 그룹 0에 속해 표시됩니다. 컨테이너 간 격리와 성능을 최적화하려면 컨테이너별로 별도의 그룹을 생성하는 것을 권장합니다.

RSD 그룹 생성

컨테이너 전용 RSD 그룹을 생성합니다.

$ sudo rbln-smi group -c <group_id> -a <device_id_list>

RSD 그룹 삭제

생성한 그룹은 다음 명령으로 삭제할 수 있습니다.

$ sudo rbln-smi group -d <group_id>

Regenerate the CDI spec after group changes

rbln-smi group -c 와 rbln-smi group -d 는 호스트의 /dev/rsd* 토폴로지를 바꾸며, CDI 사양은 가장 최근 rbln-ctk cdi generate 실행 시점의 토폴로지만 담고 있습니다. 변경 후 rebellions.ai/npu=N 핸들을 사용하는 컨테이너가 있다면 sudo rbln-ctk cdi generate 를 다시 실행해야 합니다. 툴킷의 자동 새로 고침 경로는 드라이버·라이브러리 변경에만 반응하고 rbln-smi 그룹 조작에는 트리거되지 않습니다.

컨테이너에서 NPU 접근하기

컨테이너는 --device rebellions.ai/npu=<handle> 플래그로 NPU에 접근합니다. 사용 가능한 핸들(=all, =N), 단일·다중 NPU 패턴, 런타임별 동작은 장치 선택에서 확인할 수 있습니다.

하나의 RBLN NPU 할당하기

이 섹션에서는 RSD 그룹 격리를 통해 단일 RBLN NPU를 사용하도록 Docker 컨테이너를 구성하는 방법을 설명합니다.

중요

진행하기 전에 위의 컨테이너 생성 가이드라인을 읽고, 이 단계별 안내에서 참조하는 공통 요구사항과 옵션을 먼저 익혀 두는 것을 권합니다.

1단계: RSD 그룹 생성

단일 NPU 컨테이너를 위한 별도의 RSD 그룹을 생성합니다.

$ sudo rbln-smi group -c 1 -a 1

이 명령은 그룹 1을 생성하고 rbln1을 해당 그룹에 할당합니다. 동시에 기본 그룹 0에서는 제거됩니다.

2단계: RSD 그룹 구성 확인

NPU가 전용 그룹에 속해 있는지 확인합니다.

$ rbln-smi -g

출력은 다음과 같이 NPU가 별도 그룹에 속해 있음을 보여줍니다.

+-------------------------------------------------------------------------------------------------------+
|                                  RSD Management Group KMD ver: 3.5.1                                  |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   |  Device |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | 0   | RBLN-CR13 | rbln0   |  0000:1b:00.0 |  35C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| 1   | 0   | RBLN-CR13 | rbln1   |  0000:1c:00.0 |  34C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------------+
|                                        RSD Context Information                                        |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| Grp | NPU |       Process       |      PID     |    CTX    | Priority | PTID |    Memalloc   | Status |
+=====+=====+=====================+==============+===========+==========+======+===============+========+
| N/A | N/A | N/A                 |      N/A     |    N/A    |    N/A   |  N/A |           N/A |   N/A  |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
+-------------------------------------------------------------------------------------------------------+
|                                  RSD Management Group KMD ver: 3.4.1                                  |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   |  Device |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | 0   | RBLN-CA22 | rbln0   |  0000:1b:00.0 |  35C |  18.4W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| 1   | 0   | RBLN-CA22 | rbln1   |  0000:1c:00.0 |  34C |  18.2W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------------+
|                                        RSD Context Information                                        |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| Grp | NPU |       Process       |      PID     |    CTX    | Priority | PTID |    Memalloc   | Status |
+=====+=====+=====================+==============+===========+==========+======+===============+========+
| N/A | N/A | N/A                 |      N/A     |    N/A    |    N/A   |  N/A |           N/A |   N/A  |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+

이제 rbln1은 그룹 1에, rbln0은 그룹 0에 속해 분리된 상태입니다.

3단계: 단일 NPU로 Docker 컨테이너 실행

전용 NPU에 접근 가능한 Docker 컨테이너를 실행합니다.

1
2
3
$ docker run \
  --device rebellions.ai/npu=1 \
  -it IMAGE_NAME:TAG

이제 컨테이너는 RSD 그룹 1을 통해 rbln1 에 독점적으로 접근할 수 있으며, 최적의 성능과 격리가 보장됩니다.

여러 개의 RBLN NPU 할당하기

이 섹션은 여러 개의 RBLN NPU를 사용하는 Docker 컨테이너 구성을 설명합니다. 특히 RSD를 활용하면 대형 언어 모델(LLM)을 여러 개의 RBLN NPU에 효과적으로 텐서 병렬화시킬 수 있습니다. RSD를 지원하는 모델 목록은 RBLN Optimum Multi-NPUs Supported Models에서 확인할 수 있습니다.

컨테이너 할당 전략

여러 컨테이너를 생성하고 각 컨테이너에 전용 NPU 그룹을 할당할 수 있습니다. 예를 들어 RBLN NPU 8개가 있는 경우, 4개씩 다른 RSD 그룹에 할당하여 2개의 컨테이너를 생성할 수 있습니다.

중요

진행하기 전에 위의 컨테이너 생성 가이드라인을 읽고, 이 단계별 안내에서 참조하는 공통 요구사항과 옵션을 먼저 익혀 두는 것을 권합니다.

카드 하나가 디바이스 하나입니다

RBLN-CR13 은 카드당 디바이스를 하나만 포함하므로 rbln-smi 의 항목 하나가 카드 하나입니다.

카드에 포함된 디바이스 개수는 카드 모델에 따라 다릅니다

RBLN-CA25 는 카드당 네 개의 디바이스를 포함하며 rbln-smi 에도 네 개의 항목으로 나타납니다. 그 밖의 ATOM™ 카드는 카드당 디바이스를 하나만 포함하므로 카드 하나가 한 개의 디바이스입니다.

분할 계획을 세우기 전에 rbln-smi 로 구성을 확인하는 것을 권합니다. 카드가 여러 디바이스를 포함하는 경우, 그 디바이스들은 같은 RSD 그룹과 같은 컨테이너에 두어야 합니다. 같은 카드를 공유하고 있으므로, 나누면 카드 하나가 두 워크로드에 걸치게 됩니다.

1단계: RSD 그룹 생성

하나의 컨테이너에서 함께 동작할 모든 NPU가 동일한 RSD 그룹에 속하도록 합니다.

예를 들어 8개의 디바이스 중 4개로 컨테이너를 구성하려면 다음과 같이 실행합니다.

$ sudo rbln-smi group -c 1 -a 4,5,6,7

2단계: 그룹 구성 확인

NPU가 올바르게 그룹화되었는지 확인합니다.

$ rbln-smi -g

출력은 다음과 같이 서로 다른 그룹으로 구성된 NPU를 보여줍니다.

+-------------------------------------------------------------------------------------------------------+
|                                  RSD Management Group KMD ver: 3.5.1                                  |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   |  Device |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | 0   | RBLN-CR13 | rbln0   |  0000:1b:00.0 |  38C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 1   | RBLN-CR13 | rbln1   |  0000:1c:00.0 |  37C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 2   | RBLN-CR13 | rbln2   |  0000:1f:00.0 |  36C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 3   | RBLN-CR13 | rbln3   |  0000:22:00.0 |  39C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| 1   | 0   | RBLN-CR13 | rbln4   |  0000:41:00.0 |  36C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 1   | RBLN-CR13 | rbln5   |  0000:42:00.0 |  36C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 2   | RBLN-CR13 | rbln6   |  0000:45:00.0 |  40C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
|     | 3   | RBLN-CR13 | rbln7   |  0000:48:00.0 |  36C |  100.0W |  P14 |    0.0B / 140.0GiB  |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------------+
|                                        RSD Context Information                                        |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| Grp | NPU |       Process       |      PID     |    CTX    | Priority | PTID |    Memalloc   | Status |
+=====+=====+=====================+==============+===========+==========+======+===============+========+
| N/A | N/A | N/A                 |      N/A     |    N/A    |    N/A   |  N/A |           N/A |   N/A  |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
+-------------------------------------------------------------------------------------------------------+
|                                  RSD Management Group KMD ver: 3.4.1                                  |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| Grp | NPU |    Name   |  Device |   PCI BUS ID  | Temp |  Power  | Perf |  Memory(used/total) |  Util |
+=====+=====+===========+=========+===============+======+=========+======+=====================+=======+
| 0   | 0   | RBLN-CA22 | rbln0   |  0000:1b:00.0 |  38C |  19.5W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 1   | RBLN-CA22 | rbln1   |  0000:1c:00.0 |  37C |  19.3W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 2   | RBLN-CA22 | rbln2   |  0000:1f:00.0 |  36C |  18.5W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 3   | RBLN-CA22 | rbln3   |  0000:22:00.0 |  39C |  19.6W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
| 1   | 0   | RBLN-CA22 | rbln4   |  0000:41:00.0 |  36C |  17.9W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 1   | RBLN-CA22 | rbln5   |  0000:42:00.0 |  36C |  21.5W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 2   | RBLN-CA22 | rbln6   |  0000:45:00.0 |  40C |  20.6W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
|     | 3   | RBLN-CA22 | rbln7   |  0000:48:00.0 |  36C |  17.9W  |  P14 |    0.0B / 15.7GiB   |   0.0 |
+-----+-----+-----------+---------+---------------+------+---------+------+---------------------+-------+
+-------------------------------------------------------------------------------------------------------+
|                                        RSD Context Information                                        |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+
| Grp | NPU |       Process       |      PID     |    CTX    | Priority | PTID |    Memalloc   | Status |
+=====+=====+=====================+==============+===========+==========+======+===============+========+
| N/A | N/A | N/A                 |      N/A     |    N/A    |    N/A   |  N/A |           N/A |   N/A  |
+-----+-----+---------------------+--------------+-----------+----------+------+---------------+--------+

여기서 NPU rbln4~rbln7은 그룹 1에, NPU rbln0~rbln3은 그룹 0에 속해 분리되어 있음을 확인할 수 있습니다.

3단계: 멀티 NPU로 Docker 컨테이너 실행

컨테이너 1: rbln0~rbln3 할당(그룹 0)

1
2
3
4
5
6
$ docker run \
  --device rebellions.ai/npu=0 \
  --device rebellions.ai/npu=1 \
  --device rebellions.ai/npu=2 \
  --device rebellions.ai/npu=3 \
  -it IMAGE_NAME:TAG

컨테이너 2: rbln4~rbln7 할당(그룹 1)

1
2
3
4
5
6
$ docker run \
  --device rebellions.ai/npu=4 \
  --device rebellions.ai/npu=5 \
  --device rebellions.ai/npu=6 \
  --device rebellions.ai/npu=7 \
  -it IMAGE_NAME:TAG

이 구성에서 각 Docker 컨테이너는 4개의 RBLN NPU를 사용할 수 있습니다.

  • 컨테이너 1: RSD 그룹 0(/dev/rsd0)을 통해 rbln0~rbln3 사용
  • 컨테이너 2: RSD 그룹 1(/dev/rsd1)을 통해 rbln4~rbln7 사용

위의 /dev/rsd* 경로는 호스트의 노드 이름입니다. 컨테이너 안에서는 첨부된 그룹 장치가 항상 /dev/rsd0 으로 보이므로, 호스트 노드가 /dev/rsd1 인 컨테이너 2 에서도 /dev/rsd0 으로 나타납니다. 이 동작의 배경은 장치 선택에서 확인할 수 있습니다.