From 320fc1c0a7b51acced7bb0d3babbe73ac0758649 Mon Sep 17 00:00:00 2001 From: lucylq Date: Wed, 4 Dec 2024 22:18:37 -0800 Subject: [PATCH] [executorch][serialization] Data serialization interface Introduce data serialization interface. Differential Revision: [D65947145](https://our.internmc.facebook.com/intern/diff/D65947145/) [ghstack-poisoned] --- exir/_serialize/data_serializer.py | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 exir/_serialize/data_serializer.py diff --git a/exir/_serialize/data_serializer.py b/exir/_serialize/data_serializer.py new file mode 100644 index 00000000000..033a44e95b7 --- /dev/null +++ b/exir/_serialize/data_serializer.py @@ -0,0 +1,35 @@ +from abc import ABC, abstractmethod +from typing import Dict, List, Tuple, Union + +from executorch.exir._serialize._cord import Cord + +from executorch.exir.schema import Tensor + +# Abstract base class that data serializers should adhere to. +class DataSerializer(ABC): + @abstractmethod + def __init__(self) -> None: + """ + This initializer may be overridden in derived classes to hold + the data required for serialization, eg. configurations. + """ + pass + + @abstractmethod + def serialize_tensors(self, + tensors: Dict[str, int], + tensor_buffer: List[bytes], + tensor_metadata: Dict[str, Tensor], + ) -> Union[Cord, bytes, bytearray]: + """ + Serializes a list of tensor metadata and tensors emitted by ExecuTorch + into a binary blob. + """ + raise NotImplementedError("serialize_data") + + @abstractmethod + def deserialize_tensors(self, blob: Union[Cord, bytes, bytearray]) -> Tuple[Dict[str, int], List[bytes], Dict[str, Tensor]]: + """ + Deserializes a blob into a list of tensor metadata and tensors. + """ + raise NotImplementedError("deserialize_data")