Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Add] sparsify.login CLI and function #180

Merged
merged 17 commits into from
Apr 28, 2023
Merged

Conversation

corey-nm
Copy link
Contributor

@corey-nm corey-nm commented Feb 22, 2023

This PR adds a sparsify.login utility to authenticate users with a valid api_key from sparsify cloud;
After authentication, the utility saves credentials at ~/.config/neuralmagic/credentials.json and goes onto
install proprietary sparsifyml dependency from Neural Magic PyPi Server

As of now, we only have sparsifyml_nightly pushed up; this should change to sparsifyml once the package is updated.

Usage:

Usage: sparsify.login [OPTIONS]

  sparsify.login utility to log into sparsify locally.

Options:
  --api-key TEXT  API key copied from your account.  [required]
  --version       Show the version and exit.  [default: False]
  --help          Show this message and exit.  [default: False]

example:

sparsify.login --api-key [API-KEY]

Note: Kindly reach out for a dummy test api key if needed.

Test plan:
Ran example command with dummy api-key manually and verified the right version of sparsifyml was installed

src/sparsify/login.py Outdated Show resolved Hide resolved
@rahul-tuli
Copy link
Member

Should this point to sparsify.alpha or main?

@corey-nm corey-nm changed the base branch from main to sparsify.alpha February 22, 2023 17:03
rahul-tuli
rahul-tuli previously approved these changes Feb 22, 2023
Copy link
Member

@rahul-tuli rahul-tuli left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice clean PR!

src/sparsify/login.py Outdated Show resolved Hide resolved
Copy link
Member

@bfineran bfineran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM overall

src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Show resolved Hide resolved
bfineran
bfineran previously approved these changes Feb 23, 2023
Copy link
Member

@bfineran bfineran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor comment - also we'll need some sort of helper function that the sparsify-local apis can call into to verify from the written json file

src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
bfineran
bfineran previously approved these changes Feb 28, 2023
setup.py Outdated Show resolved Hide resolved
Copy link
Member

@bfineran bfineran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to support two flows:

  1. Log-In CLI experience - (a) validates API key and writes api key to config file, (b) installs sparsifyml using retrieved auth token
  2. Local API validation - (a) checks if sparsifyml version matches, if not attempts (1b) using the saved config file API key

src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
@bfineran bfineran self-assigned this Apr 5, 2023
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
@rahul-tuli rahul-tuli changed the base branch from sparsify.alpha to sparsify.alpha-style-updates April 25, 2023 11:24
Base automatically changed from sparsify.alpha-style-updates to sparsify.alpha April 25, 2023 14:51
* Remove Global variables
* Update PyPi Server link
* Add Logging
* Move exceptions to their own file
@rahul-tuli rahul-tuli assigned rahul-tuli and unassigned bfineran Apr 28, 2023
@rahul-tuli rahul-tuli changed the title Adding sparsify.login entrypoint and function [Add] sparsify.login CLI and function Apr 28, 2023
@rahul-tuli rahul-tuli requested review from tdg5, rahul-tuli, bfineran, KSGulin and dbogunowicz and removed request for rahul-tuli April 28, 2023 13:28
KSGulin
KSGulin previously approved these changes Apr 28, 2023
Copy link
Contributor

@KSGulin KSGulin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really clean implementation! Looks good to me, just had an optional nit

src/sparsify/utils/exceptions.py Outdated Show resolved Hide resolved
src/sparsify/login.py Outdated Show resolved Hide resolved
src/sparsify/utils/helpers.py Outdated Show resolved Hide resolved
src/sparsify/utils/helpers.py Outdated Show resolved Hide resolved
Add: suggestion from @KSGulin

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>
Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>
KSGulin
KSGulin previously approved these changes Apr 28, 2023
src/sparsify/utils/helpers.py Outdated Show resolved Hide resolved
raise ValueError(f"Unknown response code {response.status_code}")

_LOGGER.info("Successfully authenticated with Neural Magic Account API key")
return response.json()["access_token"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You'd potentially want to grab the id_token here also. But that may be future work.

tdg5
tdg5 previously approved these changes Apr 28, 2023
Copy link
Member

@bfineran bfineran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sparsifyml login/import may need to be moved later into imports... merging now

@bfineran bfineran merged commit 47afad9 into sparsify.alpha Apr 28, 2023
@bfineran bfineran deleted the sparsify-login branch April 28, 2023 15:33
bfineran added a commit that referenced this pull request Jun 30, 2023
* Adding sparsify.login entrypoint and function

* Adding docstring to exception

* Adding pip install of sparsifyml

* Respond to review

* Adding help message at top

* Adding setup python to workflow

* Adding checked sparsifyml import

* Apply suggestions from code review

Co-authored-by: Danny Guinther <dannyguinther@gmail.com>

* check against major minor version only

* add client_id and other bug fixes

* Fix: `--index` --> `--index-url`

* Update install command missed during rebase

* * Clean up code
* Remove Global variables
* Update PyPi Server link
* Add Logging
* Move exceptions to their own file

* Style fixes

* Apply suggestions from code review

Add: suggestion from @KSGulin

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* Update src/sparsify/login.py

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* remove comment

---------

Co-authored-by: Benjamin Fineran <bfineran@users.noreply.github.com>
Co-authored-by: Danny Guinther <dannyguinther@gmail.com>
Co-authored-by: Benjamin <ben@neuralmagic.com>
Co-authored-by: rahul-tuli <rahul@neuralmagic.com>
Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>
bfineran added a commit that referenced this pull request Jun 30, 2023
* Adding sparsify.login entrypoint and function

* Adding docstring to exception

* Adding pip install of sparsifyml

* Respond to review

* Adding help message at top

* Adding setup python to workflow

* Adding checked sparsifyml import

* Apply suggestions from code review

Co-authored-by: Danny Guinther <dannyguinther@gmail.com>

* check against major minor version only

* add client_id and other bug fixes

* Fix: `--index` --> `--index-url`

* Update install command missed during rebase

* * Clean up code
* Remove Global variables
* Update PyPi Server link
* Add Logging
* Move exceptions to their own file

* Style fixes

* Apply suggestions from code review

Add: suggestion from @KSGulin

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* Update src/sparsify/login.py

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* remove comment

---------

Co-authored-by: Benjamin Fineran <bfineran@users.noreply.github.com>
Co-authored-by: Danny Guinther <dannyguinther@gmail.com>
Co-authored-by: Benjamin <ben@neuralmagic.com>
Co-authored-by: rahul-tuli <rahul@neuralmagic.com>
Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>
KSGulin added a commit that referenced this pull request Jul 7, 2023
* Clear existing sparsify source

* Add back version file

* Port of sparsify.auto from private repository (#124)

* remove javascript deps

* Initial port of autosparse to sparsify.auto

* Initial port autosparse -> sparsify.auto

* Added tests and fixes

* Add back yarn

* Add github workflow for test checks

* Update workflows

Co-authored-by: Benjamin Fineran <bfineran@users.noreply.github.com>

workflow

* Add GHA tests for base, package, and auto (#133)

* `sparsify.package` base CLI (#125)

* bump up main to 1.2.0 (#128)

Co-authored-by: dhuang <dhuang@MacBook-Pro.local>

* Adds the following:

* Setup directory Structure
* `from sparsify import package` importable + callable function
* A constants file with supported tasks, criterions, and deployment scenarios (Should probably converted to `Enums` or something better than `python lists`)
* Add `click` as a required dependency
* Additional CLI helpers for updated acceptance criterion
* `sparsify.package` cli utility
* setup test directory
* Add tests for CLI
* Setup Entrypoints

* Remove old docstring

* - Moved utils outside `package`
- Renamed package_ to package
- Add more tests
- Update Usage command
- Rebased on `sparsify.alpha`
- Add typing
- Add version info to cli

Apply review comments from @corey-nm
- Remove `cli_helpers.py` and rely on `click`

* Remove unintended change added while resolving merge conflicts

* Style

* Add dataset registry
update cli to use dataset registry

* Fix failing tests

* Centralize task registry (#132)

* Centralize task name and alias handeling

* Propagate TaskName updates to auto tasks

* Fix click parse args call

* Fix failing tests after TASK name updates

* Prevent auto install of integrations on sparsify import (#134)

* * Change `NO_VNNI` --> `DEFAULT`
* Refactor CLI arg parsing cause originally `System.exit()` was thrown on invoking help
* Rename `scenario` --> `target`
* Remove single character shortcuts, as suggested by @bfineran
* Default directory to `None` for now, logic to choose an appropriate name will be added to diff #130
* Added show defaults at the top level `click.command()` decorator
* Added a `DEFAULT_OPTIMIZNG_METRIC`
* Added a `DEFAULT_DEPLOYMENT_SCENARIO`
* Changed `optimizing_metric` help message
* Updated Tests

* - Style
- Example Usage

Co-authored-by: dhuangnm <74931910+dhuangnm@users.noreply.github.com>
Co-authored-by: dhuang <dhuang@MacBook-Pro.local>
Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* Add DDP support (#126)

* `sparsify.package` backend-call (#130)

* bump up main to 1.2.0 (#128)

Co-authored-by: dhuang <dhuang@MacBook-Pro.local>

* Adds the following:

* Setup directory Structure
* `from sparsify import package` importable + callable function
* A constants file with supported tasks, criterions, and deployment scenarios (Should probably converted to `Enums` or something better than `python lists`)
* Add `click` as a required dependency
* Additional CLI helpers for updated acceptance criterion
* `sparsify.package` cli utility
* setup test directory
* Add tests for CLI
* Setup Entrypoints

* Remove old docstring

* - Moved utils outside `package`
- Renamed package_ to package
- Add more tests
- Update Usage command
- Rebased on `sparsify.alpha`
- Add typing
- Add version info to cli

Apply review comments from @corey-nm
- Remove `cli_helpers.py` and rely on `click`

* Remove unintended change added while resolving merge conflicts

* Style

* Add dataset registry
update cli to use dataset registry

* Fix failing tests

* Centralize task registry (#132)

* Centralize task name and alias handeling

* Propagate TaskName updates to auto tasks

* Fix click parse args call

* Fix failing tests after TASK name updates

* Prevent auto install of integrations on sparsify import (#134)

* * Change `NO_VNNI` --> `DEFAULT`
* Refactor CLI arg parsing cause originally `System.exit()` was thrown on invoking help
* Rename `scenario` --> `target`
* Remove single character shortcuts, as suggested by @bfineran
* Default directory to `None` for now, logic to choose an appropriate name will be added to diff #130
* Added show defaults at the top level `click.command()` decorator
* Added a `DEFAULT_OPTIMIZNG_METRIC`
* Added a `DEFAULT_DEPLOYMENT_SCENARIO`
* Changed `optimizing_metric` help message
* Updated Tests

* - Style
- Example Usage

* Add proper commands + gha workflows

* Refactor package function to make a call to the backend service

* Add template function for output
Add importable Backend Base url
Remove unnecessary args from package function
Add end to end integration test

* Updated tests, addressed comments

* Base Cli + importable function

* Style

* Remove files added in faulty rebase

* Changed base url, styling

Co-authored-by: dhuangnm <74931910+dhuangnm@users.noreply.github.com>
Co-authored-by: dhuang <dhuang@MacBook-Pro.local>
Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>
Co-authored-by: Konstantin <konstantin@neuralmagic.com>

* `sparsify.package` updates (#141)

* Update output to also print model metrics
Update `--optimizing_metrics` to take in a string containing comma separated metrics for example `--optimizing_metric "compression, accuracy"`(added a `_csv_callback` function for that)
Update Usage instructions accordingly
Add a log statement to package function
Added more tests

* Address comments

* Rename `normalized_metric` --> `metric_` to avoid potential confusion

* Add a getter for TASK_REGISTRY and DATASET_REGISTRY (#142)

* Add a getter for TASK_REGISTRY and DATASET_REGISTRY

* typing

* fix potential bug

* Add None to test

* Updated tests according to comments from @bfineran

* Make test cleaner based on feedback from @corey-nm

* Remove config creator (#136)

* [Auto] Add Tensorboard Support (#147)

* Support for Hyperparameter Tuning (#145)

* force convert yolov5 metric keys to float (#151)

* [Auto] Update function name and description to be more generic (#149)

* rename and flip logic for stopping_condition flag (#152)

* [Auto] Support for multi-stage tuning (#157)

* Support for updated tuning flow (#159)

* Support tuning of CLI args (#158)

* Support multiple optimizing metrics (#160)

* Log important updates with an easily visible format (#161)

* Update the user output for `sparsify.package` (#166)

* Add Dockerfile
Download deployment directory, and
Update instructions for user
Update tests

* Add volume mount to docker command

* [Auto] Update interface for sparsifyml (#173)

* Fix: remove debug line

* Update sparsify.auto interface for sparsifyml

* rename interface -> schemas

* Sparsify.alpha.auto (#179)

* Update: sparsify.version to match with main

* Delete: sparsify.package

* Empty commit

* Add: stitch functions

* Update: Env var name
Update: stitch functions slightly

* Add: Sparsifyml to dependencies in setup.py

* Style: Fixes

* Some more fixers

* OLD IC integration working

* Run Integration Tests only when sparsifyml installed

* Fix yolov5 integration

* Propagate student args to teacher

* Update teacher kwargs only when key not present for safety

* Updated: integration_test

* Updated: num trials to 2

* Fix: failing GHA

* make sparsifyml optional
implement own strtobool function

* [Create] alpha implementation (#181)

* [Create] alpha implementation

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: corey-nm <109536191+corey-nm@users.noreply.github.com>

---------

Co-authored-by: corey-nm <109536191+corey-nm@users.noreply.github.com>

* Adding one shot cli (#184)

* [Feature branch] standard clis (#187)

* Adding skeleton clis

* [CLI standardization] sparsify.run one-shot impl (#188)

* [CLI standardization] sparsify.run one-shot impl

* Fixing one-shot cli

---------

Co-authored-by: Corey Lowman <corey@neuralmagic.com>

* [WIP][CLI standardization] sparsify.run training-aware and spares-transfer initial impl (#189)

* [CLI standardization] sparsify.run one-shot impl

* [WIP][CLI standardization] sparsify.run training-aware and spares-transfer initial impl

* Fixing training-aware/sparse-transfer

---------

Co-authored-by: Corey Lowman <corey@neuralmagic.com>

* Adding docstring to sparsify.run

* Moving use case to top arg

* Removing apply/init

---------

Co-authored-by: Benjamin Fineran <bfineran@users.noreply.github.com>

* Style changes for sparsify.alpha (#194)

* Update: Minimum supported Python Version to `3.7` as it's consistent with our other repos (#193)

* [Add] `sparsify.login` CLI and function (#180)

* Adding sparsify.login entrypoint and function

* Adding docstring to exception

* Adding pip install of sparsifyml

* Respond to review

* Adding help message at top

* Adding setup python to workflow

* Adding checked sparsifyml import

* Apply suggestions from code review

Co-authored-by: Danny Guinther <dannyguinther@gmail.com>

* check against major minor version only

* add client_id and other bug fixes

* Fix: `--index` --> `--index-url`

* Update install command missed during rebase

* * Clean up code
* Remove Global variables
* Update PyPi Server link
* Add Logging
* Move exceptions to their own file

* Style fixes

* Apply suggestions from code review

Add: suggestion from @KSGulin

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* Update src/sparsify/login.py

Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* remove comment

---------

Co-authored-by: Benjamin Fineran <bfineran@users.noreply.github.com>
Co-authored-by: Danny Guinther <dannyguinther@gmail.com>
Co-authored-by: Benjamin <ben@neuralmagic.com>
Co-authored-by: rahul-tuli <rahul@neuralmagic.com>
Co-authored-by: Konstantin Gulin <66528950+KSGulin@users.noreply.github.com>

* training aware and sparse transfer run mode support (#191)

* add sparsifyml dependencies to sparsify install (#195)

* update task registry + generalize matching (#201)

* rename performance to optim-level in legacy auto api (#199)

* [sparsify.run one-shot] CLI propagation of recipe_args (#198)

* Remove hardware optimization options (#200)

* Remove hardware optimization options

* Rename instead of remove optim_level

* Add OPTIM_LEVEL back to all list

* simple fixes in initial one-shot testing flow (#206)

* fixes for initial E2E runs of sparse transfer and training aware (#207)

* fixes for initial E2E runs of sparse transfer and training aware

* quality

* [Alpha] Rework Auto main script into Training-Aware and Sparse-Transfer script (#208)

* Initial scratch work

* Complete, but untested implementation

* Working yolov5

* Working across all integrations

* IC path fix

* Require model

* Remove debug adds

* make API KEY an argument (#211)

* Update integration and unit tests (#214)

* Update integration and unit tests

* Update IC base test model

* Add login step to test setup (#216)

* bump up version to 1.6.0 (#215) (#218)

Co-authored-by: dhuang <dhuang@MacBook-Pro-2.local>

(cherry picked from commit 699a476)

Co-authored-by: dhuangnm <74931910+dhuangnm@users.noreply.github.com>

* [BugFixes] Fix failing tests in `sparsify.alpha` (#223)

* Intermediate commit should be amended

* Remove failing test as synced with @KSGulin

* Explicitly pin protobuff depencies. (#225)

* Default num_samples to None (#227)

* remove legacy UI cmds from `make build` (#229)

* Remove dev print statements from IC runner (#231)

* Remove dev print statements

* Remove logger

* Fix incomplete wheel build (#232)

* Fix incomplete wheel build

* Add license string

* Add environment hecks

* Address review comments

* Catch generic Exception

* signal test

---------

Co-authored-by: Rahul Tuli <rahul@neuralmagic.com>
Co-authored-by: dhuangnm <74931910+dhuangnm@users.noreply.github.com>
Co-authored-by: dhuang <dhuang@MacBook-Pro.local>
Co-authored-by: Benjamin Fineran <bfineran@users.noreply.github.com>
Co-authored-by: corey-nm <109536191+corey-nm@users.noreply.github.com>
Co-authored-by: Danny Guinther <dannyguinther@gmail.com>
Co-authored-by: Benjamin <ben@neuralmagic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants