全量实现路径、物理原理与操作规程
sequenceDiagram
participant GT as Game Thread
participant PL as Plugin Layer
participant K as Kernel (DLL)
GT->>PL: 发起 LoadModel (多种路径)
Note right of PL: 进入后台 AsyncTask
PL->>K: 物理 mmap 映射
K->>K: 执行 GPU 显存预分配
K-->>PL: 返回引擎句柄 (Handle)
PL-->>GT: 广播 OnModelLoaded 信号
适用于极致性能控,手动管理线程与生命周期。
// 手动异步拉起
AsyncTask(ENamedThreads::AnyBackgroundThreadNormalTask, [Config]() {
FLiteRtLmUnrealApi::LoadModel(Config);
});
利用 ULiteRtLmSubsystem 提供的全局生命周期管理。
// 通过全局单例加载,自动维护模型存续状态
ULiteRtLmSubsystem* Subsystem = GEngine->GetEngineSubsystem<ULiteRtLmSubsystem>();
Subsystem->LoadModel(MyConfig);
只需在 Actor 上挂载 ULiteRtLmComponent 并勾选 bAutoInit。
为什么加载 2GB 模型不卡?因为我们只是告诉 OS “文件在这”,只有计算触碰到权重时才执行物理搬运。
一旦启动,插件会物理预留 MaxNumTokens * 步长 大小的显存,确保对话过程中不会因显存动态增长而崩溃。