Docker 지원
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의 관리 기능을 그대로 활용합니다.
참고
RBLN NPU의 상태를 관찰 및 관리할 수 있도록 도와주는 rbln-smi
은 RBLN 드라이버 패키지와 함께 설치됩니다. 도커 컨테이너 생성 시 rbln-smi
를 마운트하면, 도커 컨테이너 내에서 할당된 RBLN NPU의 상태를 모니터링할 수 있습니다.
컨테이너 생성 가이드라인
Docker에서 RBLN NPU를 사용할 때 필요한 공통 요구사항과 옵션을 요약합니다.
RSD 그룹 관리
RSD 그룹 구성 확인
| $ rbln-smi -g
+-------------------------------------------------------------------------------------------------------+
| RSD Management Group KMD ver: 2.0.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>
|
컨테이너에서 NPU 접근하기
호스트의 RBLN NPU에 접근하도록 Docker 컨테이너를 실행할 때는 다음 옵션을 사용합니다.
| docker run --device /dev/rsdX:/dev/rsd0 \
--device /dev/rblnX:/dev/rbln0 \
--volume /usr/local/bin/rbln-smi:/usr/local/bin/rbln-smi \
-ti IMAGE_NAME:TAG
|
각 옵션의 목적은 다음과 같습니다.
--device /dev/rsdX:/dev/rsd0
- 컨테이너에 RSD 그룹 인터페이스를 노출합니다.
--device /dev/rblnX:/dev/rbln0
- 컨테이너에 개별 RBLN NPU 디바이스를 노출합니다.
--volume /usr/local/bin/rbln-smi:/usr/local/bin/rbln-smi
- 컨테이너 내부에서
rbln-smi
모니터링 도구를 사용할 수 있도록 합니다.
하나의 RBLN NPU 할당하기
Docker 컨테이너 생성 시 NPU를 마운트하여 사용할 수 있습니다.
중요
진행하기 전에 위의 컨테이너 생성 가이드라인을 읽고, 이 단계별 안내에서 참조하는 공통 요구사항과 옵션을 먼저 숙지하세요.
1단계: RSD 그룹 생성
단일 NPU 컨테이너를 위한 별도의 RSD 그룹을 생성합니다.
| $ sudo rbln-smi group -c 1 -a 1
|
이 명령은 그룹 1을 생성하고 rbln1을 해당 그룹에 할당합니다. 동시에 기본 그룹 0에서는 제거됩니다.
2단계: RSD 그룹 구성 확인
NPU가 전용 그룹에 속해 있는지 확인합니다.
출력은 다음과 같이 NPU가 별도 그룹에 속해 있음을 보여줍니다.
| +-------------------------------------------------------------------------------------------------------+
| RSD Management Group KMD ver: 2.0.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 컨테이너를 실행합니다.
| $ docker run --device /dev/rsd1:/dev/rsd0 \
--device /dev/rbln1:/dev/rbln0 \
--volume /usr/local/bin/rbln-smi:/usr/local/bin/rbln-smi \
-ti IMAGE_NAME:TAG
|
이제 컨테이너는 RSD 그룹 1을 통해 rbln1에 독점적으로 접근할 수 있으며, 최적의 성능과 격리가 보장됩니다.
여러 개의 RBLN NPU 할당하기
이 섹션은 여러 개의 RBLN NPU를 사용하는 Docker 컨테이너 구성을 설명합니다. 특히 RSD를 활용하면 대형 언어 모델(LLM)을 여러 개의 RBLN NPU에 효과적으로 텐서 병렬화시킬 수 있습니다. RSD를 지원하는 모델 목록은 Optimum RBLN Multi-NPUs Supported Models에서 확인할 수 있습니다.
컨테이너 할당 전략
여러 컨테이너를 생성하고 각 컨테이너에 전용 NPU 그룹을 할당할 수 있습니다. 예를 들어 RBLN NPU 8개가 있는 경우, 4개씩 다른 RSD 그룹에 할당하여 2개의 컨테이너를 생성할 수 있습니다.
중요
진행하기 전에 위의 컨테이너 생성 가이드라인을 읽고, 이 단계별 안내에서 참조하는 공통 요구사항과 옵션을 먼저 숙지하세요.
Note
단일 RBLN-CA25 NPU 카드는 4개의 디바이스로 구성됩니다. rbln-smi
로 확인하고 4개 디바이스를 모두 동일 컨테이너에 할당하세요.
1단계: RSD 그룹 생성
하나의 컨테이너에서 함께 동작할 모든 NPU가 동일한 RSD 그룹에 속하도록 합니다.
예를 들어 8개의 디바이스 중 4개로 컨테이너를 구성하려면 다음과 같이 실행합니다.
| $ sudo rbln-smi group -c 1 -a 4,5,6,7
|
2단계: 그룹 구성 확인
NPU가 올바르게 그룹화되었는지 확인합니다.
출력은 다음과 같이 서로 다른 그룹으로 구성된 NPU를 보여줍니다.
| +-------------------------------------------------------------------------------------------------------+
| RSD Management Group KMD ver: 2.0.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)
| $ docker run \
--device /dev/rsd0 \
--device /dev/rbln0 --device /dev/rbln1 \
--device /dev/rbln2 --device /dev/rbln3 \
--volume /usr/local/bin/rbln-smi:/usr/local/bin/rbln-smi \
-ti IMAGE_NAME:TAG
|
컨테이너 2: rbln4~rbln7 할당 (그룹 1)
| $ docker run \
--device /dev/rsd1:/dev/rsd0 \
--device /dev/rbln4:/dev/rbln0 --device /dev/rbln5:/dev/rbln1 \
--device /dev/rbln6:/dev/rbln2 --device /dev/rbln7:/dev/rbln3 \
--volume /usr/local/bin/rbln-smi:/usr/local/bin/rbln-smi \
-ti IMAGE_NAME:TAG
|
이 구성에서 각 Docker 컨테이너는 4개의 RBLN NPU를 사용할 수 있습니다.
- 컨테이너 1: RSD 그룹 0(
/dev/rsd0
)을 통해 rbln0~rbln3 사용
- 컨테이너 2: RSD 그룹 1(
/dev/rsd1
)을 통해 rbln4~rbln7 사용