跳到主要内容

打开推理池

打开加密容器或明文模型,得到 darra_pool*options_or_null == nullptr 时 workers=1、queue=64、overflow=FAIL。C++ 与 C 共用同一份 C ABI。

备注

指名 Provider 不可用 = fail-closed,绝不静默降级。对应包未装:内部 darra_runtime_ensure 一次(无进度)。max_workers 合法 1..8,硬顶 8;0 视为 1。超出范围 / size 未填 = DARRA_INTERNAL

加密容器

darra_pool_open()

int32_t darra_pool_open(const char* container_path,
const char* key_path_or_null,
const char* password_or_null,
const char* prefer_provider_or_null,
const darra_pool_options* options_or_null,
darra_pool** out);

打开加密模型池。激活码 / 试用码只在打开这一步用,与 会话打开 同一套三种用法。

参数:

  • container_path (const char*) — .darmodel 路径(必填)
  • key_path_or_null (const char*) — 旧双文件旁路 .darmkey;DARB1 内嵌钥匙,新分发传 nullptr
  • password_or_null (const char*) — 激活码或试用码。已绑机 / WhiteBox 试用传 nullptr
  • prefer_provider_or_null (const char*) — 指名 Provider;nullptr = 自动选。指名但不可用 = fail-closed
  • options_or_null (const darra_pool_options*) — nullptr = workers=1、queue=64、FAIL。非 nullptr 时须先填 options->size
  • out (darra_pool**) — 成功时 *out 拿到池;失败时 *out == nullptr

返回值:

  • int32_tDARRA_OK 成功;非 0 = 错误码

典型错误同 darra_session_openDARRA_PASSWORD_REQUIRED / DARRA_PASSWORD_WRONG / DARRA_MACHINE_MISMATCH / DARRA_TRIAL_EXHAUSTED / DARRA_BAD_CONTAINER / DARRA_IO_NOT_FOUND / DARRA_UNSUPPORTED_PAYLOAD / DARRA_PROVIDER_MISSING / DARRA_HARDWARE_MISSING / DARRA_DRIVER_TOO_OLD / DARRA_NETWORK_FAILED / DARRA_CHECKSUM_MISMATCH / DARRA_CANCELLED / DARRA_INTERNAL

相关结构:

typedef enum darra_overflow {
DARRA_OVERFLOW_FAIL = 0, // 队列满 → submit 立即 DARRA_BUSY
DARRA_OVERFLOW_BLOCK = 1, // 队列满 → submit 等到有空位
DARRA_OVERFLOW_DROP_OLDEST = 2 // 丢掉最旧未开跑任务(它 wait 得 DARRA_BUSY)
} darra_overflow;

typedef struct darra_pool_options {
uint32_t size;
int32_t max_workers; // 0=1;合法 1..8(硬顶 8)
int32_t queue_capacity; // 0=64;合法 1..4096
int32_t overflow; // darra_overflow
darra_session_options worker; // size=0 则各 worker 用会话默认选项
int32_t weight; // 0=100;与其它池/会话抢同一 GPU 的相对份额
} darra_pool_options;
  • worker.unique 强制为 1(即使填 0,Core 也会当成 1)。
  • worker 的 intra/inter/affinity/gpu/weight 语义同 darra_session_options
  • 池级 weight 与 worker.weight:多模型抢同一卡时看池级 weight + darra_sched_set_gpu_slots。不是 CUDA SM%。
  • worker.size = 0:各 worker 用会话默认(自动线程、不设亲和、gpu_device = 0)。
备注

禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。本结构只约束本池 worker 线程。

示例:

darra_pool_options opt{};
opt.size = sizeof(opt);
opt.max_workers = 2;
opt.queue_capacity = 100;
opt.overflow = DARRA_OVERFLOW_DROP_OLDEST;
opt.worker.size = sizeof(opt.worker);
opt.worker.unique = 1;
opt.worker.gpu_device = 0;
opt.weight = 100;

darra_pool* pool = nullptr;
int32_t rc = darra_pool_open("model.darmodel", nullptr, nullptr, nullptr, &opt, &pool);
if (rc != DARRA_OK) {
darra_error_t err{};
err.size = sizeof(err);
darra_last_error(&err);
return static_cast<int>(rc);
}

明文模型

darra_pool_open_plain()

int32_t darra_pool_open_plain(const char* model_path,
const char* prefer_provider_or_null,
const darra_pool_options* options_or_null,
darra_pool** out);

打开明文模型池。与 darra_pool_open 同一推理路径,只跳过容器解码与验票。

参数:

  • model_path (const char*) — .onnx / .pdmodel(伴生 .pdiparams)/ 含二者的目录。.pt / .pth 仍拒 → DARRA_UNSUPPORTED_PAYLOAD
  • prefer_provider_or_null (const char*) — 指名 Provider;nullptr = 自动选
  • options_or_null (const darra_pool_options*) — nullptr = workers=1、queue=64、FAIL
  • out (darra_pool**) — 成功时 *out 拿到池;失败时 *out == nullptr

返回值:

  • int32_tDARRA_OK 成功;非 0 = 错误码

Paddle 是运行时载荷(PayloadKind = paddle)。Windows 收到 rknn 载荷同样 DARRA_UNSUPPORTED_PAYLOAD

示例:

darra_pool* pool = nullptr;
int32_t rc = darra_pool_open_plain("model.onnx", nullptr, nullptr, &pool);