ModelConfig 구성#
참고
ModelConfig은 Mobilint 런타임 라이브러리의 일부입니다. 런타임 라이브러리는 컴파일된
모델을 로드하고 ARIES 장치에서 추론을 실행하는 C++ 및 Python SDK입니다. 런타임의 설치와
사용 방법은 Runtime 매뉴얼에서 다룹니다. 이 페이지에서는 런타임
객체 중 하나인 ModelConfig가 각 모델에 NPU 코어와 Core 모드를 어떻게
할당하는지 설명합니다.
ARIES 장치는 8개의 로컬 코어를 가지며, 4개씩 두 개의 클러스터로 구성됩니다(각
클러스터에는 멀티 코어 모드를 조율하는 글로벌 코어도 있습니다). 모델을 로드할 때
ModelConfig를 통해 모델이 사용할 코어의 개수와 종류, 그리고 실행할 코어 모드를
런타임에 지정합니다. 각 모델을 서로 다른 코어에 고정할 수 있으므로, 하나의 ARIES 장치를
동시에 실행되는 여러 모델에 분할하여 사용할 수 있습니다.
작업 흐름은 항상 동일합니다. ModelConfig를 생성하고, 메서드 하나를 호출해 모드와 코어를
선택한 뒤, 모델을 생성할 때 전달합니다.
코어와 코어 모드 선택#
각 코어 모드는 하나의 ModelConfig 메서드에 대응됩니다. 모드 자체(Single, Multi, Global4,
Global8)의 의미는 Core 모드에서 설명하며, 메서드는 이를 사용하도록 설정을 변경합니다.
목적 |
C++ 메서드 / Python 메서드 |
사용되는 코어 |
|---|---|---|
Single-core, 특정 코어 |
|
지정한 로컬 코어 |
Single-core, 전체 |
|
8개의 로컬 코어 전부 |
Multi (배치) |
|
지정한 각 클러스터의 로컬 코어 4개가 여러 입력을 배치 처리 |
Global4 |
|
지정한 각 클러스터의 로컬 코어 4개가 하나의 입력을 협력 처리 |
Global8 |
|
두 클러스터의 로컬 코어 8개가 하나의 입력을 협력 처리 |
예제#
대표적인 구성 몇 가지입니다. 각 예시는 ModelConfig를 생성하고 모드를 선택한 뒤 모델을
생성합니다(간결함을 위해 launch 호출은 생략).
#include "qbruntime/qbruntime.h"
using namespace mobilint;
const char* MXQ_PATH = "model_name.mxq";
StatusCode sc;
auto acc = Accelerator::create(sc);
// Single-core mode on two specific local cores
ModelConfig mc_single;
mc_single.setSingleCoreMode({{Cluster::Cluster0, Core::Core0},
{Cluster::Cluster0, Core::Core1}});
auto model_single = Model::create(MXQ_PATH, mc_single, sc);
// Multi-core mode on Cluster0
ModelConfig mc_multi;
mc_multi.setMultiCoreMode({Cluster::Cluster0});
auto model_multi = Model::create(MXQ_PATH, mc_multi, sc);
// Global4 mode on Cluster1
ModelConfig mc_g4;
mc_g4.setGlobal4CoreMode({Cluster::Cluster1});
auto model_g4 = Model::create(MXQ_PATH, mc_g4, sc);
// Global8 mode
ModelConfig mc_g8;
mc_g8.setGlobal8CoreMode();
auto model_g8 = Model::create(MXQ_PATH, mc_g8, sc);
from qbruntime import Accelerator, Model, ModelConfig, CoreId, Cluster, Core
acc = Accelerator()
MXQ_PATH = "model_name.mxq"
# Single-core mode on two specific local cores
mc_single = ModelConfig()
mc_single.set_single_core_mode(core_ids=[
CoreId(Cluster.Cluster0, Core.Core0),
CoreId(Cluster.Cluster0, Core.Core1),
])
model_single = Model(MXQ_PATH, mc_single)
# Multi-core mode on Cluster0
mc_multi = ModelConfig()
mc_multi.set_multi_core_mode([Cluster.Cluster0])
model_multi = Model(MXQ_PATH, mc_multi)
# Global4 mode on Cluster1
mc_g4 = ModelConfig()
mc_g4.set_global4_core_mode([Cluster.Cluster1])
model_g4 = Model(MXQ_PATH, mc_g4)
# Global8 mode
mc_g8 = ModelConfig()
mc_g8.set_global8_core_mode()
model_g8 = Model(MXQ_PATH, mc_g8)