onnx.model_container

ModelContainer

class onnx.model_container.ModelContainer[source]

实现了一个 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]

加载大型模型。

参数:
  • file_path – 模型文件

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

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

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

参数:
  • file_path – 模型文件

  • all_tensors_to_one_file – 将所有大型张量保存到一个文件或每个大型张量一个文件

返回值:

保存的 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 在不序列化 proto 的情况下无法操作。此函数使用 ModelContainer 的 Python API。

参数:
  • graphmake_graph 返回

  • large_initializers – 字典 name: large tensor,大型张量是任何支持 DLPack 协议的 python 对象,张量的所有权转移到 ModelContainer,张量必须定义方法 tobytes,例如 numpy 张量

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

返回值:

ModelContainer

make_large_tensor_proto

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

创建外部张量。

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

  • tensor_name – 图中的张量名称

  • tensor_type – onnx 类型

  • shape – 初始化器的形状

返回值:

创建的张量