pytorch
c64dec19 - Python binding to export bytecode format for lite interpreter (#32621)

Commit
4 years ago
Python binding to export bytecode format for lite interpreter (#32621) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/32621 Export the "_save_for_mobile" method to Python so that the bytecode format for lite interpreter can be added or updated to the original script model. It's the first step of python binding for lite interpreter, as discussed in this [internal post](https://fb.workplace.com/groups/1144215345733672/permalink/1478900738931796/) and offline. Next step is to export the load_for_mobile and run method of mobile module, so that users could verify the mobile model from Python. Test: use the following python script to display the bytecode part of the updated model file. ``` #!/usr/bin/env python3 import sys import pickle import pprint import zipfile class FakeObject(object): def __init__(self, module, name, args): self.module = module self.name = name self.args = args self.state = None def __repr__(self): state_str = "" if self.state is None else f"(state={self.state!r})" return f"{self.module}.{self.name}{self.args!r}{state_str}" def __setstate__(self, state): self.state = state class FakeClass(object): def __init__(self, module, name): self.module = module self.name = name self.__new__ = self.fake_new def __repr__(self): return f"{self.module}.{self.name}" def __call__(self, *args): return FakeObject(self.module, self.name, args) def fake_new(self, *args): return FakeObject(self.module, self.name, args) class DumpUnpickler(pickle._Unpickler): def find_class(self, module, name): return FakeClass(module, name) def persistent_load(self, pid): return FakeObject("pers", "obj", (pid,)) def main(argv): zfile = zipfile.ZipFile(argv[1]) names = [i for i in zfile.namelist() if "bytecode.pkl" in i] if not names: print("bytecode.pkl not found.") return with zfile.open(names[0], "r") as handle: value = DumpUnpickler(handle).load() pprint.pprint(value) if __name__ == "__main__": sys.exit(main(sys.argv)) ``` Test Plan: Imported from OSS Differential Revision: D19596359 Pulled By: iseeyuan fbshipit-source-id: 19a4a771320f95217f5b0f031c2c04db7b4079a8
Author
Martin Yuan
Parents
Loading