Qwen3-1.7B(텍스트 생성)¶
이 사례에서는 RBLN Optimum으로 Qwen3-1.7B를 실행하고, RBLN 프로파일러로 Rebel100™의 칩렛별 분산 연산을 분석합니다.
Rebel100™은 칩렛 기반 SoC로, 동일한 구조의 칩렛 4개가 하나의 디바이스로 동작합니다. 모델의 연산은 이 4개의 칩렛에 나뉘어 수행되며, 트레이스에도 디바이스 하나 아래에 Chiplet 0 ~ Chiplet 3 그룹으로 나타납니다. 나뉜 연산은 같은 연산 이름의 슬라이스가 네 그룹에 모두 나타나는 형태로 보이고, 각 칩렛의 Neural DMA 트랙에서 그 칩렛이 맡은 몫의 가중치 전송을 확인할 수 있습니다.
ATOM™에서 RSD로 NPU 4개에 나누어 실행하던 규모의 모델을, Rebel100™은 한 패키지에 집적된 칩렛 4개에서 실행합니다. 칩렛은 다이 간 링크로 연결되어 있어 분할이 디바이스 경계를 넘지 않으므로, 트레이스에도 디바이스 하나와 그 아래 칩렛 그룹으로 나타납니다. ATOM™의 트레이스는 Llama3-8B(텍스트 생성)에서 확인할 수 있습니다.
RBLN 프로파일러를 활성화하는 방법은 ATOM™과 동일합니다. 같은 환경 변수 RBLN_PROFILER=1을 설정하거나 같은 rbln_activate_profiler=True 인자를 사용하면 되며, 추출되는 프로파일링 데이터의 형식도 같습니다.
사전 준비¶
설치¶
RBLN Optimum 설치를 따라 optimum-rbln을 설치합니다.
모델 컴파일 및 프로파일러 활성화¶
아래는 Qwen3-1.7B를 Rebel100™ 디바이스 하나에서 실행하며 프로파일링 데이터를 남기는 최소 예시입니다. rbln_activate_profiler=True가 RBLN 프로파일러를 활성화합니다:
코드를 고치지 않고 환경 변수로 활성화할 수도 있습니다. 이 경우 rbln_activate_profiler=True는 생략합니다:
Note
두 방법 모두 프로파일링 페이지에 설명된 것과 동일합니다. Rebel100™을 위해 추가로 설정할 옵션은 없습니다.
추론을 통한 프로파일링 데이터 추출¶
모델 추론을 통해 프로파일링 데이터를 얻을 수 있습니다:
추론이 끝나면 현재 디렉터리에 다음과 같이 트레이스가 남습니다:
번호 접미사가 없는 파일 하나에 모든 실행이 담기므로, 별도로 병합하지 않고 이 파일만 열면 됩니다.
with profile(...)을 사용하면 지정한 코드 구간만 프로파일링할 수 있습니다:
RBLN 프로파일러 기반 Qwen3-1.7B의 프로파일링 데이터 분석¶
프로파일링 결과¶
명령어는 그것을 실행한 칩렛의 Chiplet 그룹에 기록됩니다. 각 그룹 안에는 Neural Engine Clusters, Neural DMA, Task DMA, External HDMA, Device HDMA, Device Sync, General Compute Engine 명령어 트랙이 놓이고, 이 중 실제로 수행된 명령어가 있는 트랙만 표시됩니다.
Device Workload 트랙에는 i{instance_index}_{sequence_index}_Device Workload_{workload_index} 슬라이스가 놓이고, 그 슬라이스에 속한 명령어 이름에는 i{instance_index}_{sequence_index}_W{workload_index} 접두사가 똑같이 붙습니다. 이 접두사로 검색하면 네 칩렛이 그 슬라이스에서 수행한 명령어를 모아 볼 수 있습니다. 같은 모듈이 여러 번 실행되면 W{workload_index}만으로는 실행을 구분할 수 없으므로 접두사 전체로 검색합니다. 이름 규칙은 분석 방법에서 설명합니다.
RBLN 컴파일러가 여러 칩렛에 나눈 연산은 같은 연산 이름의 명령어가 여러 Chiplet 그룹에 나타납니다. 이름 끝에 붙는 명령어 번호는 칩렛마다 다릅니다.
Note
ATOM™은 단일 다이 SoC이므로 ATOM™ 트레이스에는 Chiplet 그룹이 없고, 명령어 트랙이 디바이스 그룹 바로 아래에 있습니다.
칩렛별 분산 연산¶
Rebel100™에서 하나의 연산이 칩렛 4개에 어떻게 나뉘는지는 Qwen3-1.7B의 어텐션 첫 연산인 q_proj를 예시로 살펴볼 수 있습니다. 첫 번째 레이어의 q_proj 가중치는 4개 칩렛에 나뉘어 처리되며, Chiplet 0 ~ Chiplet 3의 Neural DMA 트랙에 model.model.layers.0.self_attn.q_proj.weight를 이름에 포함하는 슬라이스가 하나씩 나타납니다. 가중치 슬라이스의 이름은 그것이 모델의 어느 파라미터인지를 그대로 보여주고, 그 슬라이스가 놓인 Chiplet 그룹이 어느 칩렛이 그 몫을 맡았는지 알려줍니다.
이어서 Neural Engine Clusters 트랙을 보면, 칩렛마다 그 가중치를 사용하는 linear 연산이 수행되는 것을 볼 수 있습니다.
모든 파라미터가 나뉘는 것은 아닙니다. 같은 레이어의 pre_attention_layernorm 가중치는 Chiplet 0의 Task DMA 트랙에만 나타납니다.
출력 데이터 전송¶
모델의 마지막 연산 역시 네 칩렛에 나뉘어 수행되지만, 결과를 호스트로 보내는 External HDMA는 Chiplet 0에만 있습니다. 따라서 트레이스의 끝부분에서는 Chiplet 1 ~ Chiplet 3의 명령어가 먼저 끝나고 Chiplet 0만 남아 마지막 Task DMA 몇 건을 수행한 뒤, External HDMA 슬라이스 하나로 결과를 내보냅니다.
이 구간은 Perfetto의 흐름 화살표로 확인할 수 있습니다. External HDMA 슬라이스를 선택하면 같은 칩렛 Task DMA의 슬라이스 여러 개에서 들어오는 화살표가 함께 표시되어, 여러 조각이 하나의 전송으로 모이는 것을 볼 수 있습니다. 입력 방향도 같은 트랙을 씁니다. 워크로드 첫머리의 External HDMA 슬라이스를 선택하면 Task DMA의 embedding 슬라이스로 나가는 화살표가 표시됩니다.
참고 자료¶
- RBLN 프로파일러
- Perfetto로 프로파일러 데이터 분석
- 다른 프로파일링 예제: gpt-oss-20b, gpt-oss-20b(데이터 병렬)


