Skip to content

Develop MVP of model bundle #3482

Closed
Closed

Description

@Nic-Ma

Is your feature request related to a problem? Please describe.
Thanks for the interesting technical discussion with @ericspod @wyli @atbenmurray @rijobro , as we still have many unclear requirements and unknown use cases, we plan to develop the model package feature step by step, May adjust the design based on feedback during the development.

For the initial step, the core team aligned to develop a small but typical example for inference first, it will use JSON config files to define environments, components and workflow, save the config and model into TorchScript model. then other projects can easily reconstruct the exact same python program and parameters to reproduce the inference. When the small MVP is ready, will share and discuss within the team for the next steps.

I will try to implement the MVP referring to some existing solutions, like NVIDIA Clara MMAR, ignite online package, etc. Basic task steps:

Activity

  1. self-assigned this
    on Dec 13, 2021
  2. dbericat commented on Dec 13, 2021

    @dbericat
    Member

    @CPBridge this is the current PR to expand model metadata.

  3. Nic-Ma commented on Dec 14, 2021

    @Nic-Ma
    ContributorAuthor

    Hi @wyli @ericspod @rijobro @atbenmurray ,

    I updated the ticket description to make it more clear.

    Thanks.

  4. wyli commented on Dec 14, 2021

    @wyli
    Contributor

    We've discussed that the MVP should focus on the minimal structure, including model weights, basic environment/system info, maintaining changelog/versioning, how to ensure accessibility for both human and machine.

  5. Nic-Ma commented on Dec 14, 2021

    @Nic-Ma
    ContributorAuthor

    Hi @wyli ,

    Sure, I added these items to the MVP task list.

    Thanks.

  6. dbericat commented on Dec 14, 2021

    @dbericat
    Member
  7. ericspod commented on Dec 14, 2021

    @ericspod
    Member

    We should discuss a clear definition of requirements and objectives. We want to define a format of a single file or multiples files which contains the model weights at least with secondary information describing how to use it for various use cases. This will allow a human or a program to determine what sort of model it is, how to use the model, and what tasks to use it for. For our MVP we want to consider the starting position of what the model weight storage and metadata storage would look like and if it would achieve that objective to some degree.

    The base level set of requirements I would suggest are:

    • Ability to save model weights
    • Ability to save runnable model in Torchscript and/or ONNX
    • Include information on model name, version, description, authorship, intended use
    • Include package and technical information needed to use model, eg. MONAI version, Pytorch and other package versions
    • Description of input and output, eg. how to interpret predictions returned
    • Description in some form of how to transform input data into the form expected by the model (ie. preprocess transform sequence) and transform for output

    One use case for this information is a human user looking into how the model is used in a particular task. They would want a clear idea of what inputs are expected and what the outputs mean. Whatever format this information is can be either easily read by a human or easily converted into a convenient format using included tools.

    A second use case is a deployment environment which automatically constructs whatever infrastructure is needed around a model to present it through a standard interface. This would require generating transform sequences automatically to pre- and post-process data, and load the model through some script defining the workflow. This would used by MONAI Deploy to automatically generate a MAP from the package, or another script automatically create a Docker image to serve the model as a command line tool or through Flask, or another script to interface with existing hosting services to upload the model and whatever other information is needed.

  8. Nic-Ma commented on Dec 15, 2021

    @Nic-Ma
    ContributorAuthor

    Hi @ericspod ,

    Thanks very much for your detailed description.
    I will try to prepare a draft model package for discussion according to your summary and our basic ideas, and then develop the necessary features to support it.

    Thanks.

  9. added this to the MONAI MMAR [P0] milestone on Dec 15, 2021
  10. self-assigned this
    on Dec 15, 2021
  11. wyli commented on Dec 16, 2021

    @wyli
    Contributor

    I'd strongly recommend that the MVP should support the essential features for fast prototyping of model packages. The following uses the popular detectron2 package as an example:

    These are mainly to ensure a good flexibility and extensibility of the packaging.

  12. Nic-Ma commented on Dec 16, 2021

    @Nic-Ma
    ContributorAuthor

    Hi @wyli ,

    Thanks for your great suggestions.
    These are very good references for config parsing logic in steps 3 and 4 of this ticket, we definitely need similar features for flexibility and extensibility.

    Thanks.

  13. Nic-Ma commented on Dec 16, 2021

    @Nic-Ma
    ContributorAuthor

    Hi @wyli @ericspod @atbenmurray @rijobro ,

    I tried to prepare a draft model package structure for the first step of this ticket in the tutorial PR.
    Project-MONAI/tutorials#487
    Could you please help take a look and share some feedback for the model package structure?
    (1) I didn't implement any config-parsing related logic so far, I think that's later steps.
    (2) I am not very sure to put some description strings in metadata.json or README.md, so I put in both sides, would like to see your ideas.

    Thanks in advance.

  14. 18 remaining items

  15. Nic-Ma commented on Feb 19, 2022

    @Nic-Ma
    ContributorAuthor

    Another related PR relating to the configuration parsing: #3822.

    Thanks.

  16. Nic-Ma commented on Feb 21, 2022

    @Nic-Ma
    ContributorAuthor

    Related PR for common training, evaluation and inference: #3832 .

    Thanks.

  17. Nic-Ma commented on Feb 21, 2022

    @Nic-Ma
    ContributorAuthor

    As we are still developing the ConfigParser in PR #3822, I compared it with the Hydra OmegaConf: https://omegaconf.readthedocs.io/en/latest/index.html
    There are several interesting features of it we still not support:

    1. Create or access config by dot list instead of dict keys:
      https://omegaconf.readthedocs.io/en/latest/usage.html#from-a-dot-list
    2. Create or override config by command line:
      https://omegaconf.readthedocs.io/en/latest/usage.html#from-command-line-arguments
      Added draft support in PR: 3482 add run API for common training, evaluation and inference #3832
    3. Support default value if the target node is not existing:
      https://omegaconf.readthedocs.io/en/latest/usage.html#default-values
    4. Use the value "???" to indicate mandatory values:
      https://omegaconf.readthedocs.io/en/latest/usage.html#mandatory-values
    5. Serialization: https://omegaconf.readthedocs.io/en/latest/usage.html#serialization
      We tried to support it with TorchScript saving.
    6. Relative interpolation for variables: https://omegaconf.readthedocs.io/en/latest/usage.html#variable-interpolation
      Similiar to our "@" mark with ID, but also support relative path.
    7. Merge configs: https://omegaconf.readthedocs.io/en/latest/usage.html#merging-configurations
      Draft support in PR: 3482 add run API for common training, evaluation and inference #3832
    8. Read-Only flag to protect config content: https://omegaconf.readthedocs.io/en/latest/usage.html#read-only-flag
    9. Debugger integration: https://omegaconf.readthedocs.io/en/latest/usage.html#debugger-integration

    I think we can try to support 3 with enhanced idea: use the "@" mark to define a placeholder, then parser gives the value.
    And we can try to support 4 to make the base config similar to "base class with abstractmethod" that must be overridden.

    For other features we may consider later.

    Thanks.

  18. ericspod commented on Feb 21, 2022

    @ericspod
    Member

    I have a PR now on the specification document #3834 which should have been a draft PR but oh well. It's very minimal compared to what @Nic-Ma prototyped here and lacks details about intent, use cases, design expectations, etc.

  19. wyli commented on Feb 25, 2022

    @wyli
    Contributor

    I think #3822 is now intuitive and flexible after a few rounds of refactoring. We may want to provide a system-wide flag to optionally disable eval() because it is too powerful and unsafe..

  20. Nic-Ma commented on Feb 28, 2022

    @Nic-Ma
    ContributorAuthor

    I put all the links of related PRs to the task steps in the above ticket description.

    Thanks.

  21. Nic-Ma commented on Mar 7, 2022

    @Nic-Ma
    ContributorAuthor

    Related PR for inference example bundle: Project-MONAI/tutorials#604.

    Thanks.

  22. changed the title [-]Develop MVP of model package[/-] [+]Develop MVP of model bundle[/+] on Mar 11, 2022
  23. wyli commented on Mar 20, 2022

    @wyli
    Contributor

    follow-up from the dev meeting:

    • to generate a simple 'template' for monai bundle, including metadata and the required folder structure
    • explore further the hugging face API
    • look into integration with monai label
    • meeting/demo with monai deploy
  24. ericspod commented on Mar 21, 2022

    @ericspod
    Member
  25. Nic-Ma commented on Mar 22, 2022

    @Nic-Ma
    ContributorAuthor

    After sharing with the internal NVIDIA Clara team, I put 2 missing features in the task feature.

     1. Config python logging properties in a file.
     2. Specify rank ID for component to run only on some ranks, for example, saving checkpoint in rank 0.
    

    Thanks.

  26. Nic-Ma commented on Mar 30, 2022

    @Nic-Ma
    ContributorAuthor

    Feedback from MONAI deploy team:

    1. How to detect / avoid dead-lock in macro replacement.
    2. How to support real string starts with syntax, may add "" support.

    Welcome more testing and feedback later.

    Thanks.

  27. Nic-Ma commented on Apr 4, 2022

    @Nic-Ma
    ContributorAuthor

    Most of the tasks are completed, I created several new tickets to track the left items, and let's close this big first ticket now.

    Thanks.

  28. Repository owner moved this from In Progress to Done in MONAI 0.9on Apr 4, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions