See #211
for how to get ort format models from onnx format.
See also https://github.com/moonshine-ai/moonshine/blob/main/core/ort-utils/ort-utils.cpp#L35
for how to use mmap
int ort_session_from_path(const OrtApi *ort_api, OrtEnv *env,
OrtSessionOptions *session_options, const char *path,
OrtSession **session, const char **mmapped_data,
size_t *mmapped_data_size) {
std::string cpp_path(path);
if (cpp_path.find(".ort") != std::string::npos) {
int fd = open(path, O_RDONLY);
if (fd == -1) {
fprintf(stderr, "Failed to open memory map file %s at %s:%d\n", path,
__FILE__, __LINE__);
return -1;
}
struct stat st;
if (fstat(fd, &st) == -1) {
fprintf(stderr, "Failed to get file size for %s at %s:%d\n", path,
__FILE__, __LINE__);
return -1;
}
*mmapped_data = static_cast<const char *>(
mmap(nullptr, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0));
if (*mmapped_data == MAP_FAILED) {
fprintf(stderr, "Failed to memory map file %s at %s:%d\n", path, __FILE__,
__LINE__);
return -1;
}
*mmapped_data_size = st.st_size;
close(fd);
RETURN_ON_ORT_ERROR(ort_api, ort_api->CreateSessionFromArray(
env, *mmapped_data, *mmapped_data_size,
session_options, session));
} else {
if (!std::filesystem::exists(path)) {
fprintf(stderr, "Model directory '%s' does not exist at %s:%d\n", path,
__FILE__, __LINE__);
return -1;
}
RETURN_ON_ORT_ERROR(
ort_api, ort_api->CreateSession(env, path, session_options, session));
*mmapped_data = nullptr;
*mmapped_data_size = 0;
}
return 0;
}
We need to update our code to initialize sessions using mmap on non-Windows platforms when users provide ort format models.
Help from the community is appreciated.
See also
See #211
for how to get
ortformat models fromonnxformat.See also https://github.com/moonshine-ai/moonshine/blob/main/core/ort-utils/ort-utils.cpp#L35
for how to use mmap
We need to update our code to initialize sessions using mmap on non-Windows platforms when users provide
ortformat models.Help from the community is appreciated.
See also