NIR-Hub: storing neuromorphic models online using NIR #133
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Feature: NIR Hub
This PR presents a mock example for a new "NIR Hub" feature to the NIR project. The NIR Hub provides a centralized platform where researchers and developers can:
This creates a "model zoo" for neuromorphic computing similar to PyTorch Hub or HuggingFace Hub, but specifically for cross-framework neuromorphic model sharing.
What's Included
Core Components
nir/hub/client.py): with upload and downloadnir/hub/version.py)nir/hub/server.py): REST API for model storage and retrieval, search, etc.nir/hub/cli.py)Documentation and Examples
docs/source/hub.md)examples/hub/)tests/test_hub.py)Usage Examples
Starting a Hub Server
Uploading a Model
Downloading a Model
Searching models with the CLI
Example output:
Implementation Notes
Database Schema
See ./nir/hub/HUB_DATABASE.md:
erDiagram User ||--o{ Model : uploads User ||--o{ Vote : casts Model ||--o{ Vote : receives Model ||--o{ Version : has Model ||--o{ Tag : tagged_with Model ||--o{ Platform : compatible_with Model ||--o{ File : contains User { string id PK string username string email string name string organization string website string bio string avatar_url datetime created_at datetime last_login boolean is_admin } Model { string id PK string model_name string description string user_id FK string nir_version string framework_origin datetime created_at datetime updated_at int download_count int upvote_count int downvote_count } Version { string id PK string model_id FK string version_number string changelog datetime released_at string nir_version } File { string id PK string model_id FK string filename string filetype string description int size_bytes string content string path } Vote { string id PK string user_id FK string model_id FK boolean is_upvote datetime created_at } Tag { string id PK string name } ModelTag { string model_id FK string tag_id FK } Platform { string id PK string name } ModelPlatform { string model_id FK string platform_id FK boolean verified_compatible }TODOs:
flaskdependency (needed only for the mock server which will not be released)org_or_user/model_id)Things to think about: