ModelConfig 구성

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, 특정 코어

setSingleCoreMode({...}) / set_single_core_mode(core_ids=[...])

지정한 로컬 코어

Single-core, 전체

setSingleCoreMode() / set_single_core_mode(num_cores=8)

8개의 로컬 코어 전부

Multi (배치)

setMultiCoreMode({clusters}) / set_multi_core_mode([clusters])

지정한 각 클러스터의 로컬 코어 4개가 여러 입력을 배치 처리

Global4

setGlobal4CoreMode({clusters}) / set_global4_core_mode([clusters])

지정한 각 클러스터의 로컬 코어 4개가 하나의 입력을 협력 처리

Global8

setGlobal8CoreMode() / set_global8_core_mode()

두 클러스터의 로컬 코어 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)