打开推理池
打开加密容器或明文模型,得到 darra_pool*。options_or_null == NULL 时等价于 max_workers=1、queue_capacity=64、overflow=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 内嵌钥匙,新分发传 NULLpassword_or_null(const char*) — 激活码或试用码。已绑机 / WhiteBox 试用传 NULLprefer_provider_or_null(const char*) — 指名 Provider(见 运行时);NULL = 自动选options_or_null(const darra_pool_options*) — NULL = workers=1、queue=64、FAILout(darra_pool**) — 成功时*out拿到池;失败时*out == NULL
返回值:
int32_t—DARRA_OK(0)成功;非 0 = darra_error_code
典型错误:与 darra_session_open 相同(DARRA_PASSWORD_REQUIRED / DARRA_UNSUPPORTED_PAYLOAD(如 Windows 上 rknn 载荷)/ DARRA_PROVIDER_MISSING / DARRA_HARDWARE_MISSING / DARRA_INTERNAL(size 未填、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_PAYLOADprefer_provider_or_null(const char*) — 指名 Provider;NULL = 自动选options_or_null(const darra_pool_options*) — NULL = 与默认选项相同out(darra_pool**) — 成功时*out拿到池;失败时*out == NULL
返回值:
int32_t—DARRA_OK(0)成功;非 0 = darra_error_code
Paddle 是运行时载荷(PayloadKind=paddle)。Windows 收到 rknn 载荷同样 DARRA_UNSUPPORTED_PAYLOAD。
示例:
darra_pool* pool = NULL;
int32_t rc = darra_pool_open_plain("model.onnx", NULL, NULL, &pool);