rbln-ccl을 사용한 여러 카드 간 집합 통신¶
Rebel100™에서는 카드 하나가 논리 디바이스 하나에 해당합니다. 여러 카드에 걸친 작업은 여러 프로세스가 torch.distributed로 텐서를 주고받으며 실행합니다. RBLN PyTorch는 이 통신에 사용할 rbln-ccl 백엔드를 제공합니다. 집합 통신은 NPU에서 실행되며 다른 가속기에 사용하는 것과 같은 방식으로 스크립트를 작성합니다. 이 튜토리얼에서는 두 카드에서 프로세스 두 개를 실행하고 all_gather로 표를 구성합니다.
카드 내부의 분할 방식은 별도로 다룹니다. Rebel100™ 카드의 칩렛 네 개는 고정된 그룹을 이루며 RBLN Compiler가 모든 프로그램에서 이 그룹을 자동으로 사용합니다. 자세한 내용은 RBLN Compiler 문서에서 확인할 수 있습니다. ATOM™ 카드를 하나의 논리 디바이스로 묶는 디바이스 매핑 변수는 Rebel100™에서 사용하지 않습니다. 이 변수는 환경 변수 › 디바이스 매핑에 설명되어 있습니다.
사전 준비¶
- RBLN NPU가 두 개 이상 있고 RBLN Driver가 설치된 호스트. 다음 출력은 Rebel100™(
RBLN-CR13) 카드 두 개에서 기록했습니다. - Python: 3.10–3.14
- 설치에 따라 설치한
torch,torch-rbln,rebel-compiler.torchrun은torch에 포함되어 있습니다.
1단계: 각 카드의 행을 모으기¶
ccl_allgather.py는 표준 torch.distributed 스크립트이며 RBLN에만 필요한 설정은 한 줄입니다. torchrun이 모든 rank에 같은 환경을 전달하므로 각 rank는 디바이스를 처음 사용하기 전에 RBLN_VISIBLE_DEVICES 목록에서 자신의 카드를 선택합니다. 이어서 작은 텐서를 자신의 rank 번호로 채우고 all_gather로 모든 rank에 전체 표를 구성합니다.
$ RBLN_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 ccl_allgather.py
rank 0 sees (2, 4): [0.0, 1.0]
rank 1 sees (2, 4): [0.0, 1.0]
torchrun은 먼저 OMP_NUM_THREADS 설정에 관한 일반 안내를 출력합니다. 두 출력 행의 순서는 달라질 수 있습니다.
출력은 다음과 같이 해석합니다.
- 모든 rank에 같은 표가 남습니다. 행 0은 rank 0에서, 행 1은 rank 1에서 가져옵니다.
all_gather이후 두 프로세스 모두 두 행을 갖습니다. 텐서가float16이므로 gather는 NPU에서 실행됩니다. 다른 dtype의 처리 방식은 실행 방식 › 분산 실행에서 확인할 수 있습니다. - 프로세스 하나가 카드 하나를 사용합니다.
RBLN_VISIBLE_DEVICES=0,1은torchrun에 두 카드를 지정하고 스크립트의 첫 부분에서 rank마다 카드 하나만 보이도록 범위를 좁힙니다. 매핑은 디바이스를 처음 사용할 때 확정되므로rbln에 텐서를 만들기 전에 이 설정을 마쳐야 합니다. - rank 정보는 torchrun이 제공합니다.
init_process_group은torchrun이 설정한 rendezvous 변수를 읽습니다. 런타임 자체 제어 평면의 기본 주소는127.0.0.1이며 단일 호스트에서는 이 주소로 충분합니다. - 집합 통신이 완료되면 호출이 반환됩니다.
rbln-ccl집합 통신은 기본적으로 동기 방식입니다.TORCH_RBLN_C10D_ASYNC=1을 설정하면 완료를 기다릴 수 있는 작업 핸들을 반환합니다.
2단계: 여러 호스트에서 실행¶
두 가지 설정을 바꾸면 같은 스크립트를 여러 호스트에서 실행할 수 있습니다. 다른 백엔드와 마찬가지로 torchrun --nnodes와 rendezvous 엔드포인트를 지정해 실행합니다. 또한 모든 rank에서 init_process_group을 호출하기 전에 RBLN 제어 평면을 설정합니다. RBLN_ROOT_IP에는 rank 0의 주소를, RBLN_LOCAL_IP에는 해당 rank의 주소를 지정합니다. 호스트에 RDMA 인터페이스가 여러 개 있으면 RBLN_RDMA_HCA 또는 RBLN_RDMA_IP도 설정합니다. 각 변수와 기본값은 환경 변수 › 분산 실행에 나와 있습니다.
지원하는 집합 통신(broadcast, scatter, all_gather, all_reduce, reduce_scatter, send, recv, barrier), reduce 연산자, dtype 규칙은 실행 방식 › 분산 실행에 나와 있습니다.
다음 단계¶
- 실행 방식 › 분산 실행 - 백엔드가 지원하는 집합 통신, reduce 연산자, dtype.
- 실행 방식 › Rebel100™과 ATOM™ - PyTorch 코드에서 나타나는 두 제품군의 차이.
- 환경 변수 › 분산 실행 - 여러 호스트에서 실행할 때 사용하는 제어 평면과 데이터 평면 변수.