跳到主要内容

打开推理池

打开加密容器或明文模型,得到 darra_pool*options_or_null == NULL 时等价于 max_workers=1queue_capacity=64overflow=FAIL

备注

指名 Provider 不可用 = fail-closed,绝不静默降级。对应包未装:内部 darra_runtime_ensure 一次(无进度)。想看进度请先自己调 ensure(幂等)。max_workers 合法 1..8,硬顶 8

加密容器

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);

打开加密模型池。路径 / 激活码 / Provider 语义同 darra_session_open。worker 的 unique 强制为 1。

参数:

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

返回值:

典型错误:与 darra_session_open 相同(DARRA_PASSWORD_REQUIRED / DARRA_UNSUPPORTED_PAYLOAD(如 Windows 上 rknn 载荷)/ DARRA_PROVIDER_MISSING / DARRA_HARDWARE_MISSING / DARRA_INTERNALsize 未填、max_workers 超出 1..8、queue_capacity 超出 1..4096)等)。打开本身不返回 DARRA_BUSY

相关结构:

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;
  • 调用方填 options->size = sizeof(darra_pool_options)
  • worker.size = 0:各 worker 用会话默认(自动线程、gpu_device=0)。非 0 时须填 sizeof(darra_session_options),字段见 打开会话
  • worker.unique 由 SDK 强制为 1,调用方不用设。
  • weight 是并发槽份额,不是 CUDA SM%。同卡多模型见 darra_sched_set_gpu_slots
  • 禁止改 Windows ReservedCpuSets禁止动 PLC 隔离核。

示例:

darra_pool_options opt;
memset(&opt, 0, sizeof(opt));
opt.size = sizeof(opt);
opt.max_workers = 2;
opt.queue_capacity = 128;
opt.overflow = DARRA_OVERFLOW_BLOCK;
opt.worker.size = sizeof(opt.worker);
opt.worker.gpu_device = 0;
opt.weight = 100;

darra_pool* pool = NULL;
int32_t rc = darra_pool_open("inspect.darmodel", NULL, NULL, NULL, &opt, &pool);

明文模型

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 同一推理路径,只跳过容器解码与验票。选项结构见 darra_pool_open

参数:

  • model_path (const char*) — .onnx / .pdmodel(伴生 .pdiparams)/ 含二者的目录。.pt / .pth 仍拒 → DARRA_UNSUPPORTED_PAYLOAD
  • prefer_provider_or_null (const char*) — 指名 Provider;NULL = 自动选
  • options_or_null (const darra_pool_options*) — NULL = 与默认选项相同
  • out (darra_pool**) — 成功时 *out 拿到池;失败时 *out == NULL

返回值:

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

示例:

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