onnx.model_container

模型容器

class onnx.model_container.ModelContainer[源代码]

实现了一个API,用于在主ModelProto之外存储大型张量,它避免了在定义模型时复制大型初始化器,并且这些初始化器永远不会通过protobuf序列化。在用户明确保存模型之前,没有张量存储在磁盘上。

enumerate_graph_protos() Iterable[GraphProto][source]

枚举模型中的所有GraphProtos。

is_in_memory_external_initializer(name: str) bool[source]

判断初始化器名称是否是存储在内存中的外部初始化器。 在这种情况下,名称必须以‘#’开头。

load(file_path: str, load_large_initializers: bool = True)[source]

加载大型模型。

Parameters:
  • file_path – 模型文件

  • load_large_initializers – 加载大型初始化器, 如果未完成,模型将不完整,但可以用于 查看模型而不执行它,并且方法 _load_large_initializers() 可以稍后用于加载它们

save(file_path: str, all_tensors_to_one_file: bool = False) ModelProto[source]

保存大型模型。 该函数返回一个ModelProto, 如果模型不需要任何修改,则返回当前的ModelProto, 如果需要更改(例如为每个外部张量提供文件名),则返回其修改后的副本。

Parameters:
  • file_path – 模型文件

  • all_tensors_to_one_file – 将所有大张量保存到一个文件中,或者每个大张量保存为一个文件

Returns:

保存的ModelProto

set_large_initializers(large_initializers: dict[str, ndarray])[source]

添加所有大型张量(未存储在模型中)。

make_large_model

onnx.model_container.make_large_model(graph: GraphProto, large_initializers: dict[str, ndarray] | None = None, **kwargs: Any) ModelContainer[source]

构建一个ModelContainer

protobuf 的 C API 和 Python API 在没有序列化 protos 的情况下无法操作。此函数使用 ModelContainer 的 Python API。

Parameters:
  • make_graph 返回

  • large_initializers – 字典 name: 大张量, 大张量是任何支持DLPack协议的Python对象, 张量的所有权将转移给ModelContainer, 张量必须定义类似于numpy张量的tobytes方法

  • **kwargs – 任何要添加到返回实例的属性

Returns:

模型容器

make_large_tensor_proto

onnx.model_container.make_large_tensor_proto(location: str, tensor_name: str, tensor_type: int, shape: tuple[int, ...]) TensorProto[source]

创建一个外部张量。

Parameters:
  • location – 唯一标识符(不一定是路径)

  • tensor_name – 图中的张量名称

  • tensor_type – onnx 类型

  • shape – 初始化的形状

Returns:

创建的张量