stable-2023-09-19
Pre-release
Pre-release
New models enabled (e2e tested via portable lib):
- Emformer RNN-T Transcriber, Predictor, Joiner (as three modules)
Quantization:
- Enabled quantization for incpetion_v4 and deeplab_v3 in examples with XNNPACKQuantizer
API changes:
- Runtime API
- Many runtime APIs changed to improve ergonomics and to better match the style guide. Most of these changes are non-breaking (unless indicated as breaking), since the old APIs are available but marked as deprecated. We recommend that users migrate off of the deprecated APIs before the next release.
- For an example of how these API changes affected common use cases, see the edits made to
examples/executor_runner/executor_runner.cppunder the "Files changed" tab of stable-2023-09-12...78f884f
- For an example of how these API changes affected common use cases, see the edits made to
- Breaking behavioral change:
MethodMetaMethodMeta::num_non_const_buffersandMethodMeta::non_const_buffer_sizeno longer require adjusting by 1 to skip over the reserved zero index. This will require that users ofMethodMetaremove adjustments while counting and iterating over non-const buffers.- Details about the change, including migration to adapt to the new behavior: 5762802
- Also note that these methods have been renamed to
num_memory_planned_buffersandmemory_planned_buffer_size(see note below) - Note that the deprecated
Program::num_non_const_buffersandProgram::get_non_const_buffer_sizemethods did not change behavior re: skipping index zero. But they are deprecated, and will be removed in a future release, so we recommend that users migrate to theMethodMetaAPI and behavior.
MethodMetamethod names changed fromnon_const to memory_plannedMethodMeta::num_non_const_buffers()is nowMethodMeta::num_memory_planned_buffers()MethodMeta::non_const_buffer_size(N)is nowMethodMeta::memory_planned_buffer_size(N)- Changed in 6944c45
- The old names are available but deprecated, and will be removed in a future release
- Breaking code-compatibility change:
Method's constructor andinit()method are now private- Users should not have used these methods;
Methodinstances should only be created byProgram::load_method() - Changed in 4f3e5e6
- Users should not have used these methods;
MemoryManagerconstructor no longer requiresconst_allocatororkernel_temporary_allocator- A new constructor lets users avoid creating zero-sized allocators that they don't use
- It also renames the parameters for the remaining allocators to make their uses more clear
- Changed in 6944c45
- Example migration to the new constructor: fedc04c
- The old constructor is available but deprecated, and will be removed in a future release
- Breaking code-compatibility change:
MemoryManageris now final and cannot be subclassed- Changed in 6944c45
HierarchicalAllocator's constructor now takes an array ofSpan<uint8_t>instead of an array ofMemoryAllocator- Breaking code-compatibility change:
HierarchicalAllocatoris nowfinaland cannot be subclassed- Changed in 58c8c92
Program::Load()renamed toProgram::load()- Changed in 8a5f3e8
- The old name is still available but deprecated, and will be removed in a future release
FileDataLoader::From()renamed toFileDataLoader::from()- Changed in e2dd0be
- The old name is still available but deprecated, and will be removed in a future release
MmapDataLoader::From()renamed toMmapDataLoader::from()- Changed in 395e51a
- The old name is still available but deprecated, and will be removed in a future release
- Many runtime APIs changed to improve ergonomics and to better match the style guide. Most of these changes are non-breaking (unless indicated as breaking), since the old APIs are available but marked as deprecated. We recommend that users migrate off of the deprecated APIs before the next release.
- Delegate API
- File rename:
runtime/backend/backend_registry.cpp->runtime/backend/interface.cpp - Partition API update: Partitioner.partition function takes
ExportedPrograminstead oftorch.nn.GraphModule. With this change we access the parameters and buffer in partition function.- How to rebase: access graphmodule by
exported_program.graph_module
- How to rebase: access graphmodule by
- File rename:
- SDK
- BundledProgram updates APIs to enable user bundling test cases on specific method by using method name instead of method id in the past
-
AOT: class
BundledConfig (method_names: List[str], inputs: List[List[Any]], expected_outputs: List[List[Any]]).method_namesis the new added attribute. -
Runtime: Replace the original method_idx with method_name
- API for load bundled test input to ET program:
__ET_NODISCARD Error LoadBundledInput( Method& method, serialized_bundled_program* bundled_program_ptr, MemoryAllocator* memory_allocator, const char* method_name, size_t testset_idx); - API for verify result with bundled expected output:
__ET_NODISCARD Error VerifyResultWithBundledExpectedOutput( Method& method, serialized_bundled_program* bundled_program_ptr, MemoryAllocator* memory_allocator, const char* method_name, size_t testset_idx, double rtol = 1e-5, double atol = 1e-8);
- API for load bundled test input to ET program:
-
Details and examples can be found https://github.com/pytorch/executorch/blob/stable/docs/website/docs/tutorials/bundled_program.md
-
- BundledProgram updates APIs to enable user bundling test cases on specific method by using method name instead of method id in the past
Bug Fixes:
- When exporting with enable_aot=True, all constant tensors will be lifted as inputs to the graph (in addition to the parameters and buffers).
- Kwargs are now consistently placed in the call_spec of the exported program.