콘텐츠로 이동

Docker 지원

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

하나의 RBLN NPU 할당하기

Docker 컨테이너 생성시 NPU를 마운트 하여 사용할 수 있습니다.

$ docker run --device /dev/rbln0 -ti IMAGE_NAME:TAG 

여러 개의 RBLN NPU 할당하기

하나의 서버에 여러 개의 NPU가 설치된 경우, 각 Docker 컨테이너에 필요한 만큼 NPU를 마운트하여 사용할 수 있습니다. 예를 들어, 8장의 카드를 사용할 때 4개의 NPU를 마운트하는 컨테이너를 2개 생성할 수 있습니다.

1
2
3
4
5
# Assign RBLN NPUs 0 to 3
$ docker run \
    --device /dev/rbln0 --device /dev/rbln1 \
    --device /dev/rbln2 --device /dev/rbln3 \
    -ti IMAGE_NAME:TAG
1
2
3
4
5
# Assign RBLN NPUs 4 to 7
$ docker run \
    --device /dev/rbln4:/dev/rbln0 --device /dev/rbln5:/dev/rbln1 \
    --device /dev/rbln6:/dev/rbln2 --device /dev/rbln7:/dev/rbln3 \
    -ti IMAGE_NAME:TAG

이렇게 할 경우 각 Docker 내부에서 RBLN NPU를 4개씩(/dev/rbln0, /dev/rbln1, /dev/rbln2, /dev/rbln3) 사용할 수 있습니다.

RSD를 활용하기 위해 여러 개의 RBLN NPU 할당하기

RSD(Rebellions Scalable Design)를 활용하면 대형 언어 모델(LLM)을 여러 개의 RBLN NPU에 효과적으로 텐서 병렬화시킬 수 있습니다. RSD를 지원하는 모델 목록은 Optimum RBLN Multi-NPUs Supported Models에서 확인할 수 있습니다.

RSD를 사용할 때는 아래와 같이 Docker 컨테이너 실행 명령에 /dev/rsd0 파일을 추가로 마운트해야 합니다.

1
2
3
4
5
$ docker run \
    --device /dev/rsd0 \
    --device /dev/rbln0 --device /dev/rbln1 \
    --device /dev/rbln2 --device /dev/rbln3 \
    -ti IMAGE_NAME:TAG

RSD를 활용하는 여러 개의 Docker 컨테이너 구성하기

/dev/rsd0 파일은 RSD를 활용하고자 하는 모든 Docker 컨테이너에 포함되어야 합니다.

예를 들어 RBLN NPU 8개를 가지고 있는 서버에서 RBLN NPU를 각 4개 사용하는 Docker 컨테이너 2개를 생성 할 경우, 두 컨테이너 모두 /dev/rsd0를 마운트하여 아래와 같이 생성해야 합니다.

1
2
3
4
5
6
# Assign RBLN NPUs 0 to 3 with RSD
$ docker run \
    --device /dev/rsd0 \
    --device /dev/rbln0 --device /dev/rbln1 \
    --device /dev/rbln2 --device /dev/rbln3 \
    -ti IMAGE_NAME:TAG
1
2
3
4
5
6
# Assign RBLN NPUs 4 to 7 with RSD
$ docker run \
    --device /dev/rsd0 \
    --device /dev/rbln4:/dev/rbln0 --device /dev/rbln5:/dev/rbln1 \
    --device /dev/rbln6:/dev/rbln2 --device /dev/rbln7:/dev/rbln3 \
    -ti IMAGE_NAME:TAG