Skip to content

[Help wanted] Support loading ort format models using mmap on non-Windows platforms #3226

@csukuangfj

Description

@csukuangfj

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions