跳到主要内容

打开

打开加密容器或明文模型建会话。本绑定公开 Session.open / open_plain / open_ex 三个入口;没有 open_plain_ex

打开时按 PayloadKind × 硬件 × prefer_provider 选 Provider;对应包未装则内部调一次 runtime.ensure(无进度回调,可能阻塞下载)。指名但不可用 = fail-closed,绝不静默降级。

Windows 无 RKNN

Windows 收到 rknn 载荷抛 UnsupportedPayloadError。Windows 上指名 edge-rknnUnsupportedPlatformError

Paddle 是运行时载荷:open_plain 可接 .pdmodel(同目录须有 .pdiparams)或含二者的目录。

打开

Session.open()

@classmethod
def open(
cls,
container_path: str,
*,
key_path: str | None = None,
password: str | None = None,
prefer_provider: str | None = None,
) -> Session

打开已签发容器(.darmodel,DARM1)建会话。

参数:

  • container_path (str) — 容器路径,不能为空
  • key_path (str | None) — 授权文件 .darmkey,默认 None
  • password (str | None) — 永久密码通道,默认 None
  • prefer_provider (str | None) — 指名 Provider;None = 按载荷 × 硬件 × 已装包自动选

返回值:

  • Session — 已打开的会话
备注

key_pathpassword 至少给一个;都给则 key 文件优先验票。指名但不可用 = fail-closed,绝不静默降级。container_path 为空抛 InternalError(码 18)。

典型异常:IoNotFoundError / IoDeniedError / BadContainerError / BadLicenseError / PasswordRequiredError / PasswordWrongError / MachineMismatchError / TrialExhaustedError / UnsupportedPayloadError(如 Windows 上 rknn 载荷)/ ProviderMissingError / ProviderAbiMismatchError / HardwareMissingError / DriverTooOldError / NetworkFailedError / ChecksumMismatchError / CancelledError(后三码来自内部 ensure)。

示例:

from darra_ai import Session

with Session.open("model.darmodel", key_path="model.darmkey") as s:
print(s.provider_id, s.task)

Session.open_plain()

@classmethod
def open_plain(
cls,
onnx_path: str,
*,
prefer_provider: str | None = None,
) -> Session

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

参数:

  • onnx_path (str) — 明文模型路径(历史参数名)。不能为空
  • prefer_provider (str | None) — 指名 Provider;None = 自动选

返回值:

  • Session — 已打开的会话
备注

onnx_path 可以是:

  • .onnx 文件
  • .pdmodel 文件(同目录须有对应 .pdiparams
  • *.pdmodel + *.pdiparams 的目录

Paddle 是运行时载荷(payload_kind=paddle)。.pt / .pth 仍拒 → UnsupportedPayloadError(先转 ONNX)。路径为空抛 InternalError。目录存在但缺 pdmodel / pdiparams,或 .pdmodel 缺伴生 .pdiparamsUnsupportedPayloadError

其余(含内部 ensure、fail-closed、Windows 无 RKNN)同 open。本绑定没有 open_plain_ex

示例:

with Session.open_plain("model.onnx") as s:
print(s.encrypted) # False

with Session.open_plain("model.pdmodel") as s:
print(s.payload_kind) # paddle

Session.open_ex()

@classmethod
def open_ex(
cls,
container_path: str,
options: SessionOptions | None = None,
) -> Session

打开加密容器建会话(可扩展入口)。

参数:

  • container_path (str) — 容器路径
  • options (SessionOptions | None) — 可选通道。None = 全部为空

返回值:

  • Session — 已打开的会话
备注

当前翻译到 Session.open(把 optionskey_path / password / prefer_provider 展开)。Core 落地 darra_session_open_ex 后只换调用点,公开签名不变。构造 SessionOptions 加载 native。本绑定的 SessionOptions 不含头文件的 intra_op_threads / inter_op_threads / cpu_affinity_mask

示例:

from darra_ai import Session, SessionOptions

opt = SessionOptions(key_path="model.darmkey", prefer_provider="onnx-cpu")
with Session.open_ex("model.darmodel", opt) as s:
print(s.meta())

生命周期

close()

def close(self) -> None

关闭会话并释放全部资源。重复 close / 未打开均为 no-op。

示例:

s = Session.open("model.darmodel", key_path="model.darmkey")
try:
print(s.meta())
finally:
s.close()
备注

close 后句柄失效,再调 meta / infer_imageInternalError(「会话已关闭或尚未打开」)。禁止与任何在飞调用并发。 __del__ 是兜底,不要当主路径。

__enter__ / __exit__

def __enter__(self) -> Session
def __exit__(self, *exc: object) -> None

上下文管理器。退出 with 块时自动 close()

示例:

from darra_ai import Session

with Session.open("model.darmodel", key_path="model.darmkey") as s:
print(s.task, s.labels)