-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement pre-packed blobs serialiation on disk
and pre-packed blobs sharing when weights sharing is not enabled. Memory map pre-packed blobs. Recurse into subgraphs in ToGraphProtoWithExternalInitializers to make sure all big weights are serialized along with their pre-packs that is to be shared between the subgraphs.
- Loading branch information
1 parent
bf4d3e1
commit 938bccf
Showing
28 changed files
with
1,353 additions
and
246 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// Copyright (c) Microsoft Corporation. All rights reserved. | ||
// Licensed under the MIT License. | ||
|
||
#pragma once | ||
|
||
namespace onnxruntime { | ||
|
||
class PrepackedForSerialization; | ||
|
||
// These options that affect how the model initializers are saved. | ||
// This includes options to align external initializer offset. | ||
// For models running on CPU, ORT will try to use mmap to load external | ||
// initializers. To use mmap, external initializer need to be offset aligned. | ||
// ORT saves external initializers into signle data file, each initializer is | ||
// accessed with offset(start position of initializer) and length(byte length of | ||
// initializer) of the data file. To use mmap, each offset need to be aligned | ||
// which means offset need to divisible by allocation granularity(64KB for | ||
// windows and 4K for other OSes). With align_offset to true, ORT will align | ||
// offset for large initializer when save ONNX model with external data file. | ||
struct ModelSavingOptions { | ||
explicit ModelSavingOptions(size_t size_threshold) | ||
: initializer_size_threshold(size_threshold) {} | ||
|
||
// Mimimal initializer size in bytes to be externalized on disk | ||
size_t initializer_size_threshold; | ||
// Offset will always be page aligned and allocation granularity aligned for | ||
// mmap support. This is done by padding previous tensor data with zeros | ||
// keeping same length. | ||
bool align_offset = false; | ||
// Alignment threshold for size of data. | ||
// Having a low threshold will waste file space for small initializers. | ||
// Only when tensor's data size is > the page_align_threshold it will be force | ||
// aligned. Default to 1MB. | ||
int64_t align_threshold = 1048576; | ||
// The allocation Granularity for mmap() support. | ||
// Typically 64KB for Windows & 4KB for other OSes. Default to 64KB. | ||
int64_t allocation_granularity = 65536; | ||
// Optional pointer to a container of pre-packed initializers to be | ||
// embedded into the external initializers, so they can also be loaded | ||
// from disk. | ||
const PrepackedForSerialization* prepacked_for_save = nullptr; | ||
}; | ||
|
||
} // namespace onnxruntime |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.