synapse-sdk 1.0.0a13__py3-none-any.whl → 2025.11.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of synapse-sdk might be problematic. Click here for more details.
- synapse_sdk/__init__.py +24 -0
- synapse_sdk/cli/__init__.py +310 -5
- synapse_sdk/cli/alias/__init__.py +22 -0
- synapse_sdk/cli/alias/create.py +36 -0
- synapse_sdk/cli/alias/dataclass.py +31 -0
- synapse_sdk/cli/alias/default.py +16 -0
- synapse_sdk/cli/alias/delete.py +15 -0
- synapse_sdk/cli/alias/list.py +19 -0
- synapse_sdk/cli/alias/read.py +15 -0
- synapse_sdk/cli/alias/update.py +17 -0
- synapse_sdk/cli/alias/utils.py +61 -0
- synapse_sdk/cli/code_server.py +687 -0
- synapse_sdk/cli/config.py +440 -0
- synapse_sdk/cli/devtools.py +90 -0
- synapse_sdk/cli/plugin/__init__.py +33 -0
- synapse_sdk/cli/{create_plugin.py → plugin/create.py} +2 -2
- synapse_sdk/cli/plugin/publish.py +45 -0
- synapse_sdk/{plugins/cli → cli/plugin}/run.py +12 -5
- synapse_sdk/clients/agent/__init__.py +9 -3
- synapse_sdk/clients/agent/container.py +133 -0
- synapse_sdk/clients/agent/core.py +19 -0
- synapse_sdk/clients/agent/ray.py +298 -9
- synapse_sdk/clients/backend/__init__.py +41 -12
- synapse_sdk/clients/backend/annotation.py +13 -5
- synapse_sdk/clients/backend/core.py +59 -0
- synapse_sdk/clients/backend/data_collection.py +186 -0
- synapse_sdk/clients/backend/hitl.py +17 -0
- synapse_sdk/clients/backend/integration.py +19 -4
- synapse_sdk/clients/backend/ml.py +10 -7
- synapse_sdk/clients/backend/models.py +78 -0
- synapse_sdk/clients/base.py +381 -34
- synapse_sdk/clients/ray/serve.py +2 -0
- synapse_sdk/clients/validators/collections.py +31 -0
- synapse_sdk/devtools/config.py +94 -0
- synapse_sdk/devtools/docs/.gitignore +20 -0
- synapse_sdk/devtools/docs/README.md +41 -0
- synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
- synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
- synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
- synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
- synapse_sdk/devtools/docs/blog/authors.yml +25 -0
- synapse_sdk/devtools/docs/blog/tags.yml +19 -0
- synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
- synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
- synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
- synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
- synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
- synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
- synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/docs/api/index.md +52 -0
- synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
- synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
- synapse_sdk/devtools/docs/docs/categories.md +0 -0
- synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/docs/configuration.md +83 -0
- synapse_sdk/devtools/docs/docs/contributing.md +306 -0
- synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
- synapse_sdk/devtools/docs/docs/faq.md +179 -0
- synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
- synapse_sdk/devtools/docs/docs/features/index.md +24 -0
- synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
- synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/docs/installation.md +94 -0
- synapse_sdk/devtools/docs/docs/introduction.md +47 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
- synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
- synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
- synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
- synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
- synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
- synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
- synapse_sdk/devtools/docs/package-lock.json +18784 -0
- synapse_sdk/devtools/docs/package.json +48 -0
- synapse_sdk/devtools/docs/sidebars.ts +122 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
- synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
- synapse_sdk/devtools/docs/src/css/custom.css +30 -0
- synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
- synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
- synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
- synapse_sdk/devtools/docs/static/.nojekyll +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
- synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
- synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
- synapse_sdk/devtools/docs/static/img/logo.png +0 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
- synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
- synapse_sdk/devtools/docs/tsconfig.json +8 -0
- synapse_sdk/devtools/server.py +41 -0
- synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
- synapse_sdk/devtools/streamlit_app/app.py +128 -0
- synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
- synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
- synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
- synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
- synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
- synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
- synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
- synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
- synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
- synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
- synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
- synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
- synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
- synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
- synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
- synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
- synapse_sdk/devtools/streamlit_app.py +10 -0
- synapse_sdk/loggers.py +74 -9
- synapse_sdk/plugins/README.md +1340 -0
- synapse_sdk/plugins/__init__.py +0 -13
- synapse_sdk/plugins/categories/base.py +145 -30
- synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
- synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
- synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
- synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
- synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
- synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
- synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
- synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
- synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
- synapse_sdk/plugins/categories/export/actions/export/utils.py +187 -0
- synapse_sdk/plugins/categories/export/templates/config.yaml +21 -0
- synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
- synapse_sdk/plugins/categories/export/templates/plugin/export.py +160 -0
- synapse_sdk/plugins/categories/neural_net/actions/deployment.py +29 -14
- synapse_sdk/plugins/categories/neural_net/actions/inference.py +13 -1
- synapse_sdk/plugins/categories/neural_net/actions/train.py +1084 -38
- synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
- synapse_sdk/plugins/categories/neural_net/base/__init__.py +0 -0
- synapse_sdk/plugins/categories/neural_net/base/inference.py +37 -0
- synapse_sdk/plugins/categories/neural_net/templates/config.yaml +30 -5
- synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
- synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
- synapse_sdk/plugins/categories/{export/actions/export.py → pre_annotation/actions/pre_annotation/action.py} +4 -4
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
- synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
- synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
- synapse_sdk/plugins/categories/smart_tool/templates/config.yaml +5 -2
- synapse_sdk/plugins/categories/upload/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/__init__.py +0 -0
- synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
- synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
- synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
- synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
- synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
- synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
- synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
- synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
- synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
- synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
- synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
- synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
- synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
- synapse_sdk/plugins/categories/upload/templates/config.yaml +33 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
- synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +102 -0
- synapse_sdk/plugins/enums.py +3 -1
- synapse_sdk/plugins/models.py +140 -16
- synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
- synapse_sdk/plugins/templates/schema.json +491 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/config.yaml +1 -0
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
- synapse_sdk/plugins/utils/__init__.py +46 -0
- synapse_sdk/plugins/utils/actions.py +119 -0
- synapse_sdk/plugins/utils/config.py +203 -0
- synapse_sdk/plugins/utils/legacy.py +95 -0
- synapse_sdk/plugins/utils/ray_gcs.py +66 -0
- synapse_sdk/plugins/utils/registry.py +58 -0
- synapse_sdk/shared/__init__.py +25 -0
- synapse_sdk/shared/enums.py +93 -0
- synapse_sdk/types.py +19 -0
- synapse_sdk/utils/converters/__init__.py +240 -0
- synapse_sdk/utils/converters/coco/__init__.py +0 -0
- synapse_sdk/utils/converters/coco/from_dm.py +322 -0
- synapse_sdk/utils/converters/coco/to_dm.py +215 -0
- synapse_sdk/utils/converters/dm/__init__.py +56 -0
- synapse_sdk/utils/converters/dm/from_v1.py +627 -0
- synapse_sdk/utils/converters/dm/to_v1.py +367 -0
- synapse_sdk/utils/converters/pascal/__init__.py +0 -0
- synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
- synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
- synapse_sdk/utils/converters/yolo/__init__.py +0 -0
- synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
- synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
- synapse_sdk/utils/dataset.py +46 -0
- synapse_sdk/utils/encryption.py +158 -0
- synapse_sdk/utils/file/__init__.py +39 -0
- synapse_sdk/utils/file/archive.py +32 -0
- synapse_sdk/utils/file/checksum.py +56 -0
- synapse_sdk/utils/file/chunking.py +31 -0
- synapse_sdk/utils/file/download.py +385 -0
- synapse_sdk/utils/file/encoding.py +40 -0
- synapse_sdk/utils/file/io.py +22 -0
- synapse_sdk/utils/file/video/__init__.py +29 -0
- synapse_sdk/utils/file/video/transcode.py +307 -0
- synapse_sdk/utils/file.py.backup +301 -0
- synapse_sdk/utils/http.py +138 -0
- synapse_sdk/utils/network.py +309 -0
- synapse_sdk/utils/storage/__init__.py +72 -0
- synapse_sdk/utils/storage/providers/__init__.py +183 -0
- synapse_sdk/utils/storage/providers/file_system.py +134 -0
- synapse_sdk/utils/storage/providers/gcp.py +13 -0
- synapse_sdk/utils/storage/providers/http.py +190 -0
- synapse_sdk/utils/storage/providers/s3.py +91 -0
- synapse_sdk/utils/storage/providers/sftp.py +47 -0
- synapse_sdk/utils/storage/registry.py +17 -0
- synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
- synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
- synapse_sdk/clients/backend/dataset.py +0 -51
- synapse_sdk/plugins/categories/import/actions/import.py +0 -10
- synapse_sdk/plugins/cli/__init__.py +0 -21
- synapse_sdk/plugins/cli/publish.py +0 -37
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/.env.dist +0 -24
- synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/main.py +0 -4
- synapse_sdk/plugins/utils.py +0 -50
- synapse_sdk/utils/file.py +0 -87
- synapse_sdk/utils/storage.py +0 -91
- synapse_sdk-1.0.0a13.dist-info/METADATA +0 -43
- synapse_sdk-1.0.0a13.dist-info/RECORD +0 -111
- /synapse_sdk/{plugins/categories/import → clients/validators}/__init__.py +0 -0
- /synapse_sdk/{plugins/categories/import/actions → devtools}/__init__.py +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info/licenses}/LICENSE +0 -0
- {synapse_sdk-1.0.0a13.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,814 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: train-action-overview
|
|
3
|
+
title: Train Action Overview
|
|
4
|
+
sidebar_position: 1
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Train Action Overview
|
|
8
|
+
|
|
9
|
+
The Train Action provides unified functionality for both model training and hyperparameter optimization (HPO) through a single interface. It supports regular training workflows and advanced hyperparameter tuning with Ray Tune integration.
|
|
10
|
+
|
|
11
|
+
## Quick Overview
|
|
12
|
+
|
|
13
|
+
**Category:** Neural Net
|
|
14
|
+
**Available Actions:** `train`
|
|
15
|
+
**Execution Method:** Job-based execution
|
|
16
|
+
**Modes:** Training mode and Hyperparameter Tuning mode
|
|
17
|
+
|
|
18
|
+
## Key Features
|
|
19
|
+
|
|
20
|
+
- **Unified Interface**: Single action for both training and hyperparameter tuning
|
|
21
|
+
- **Flexible Hyperparameters**: No rigid structure - plugins define their own hyperparameter schema
|
|
22
|
+
- **Ray Tune Integration**: Advanced HPO with multiple search algorithms and schedulers
|
|
23
|
+
- **Automatic Trial Tracking**: Trial IDs automatically injected into logs during tuning
|
|
24
|
+
- **Real-time Trial Progress**: Live trial table updates with hyperparameters and metrics
|
|
25
|
+
- **All Trial Models Upload**: All trial models uploaded, not just the best one
|
|
26
|
+
- **Resource Management**: Configurable CPU/GPU allocation per trial
|
|
27
|
+
- **Best Model Selection**: Automatic best model checkpoint selection after tuning
|
|
28
|
+
- **Progress Tracking**: Real-time progress updates across training/tuning phases
|
|
29
|
+
|
|
30
|
+
## Modes
|
|
31
|
+
|
|
32
|
+
### Training Mode (Default)
|
|
33
|
+
|
|
34
|
+
Standard model training with fixed hyperparameters.
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"action": "train",
|
|
39
|
+
"params": {
|
|
40
|
+
"name": "my_model",
|
|
41
|
+
"dataset": 123,
|
|
42
|
+
"checkpoint": null,
|
|
43
|
+
"is_tune": false,
|
|
44
|
+
"hyperparameter": {
|
|
45
|
+
"epochs": 100,
|
|
46
|
+
"batch_size": 32,
|
|
47
|
+
"learning_rate": 0.001,
|
|
48
|
+
"optimizer": "adam"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Hyperparameter Tuning Mode
|
|
55
|
+
|
|
56
|
+
Hyperparameter optimization using Ray Tune.
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"action": "train",
|
|
61
|
+
"params": {
|
|
62
|
+
"name": "my_tuning_job",
|
|
63
|
+
"dataset": 123,
|
|
64
|
+
"checkpoint": null,
|
|
65
|
+
"is_tune": true,
|
|
66
|
+
"hyperparameters": [
|
|
67
|
+
{
|
|
68
|
+
"name": "batch_size",
|
|
69
|
+
"type": "choice",
|
|
70
|
+
"options": [16, 32, 64]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "learning_rate",
|
|
74
|
+
"type": "loguniform",
|
|
75
|
+
"min": 0.0001,
|
|
76
|
+
"max": 0.01,
|
|
77
|
+
"base": 10
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "optimizer",
|
|
81
|
+
"type": "choice",
|
|
82
|
+
"options": ["adam", "sgd"]
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"tune_config": {
|
|
86
|
+
"mode": "max",
|
|
87
|
+
"metric": "accuracy",
|
|
88
|
+
"num_samples": 10,
|
|
89
|
+
"max_concurrent_trials": 2
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Configuration Parameters
|
|
96
|
+
|
|
97
|
+
### Common Parameters (Both Modes)
|
|
98
|
+
|
|
99
|
+
| Parameter | Type | Required | Description |
|
|
100
|
+
| ------------ | ------------- | -------- | ------------------------------------- |
|
|
101
|
+
| `name` | `str` | Yes | Training/tuning job name |
|
|
102
|
+
| `dataset` | `int` | Yes | Dataset ID |
|
|
103
|
+
| `checkpoint` | `int \| None` | No | Checkpoint ID for resuming training |
|
|
104
|
+
| `is_tune` | `bool` | No | Enable tuning mode (default: `false`) |
|
|
105
|
+
| `num_cpus` | `float` | No | CPU resources per trial (tuning only) |
|
|
106
|
+
| `num_gpus` | `float` | No | GPU resources per trial (tuning only) |
|
|
107
|
+
|
|
108
|
+
### Training Mode Parameters (`is_tune=false`)
|
|
109
|
+
|
|
110
|
+
| Parameter | Type | Required | Description |
|
|
111
|
+
| ---------------- | ------ | -------- | ---------------------------------- |
|
|
112
|
+
| `hyperparameter` | `dict` | Yes | Fixed hyperparameters for training |
|
|
113
|
+
|
|
114
|
+
**Note**: The structure of `hyperparameter` is completely flexible and defined by your plugin. Common fields include:
|
|
115
|
+
|
|
116
|
+
- `epochs`: Number of training epochs
|
|
117
|
+
- `batch_size`: Batch size for training
|
|
118
|
+
- `learning_rate`: Learning rate
|
|
119
|
+
- `optimizer`: Optimizer type (adam, sgd, etc.)
|
|
120
|
+
- Any custom fields your plugin needs (e.g., `dropout_rate`, `weight_decay`, `image_size`)
|
|
121
|
+
|
|
122
|
+
### Tuning Mode Parameters (`is_tune=true`)
|
|
123
|
+
|
|
124
|
+
| Parameter | Type | Required | Description |
|
|
125
|
+
| ----------------- | ------ | -------- | ------------------------------------ |
|
|
126
|
+
| `hyperparameters` | `list` | Yes | List of hyperparameter search spaces |
|
|
127
|
+
| `tune_config` | `dict` | Yes | Ray Tune configuration |
|
|
128
|
+
|
|
129
|
+
## Hyperparameter Search Spaces
|
|
130
|
+
|
|
131
|
+
Define hyperparameter distributions for tuning:
|
|
132
|
+
|
|
133
|
+
### Continuous Distributions
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
[
|
|
137
|
+
{
|
|
138
|
+
"name": "learning_rate",
|
|
139
|
+
"type": "uniform",
|
|
140
|
+
"min": 0.0001,
|
|
141
|
+
"max": 0.01
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "dropout_rate",
|
|
145
|
+
"type": "loguniform",
|
|
146
|
+
"min": 0.0001,
|
|
147
|
+
"max": 0.1,
|
|
148
|
+
"base": 10
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Discrete Distributions
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
[
|
|
157
|
+
{
|
|
158
|
+
"name": "batch_size",
|
|
159
|
+
"type": "choice",
|
|
160
|
+
"options": [16, 32, 64, 128]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"name": "optimizer",
|
|
164
|
+
"type": "choice",
|
|
165
|
+
"options": ["adam", "sgd", "rmsprop"]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Quantized Distributions
|
|
171
|
+
|
|
172
|
+
```json
|
|
173
|
+
[
|
|
174
|
+
{
|
|
175
|
+
"name": "learning_rate",
|
|
176
|
+
"type": "quniform",
|
|
177
|
+
"min": 0.0001,
|
|
178
|
+
"max": 0.01,
|
|
179
|
+
"q": 0.0001
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Supported Distribution Types
|
|
185
|
+
|
|
186
|
+
Each hyperparameter type requires specific parameters:
|
|
187
|
+
|
|
188
|
+
| Type | Required Parameters | Description | Example |
|
|
189
|
+
|------|-------------------|-------------|---------|
|
|
190
|
+
| `uniform` | `min`, `max` | Uniform distribution between min and max | `{"name": "lr", "type": "uniform", "min": 0.0001, "max": 0.01}` |
|
|
191
|
+
| `quniform` | `min`, `max` | Quantized uniform distribution | `{"name": "lr", "type": "quniform", "min": 0.0001, "max": 0.01}` |
|
|
192
|
+
| `loguniform` | `min`, `max`, `base` | Log-uniform distribution | `{"name": "lr", "type": "loguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
|
|
193
|
+
| `qloguniform` | `min`, `max`, `base` | Quantized log-uniform distribution | `{"name": "lr", "type": "qloguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
|
|
194
|
+
| `randn` | `mean`, `sd` | Normal (Gaussian) distribution | `{"name": "noise", "type": "randn", "mean": 0.0, "sd": 1.0}` |
|
|
195
|
+
| `qrandn` | `mean`, `sd` | Quantized normal distribution | `{"name": "noise", "type": "qrandn", "mean": 0.0, "sd": 1.0}` |
|
|
196
|
+
| `randint` | `min`, `max` | Random integer between min and max | `{"name": "epochs", "type": "randint", "min": 5, "max": 15}` |
|
|
197
|
+
| `qrandint` | `min`, `max` | Quantized random integer | `{"name": "epochs", "type": "qrandint", "min": 5, "max": 15}` |
|
|
198
|
+
| `lograndint` | `min`, `max`, `base` | Log-random integer | `{"name": "units", "type": "lograndint", "min": 16, "max": 256, "base": 2}` |
|
|
199
|
+
| `qlograndint` | `min`, `max`, `base` | Quantized log-random integer | `{"name": "units", "type": "qlograndint", "min": 16, "max": 256, "base": 2}` |
|
|
200
|
+
| `choice` | `options` | Choose from a list of values | `{"name": "optimizer", "type": "choice", "options": ["adam", "sgd"]}` |
|
|
201
|
+
| `grid_search` | `options` | Grid search over all values | `{"name": "batch_size", "type": "grid_search", "options": [16, 32, 64]}` |
|
|
202
|
+
|
|
203
|
+
**Important Notes:**
|
|
204
|
+
- All hyperparameters must include `name` and `type` fields
|
|
205
|
+
- For `loguniform`, `qloguniform`, `lograndint`, `qlograndint`: `base` parameter is required (typically 10 or 2)
|
|
206
|
+
- For `choice` and `grid_search`: Use `options` (not `values`)
|
|
207
|
+
- For range-based types: Use `min` and `max` (not `lower` and `upper`)
|
|
208
|
+
|
|
209
|
+
## Tune Configuration
|
|
210
|
+
|
|
211
|
+
### Basic Configuration
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
{
|
|
215
|
+
"mode": "max", # "max" or "min"
|
|
216
|
+
"metric": "accuracy", # Metric to optimize
|
|
217
|
+
"num_samples": 10, # Number of trials
|
|
218
|
+
"max_concurrent_trials": 2 # Parallel trials
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### With Search Algorithm
|
|
223
|
+
|
|
224
|
+
```python
|
|
225
|
+
{
|
|
226
|
+
"mode": "max",
|
|
227
|
+
"metric": "accuracy",
|
|
228
|
+
"num_samples": 20,
|
|
229
|
+
"max_concurrent_trials": 4,
|
|
230
|
+
"search_alg": {
|
|
231
|
+
"name": "hyperoptsearch", # Search algorithm
|
|
232
|
+
"points_to_evaluate": [ # Optional initial points
|
|
233
|
+
{
|
|
234
|
+
"learning_rate": 0.001,
|
|
235
|
+
"batch_size": 32
|
|
236
|
+
}
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### With Scheduler
|
|
243
|
+
|
|
244
|
+
```python
|
|
245
|
+
{
|
|
246
|
+
"mode": "max",
|
|
247
|
+
"metric": "accuracy",
|
|
248
|
+
"num_samples": 50,
|
|
249
|
+
"max_concurrent_trials": 8,
|
|
250
|
+
"scheduler": {
|
|
251
|
+
"name": "hyperband", # Scheduler type
|
|
252
|
+
"options": {
|
|
253
|
+
"max_t": 100
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Supported Search Algorithms
|
|
260
|
+
|
|
261
|
+
- `basicvariantgenerator` - Random search (default)
|
|
262
|
+
- `bayesoptsearch` - Bayesian optimization
|
|
263
|
+
- `hyperoptsearch` - Tree-structured Parzen Estimator
|
|
264
|
+
|
|
265
|
+
### Supported Schedulers
|
|
266
|
+
|
|
267
|
+
- `fifo` - First-in-first-out (default)
|
|
268
|
+
- `hyperband` - HyperBand scheduler
|
|
269
|
+
|
|
270
|
+
## Plugin Development
|
|
271
|
+
|
|
272
|
+
### For Training Mode
|
|
273
|
+
|
|
274
|
+
Implement the `train()` function in your plugin:
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
def train(run, dataset, hyperparameter, checkpoint, **kwargs):
|
|
278
|
+
"""
|
|
279
|
+
Training function for your model.
|
|
280
|
+
|
|
281
|
+
Args:
|
|
282
|
+
run: TrainRun object for logging
|
|
283
|
+
dataset: Dataset object
|
|
284
|
+
hyperparameter: dict with hyperparameters
|
|
285
|
+
checkpoint: Optional checkpoint for resuming
|
|
286
|
+
"""
|
|
287
|
+
# Access hyperparameters
|
|
288
|
+
epochs = hyperparameter['epochs']
|
|
289
|
+
batch_size = hyperparameter['batch_size']
|
|
290
|
+
learning_rate = hyperparameter['learning_rate']
|
|
291
|
+
|
|
292
|
+
# Training loop
|
|
293
|
+
for epoch in range(epochs):
|
|
294
|
+
# Train one epoch
|
|
295
|
+
loss, accuracy = train_one_epoch(...)
|
|
296
|
+
|
|
297
|
+
# Log metrics
|
|
298
|
+
run.log_metric('training', 'loss', loss, epoch=epoch)
|
|
299
|
+
run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
|
|
300
|
+
|
|
301
|
+
# Log visualizations
|
|
302
|
+
run.log_visualization('predictions', 'train', epoch, image_data)
|
|
303
|
+
|
|
304
|
+
# Save final model
|
|
305
|
+
save_model(model, '/path/to/model.pth')
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### For Tuning Mode
|
|
309
|
+
|
|
310
|
+
Implement the `tune()` function in your plugin:
|
|
311
|
+
|
|
312
|
+
```python
|
|
313
|
+
def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
|
|
314
|
+
"""
|
|
315
|
+
Tuning function for hyperparameter optimization.
|
|
316
|
+
|
|
317
|
+
Args:
|
|
318
|
+
hyperparameter: dict with current trial's hyperparameters
|
|
319
|
+
run: TrainRun object for logging (with is_tune=True)
|
|
320
|
+
dataset: Dataset object
|
|
321
|
+
checkpoint: Optional checkpoint for resuming
|
|
322
|
+
"""
|
|
323
|
+
from ray import tune
|
|
324
|
+
|
|
325
|
+
# Set checkpoint output path BEFORE training
|
|
326
|
+
output_path = Path('/path/to/trial/weights')
|
|
327
|
+
run.checkpoint_output = str(output_path)
|
|
328
|
+
|
|
329
|
+
# Training loop
|
|
330
|
+
for epoch in range(hyperparameter['epochs']):
|
|
331
|
+
loss, accuracy = train_one_epoch(...)
|
|
332
|
+
|
|
333
|
+
# Log metrics (trial_id automatically added)
|
|
334
|
+
run.log_metric('training', 'loss', loss, epoch=epoch)
|
|
335
|
+
run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
|
|
336
|
+
|
|
337
|
+
# Report results to Ray Tune
|
|
338
|
+
results = {
|
|
339
|
+
"accuracy": final_accuracy,
|
|
340
|
+
"loss": final_loss
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
# IMPORTANT: Report with checkpoint
|
|
344
|
+
tune.report(
|
|
345
|
+
results,
|
|
346
|
+
checkpoint=tune.Checkpoint.from_directory(run.checkpoint_output)
|
|
347
|
+
)
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Parameter Order Difference
|
|
351
|
+
|
|
352
|
+
**Important**: The parameter order differs between `train()` and `tune()`:
|
|
353
|
+
|
|
354
|
+
- `train(run, dataset, hyperparameter, checkpoint, **kwargs)`
|
|
355
|
+
- `tune(hyperparameter, run, dataset, checkpoint, **kwargs)`
|
|
356
|
+
|
|
357
|
+
### Automatic Trial ID Logging
|
|
358
|
+
|
|
359
|
+
When `is_tune=True`, the SDK automatically injects `trial_id` into all metric and visualization logs:
|
|
360
|
+
|
|
361
|
+
```python
|
|
362
|
+
# Your plugin code
|
|
363
|
+
run.log_metric('training', 'loss', 0.5, epoch=10)
|
|
364
|
+
|
|
365
|
+
# Actual logged data (trial_id added automatically)
|
|
366
|
+
{
|
|
367
|
+
'category': 'training',
|
|
368
|
+
'key': 'loss',
|
|
369
|
+
'value': 0.5,
|
|
370
|
+
'metrics': {'epoch': 10},
|
|
371
|
+
'trial_id': 'abc123' # Added automatically
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
No plugin changes required - this happens transparently at the SDK level.
|
|
376
|
+
|
|
377
|
+
## Migration from TuneAction
|
|
378
|
+
|
|
379
|
+
The standalone `TuneAction` is now **deprecated**. Migrate to `TrainAction` with `is_tune=true`:
|
|
380
|
+
|
|
381
|
+
### Before (Deprecated)
|
|
382
|
+
|
|
383
|
+
```json
|
|
384
|
+
{
|
|
385
|
+
"action": "tune",
|
|
386
|
+
"params": {
|
|
387
|
+
"name": "my_tuning_job",
|
|
388
|
+
"dataset": 123,
|
|
389
|
+
"hyperparameter": [...],
|
|
390
|
+
"tune_config": {...}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### After (Recommended)
|
|
396
|
+
|
|
397
|
+
```json
|
|
398
|
+
{
|
|
399
|
+
"action": "train",
|
|
400
|
+
"params": {
|
|
401
|
+
"name": "my_tuning_job",
|
|
402
|
+
"dataset": 123,
|
|
403
|
+
"is_tune": true,
|
|
404
|
+
"hyperparameters": [...],
|
|
405
|
+
"tune_config": {...}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Key Changes
|
|
411
|
+
|
|
412
|
+
1. Change `"action": "tune"` to `"action": "train"`
|
|
413
|
+
2. Add `"is_tune": true`
|
|
414
|
+
3. Rename `"hyperparameter"` to `"hyperparameters"`
|
|
415
|
+
|
|
416
|
+
## Examples
|
|
417
|
+
|
|
418
|
+
### Simple Training
|
|
419
|
+
|
|
420
|
+
```json
|
|
421
|
+
{
|
|
422
|
+
"action": "train",
|
|
423
|
+
"params": {
|
|
424
|
+
"name": "resnet50_training",
|
|
425
|
+
"dataset": 456,
|
|
426
|
+
"checkpoint": null,
|
|
427
|
+
"hyperparameter": {
|
|
428
|
+
"epochs": 100,
|
|
429
|
+
"batch_size": 32,
|
|
430
|
+
"learning_rate": 0.001,
|
|
431
|
+
"optimizer": "adam",
|
|
432
|
+
"weight_decay": 0.0001
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Resume from Checkpoint
|
|
439
|
+
|
|
440
|
+
```json
|
|
441
|
+
{
|
|
442
|
+
"action": "train",
|
|
443
|
+
"params": {
|
|
444
|
+
"name": "resnet50_continued",
|
|
445
|
+
"dataset": 456,
|
|
446
|
+
"checkpoint": 789,
|
|
447
|
+
"hyperparameter": {
|
|
448
|
+
"epochs": 50,
|
|
449
|
+
"batch_size": 32,
|
|
450
|
+
"learning_rate": 0.0001,
|
|
451
|
+
"optimizer": "adam"
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Hyperparameter Tuning with Grid Search
|
|
458
|
+
|
|
459
|
+
```json
|
|
460
|
+
{
|
|
461
|
+
"action": "train",
|
|
462
|
+
"params": {
|
|
463
|
+
"name": "resnet50_tuning",
|
|
464
|
+
"dataset": 456,
|
|
465
|
+
"is_tune": true,
|
|
466
|
+
"hyperparameters": [
|
|
467
|
+
{
|
|
468
|
+
"name": "batch_size",
|
|
469
|
+
"type": "grid_search",
|
|
470
|
+
"options": [16, 32, 64]
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"name": "learning_rate",
|
|
474
|
+
"type": "grid_search",
|
|
475
|
+
"options": [0.001, 0.0001]
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"name": "optimizer",
|
|
479
|
+
"type": "grid_search",
|
|
480
|
+
"options": ["adam", "sgd"]
|
|
481
|
+
}
|
|
482
|
+
],
|
|
483
|
+
"tune_config": {
|
|
484
|
+
"mode": "max",
|
|
485
|
+
"metric": "validation_accuracy",
|
|
486
|
+
"num_samples": 12,
|
|
487
|
+
"max_concurrent_trials": 4
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
### Advanced Tuning with HyperOpt and HyperBand
|
|
494
|
+
|
|
495
|
+
```json
|
|
496
|
+
{
|
|
497
|
+
"action": "train",
|
|
498
|
+
"params": {
|
|
499
|
+
"name": "resnet50_hyperopt_tuning",
|
|
500
|
+
"dataset": 456,
|
|
501
|
+
"is_tune": true,
|
|
502
|
+
"num_cpus": 2,
|
|
503
|
+
"num_gpus": 0.5,
|
|
504
|
+
"hyperparameters": [
|
|
505
|
+
{
|
|
506
|
+
"name": "batch_size",
|
|
507
|
+
"type": "choice",
|
|
508
|
+
"options": [16, 32, 64, 128]
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"name": "learning_rate",
|
|
512
|
+
"type": "loguniform",
|
|
513
|
+
"min": 0.00001,
|
|
514
|
+
"max": 0.01,
|
|
515
|
+
"base": 10
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
"name": "weight_decay",
|
|
519
|
+
"type": "loguniform",
|
|
520
|
+
"min": 0.00001,
|
|
521
|
+
"max": 0.001,
|
|
522
|
+
"base": 10
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
"name": "optimizer",
|
|
526
|
+
"type": "choice",
|
|
527
|
+
"options": ["adam", "sgd", "rmsprop"]
|
|
528
|
+
}
|
|
529
|
+
],
|
|
530
|
+
"tune_config": {
|
|
531
|
+
"mode": "max",
|
|
532
|
+
"metric": "validation_accuracy",
|
|
533
|
+
"num_samples": 50,
|
|
534
|
+
"max_concurrent_trials": 8,
|
|
535
|
+
"search_alg": {
|
|
536
|
+
"name": "hyperoptsearch"
|
|
537
|
+
},
|
|
538
|
+
"scheduler": {
|
|
539
|
+
"name": "hyperband",
|
|
540
|
+
"options": {
|
|
541
|
+
"max_t": 100
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
## Real-time Trial Progress Tracking
|
|
550
|
+
|
|
551
|
+
When running in tuning mode (`is_tune=true`), the SDK automatically captures and logs real-time trial progress tables to the backend. This provides live visibility into:
|
|
552
|
+
|
|
553
|
+
- Trial status (RUNNING, TERMINATED, ERROR, PENDING)
|
|
554
|
+
- Hyperparameter configurations per trial
|
|
555
|
+
- Performance metrics per trial
|
|
556
|
+
- Trial completion progress
|
|
557
|
+
|
|
558
|
+
### Automatic Trial Table Logging
|
|
559
|
+
|
|
560
|
+
The SDK uses a `_TuneTrialsLoggingCallback` that:
|
|
561
|
+
|
|
562
|
+
- Captures Ray Tune trial table snapshots in real-time
|
|
563
|
+
- Tracks trial status, hyperparameters, and metrics
|
|
564
|
+
- Forwards structured data to the backend via `run.log_trials()`
|
|
565
|
+
- Limits metric columns to 4 for optimal UI performance
|
|
566
|
+
- Handles trial completion, errors, and step-end events
|
|
567
|
+
|
|
568
|
+
This happens automatically - no plugin changes required.
|
|
569
|
+
|
|
570
|
+
### TrainRun.log_trials() Method
|
|
571
|
+
|
|
572
|
+
You can also manually log trial progress data using the `log_trials()` method:
|
|
573
|
+
|
|
574
|
+
```python
|
|
575
|
+
run.log_trials(
|
|
576
|
+
trials={
|
|
577
|
+
'trial_001': {
|
|
578
|
+
'status': 'RUNNING',
|
|
579
|
+
'batch_size': 32,
|
|
580
|
+
'learning_rate': 0.001,
|
|
581
|
+
'accuracy': 0.85
|
|
582
|
+
},
|
|
583
|
+
'trial_002': {
|
|
584
|
+
'status': 'TERMINATED',
|
|
585
|
+
'batch_size': 64,
|
|
586
|
+
'learning_rate': 0.0001,
|
|
587
|
+
'accuracy': 0.87
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
base=['status'],
|
|
591
|
+
hyperparameters=['batch_size', 'learning_rate'],
|
|
592
|
+
metrics=['accuracy']
|
|
593
|
+
)
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
**Parameters:**
|
|
597
|
+
|
|
598
|
+
- `data` (optional): Pre-built payload for custom formatting
|
|
599
|
+
- `trials`: Mapping of trial_id to structured values
|
|
600
|
+
- `base`: Column names for the fixed base section (e.g., status)
|
|
601
|
+
- `hyperparameters`: Column names for hyperparameters
|
|
602
|
+
- `metrics`: Column names for metrics (max 4 recommended)
|
|
603
|
+
- `best_trial` (optional): Trial ID of the best trial (empty string during tuning, populated at the end)
|
|
604
|
+
|
|
605
|
+
## Trial Model Management
|
|
606
|
+
|
|
607
|
+
### All Trial Models Upload
|
|
608
|
+
|
|
609
|
+
When tuning completes, the SDK now uploads **all trial models**, not just the best one. This allows you to:
|
|
610
|
+
|
|
611
|
+
- Review and compare all trial results
|
|
612
|
+
- Select alternative trials if needed
|
|
613
|
+
- Track the full experimental history
|
|
614
|
+
|
|
615
|
+
The return value from a tuning job includes:
|
|
616
|
+
|
|
617
|
+
```python
|
|
618
|
+
{
|
|
619
|
+
'model_id': 123, # Best trial model ID
|
|
620
|
+
'best_trial': {
|
|
621
|
+
'trial_logdir': '/path/to/best_trial',
|
|
622
|
+
'config': {'batch_size': 32, 'learning_rate': 0.001},
|
|
623
|
+
'metrics': {'accuracy': 0.92, 'loss': 0.15}
|
|
624
|
+
},
|
|
625
|
+
'trial_models': [
|
|
626
|
+
{
|
|
627
|
+
'trial_logdir': '/path/to/trial_001',
|
|
628
|
+
'model_id': 124,
|
|
629
|
+
'config': {'batch_size': 16, 'learning_rate': 0.001},
|
|
630
|
+
'metrics': {'accuracy': 0.85, 'loss': 0.22}
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
'trial_logdir': '/path/to/trial_002',
|
|
634
|
+
'model_id': 125,
|
|
635
|
+
'config': {'batch_size': 32, 'learning_rate': 0.0001},
|
|
636
|
+
'metrics': {'accuracy': 0.88, 'loss': 0.18}
|
|
637
|
+
}
|
|
638
|
+
]
|
|
639
|
+
}
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
Each trial model is registered with a unique name including the trial ID.
|
|
643
|
+
|
|
644
|
+
### Best Trial Override
|
|
645
|
+
|
|
646
|
+
After tuning completes, the SDK automatically notifies the backend about which trial was selected as optimal and logs a final trials table with the best trial marked. This enables:
|
|
647
|
+
|
|
648
|
+
- Proper tracking of the best configuration
|
|
649
|
+
- UI display of the selected trial highlighted in the trials table
|
|
650
|
+
- Backend awareness of optimal hyperparameters
|
|
651
|
+
- Final snapshot of all trials with the winner clearly identified
|
|
652
|
+
|
|
653
|
+
The SDK:
|
|
654
|
+
1. Calls the backend API to register the best trial
|
|
655
|
+
2. Logs an updated trials table via `run.log_trials()` with `best_trial` set to the winning trial ID
|
|
656
|
+
3. Reuses the last cached trials snapshot to avoid duplicate data collection
|
|
657
|
+
|
|
658
|
+
This happens transparently - no plugin changes required.
|
|
659
|
+
|
|
660
|
+
## Enhanced Tune Entrypoint Behavior
|
|
661
|
+
|
|
662
|
+
The SDK automatically wraps your `tune()` function to handle various return value formats:
|
|
663
|
+
|
|
664
|
+
### Return Value Normalization
|
|
665
|
+
|
|
666
|
+
Your tune function can return:
|
|
667
|
+
|
|
668
|
+
- **Dictionary**: `return {"accuracy": 0.92, "loss": 0.15}`
|
|
669
|
+
- **Number**: `return 0.92` (automatically wrapped with the metric key)
|
|
670
|
+
- **Other types**: Converted to appropriate format
|
|
671
|
+
|
|
672
|
+
The wrapper ensures:
|
|
673
|
+
|
|
674
|
+
- The optimization metric is always present in results
|
|
675
|
+
- Metrics from `ray.train.report()` are cached and merged
|
|
676
|
+
- Proper function names for Ray Tune's internal tracking
|
|
677
|
+
|
|
678
|
+
### No Plugin Changes Required
|
|
679
|
+
|
|
680
|
+
This behavior is transparent. You can write your tune function naturally:
|
|
681
|
+
|
|
682
|
+
```python
|
|
683
|
+
def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
|
|
684
|
+
from ray import tune
|
|
685
|
+
|
|
686
|
+
# Training logic...
|
|
687
|
+
accuracy = train_model(...)
|
|
688
|
+
|
|
689
|
+
# Any of these work:
|
|
690
|
+
tune.report({"accuracy": accuracy}) # Dict
|
|
691
|
+
# Or
|
|
692
|
+
return accuracy # Number (wrapped automatically)
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
## Progress Tracking
|
|
696
|
+
|
|
697
|
+
The train action tracks progress across different phases:
|
|
698
|
+
|
|
699
|
+
### Training Mode
|
|
700
|
+
|
|
701
|
+
| Category | Proportion | Description |
|
|
702
|
+
| -------------- | ---------- | -------------------- |
|
|
703
|
+
| `dataset` | 20% | Dataset preparation |
|
|
704
|
+
| `train` | 75% | Model training |
|
|
705
|
+
| `model_upload` | 5% | Model upload |
|
|
706
|
+
|
|
707
|
+
### Tuning Mode
|
|
708
|
+
|
|
709
|
+
| Category | Proportion | Description |
|
|
710
|
+
| -------------- | ---------- | ---------------------------- |
|
|
711
|
+
| `dataset` | 20% | Dataset preparation |
|
|
712
|
+
| `train` | 75% | Hyperparameter tuning trials |
|
|
713
|
+
| `trials` | 90% | Trial progress logging |
|
|
714
|
+
| `model_upload` | 5% | Model upload |
|
|
715
|
+
|
|
716
|
+
## Benefits
|
|
717
|
+
|
|
718
|
+
### Unified Interface
|
|
719
|
+
|
|
720
|
+
- Single action for both training and tuning
|
|
721
|
+
- Consistent parameter handling
|
|
722
|
+
- Reduced code duplication
|
|
723
|
+
|
|
724
|
+
### Flexible Hyperparameters
|
|
725
|
+
|
|
726
|
+
- No rigid structure enforced by SDK
|
|
727
|
+
- Plugins define their own hyperparameter schema
|
|
728
|
+
- Support for custom fields without validation errors
|
|
729
|
+
|
|
730
|
+
### Advanced HPO
|
|
731
|
+
|
|
732
|
+
- Multiple search algorithms (Optuna, Ax, HyperOpt, BayesOpt)
|
|
733
|
+
- Multiple schedulers (ASHA, HyperBand, PBT)
|
|
734
|
+
- Automatic best model selection
|
|
735
|
+
|
|
736
|
+
### Developer Experience
|
|
737
|
+
|
|
738
|
+
- Automatic trial tracking
|
|
739
|
+
- Transparent logging enhancements
|
|
740
|
+
- Clear migration path from deprecated TuneAction
|
|
741
|
+
|
|
742
|
+
## Best Practices
|
|
743
|
+
|
|
744
|
+
### Hyperparameter Design
|
|
745
|
+
|
|
746
|
+
- Keep hyperparameter search spaces reasonable
|
|
747
|
+
- Start with grid search for initial exploration
|
|
748
|
+
- Use Bayesian optimization (Optuna, Ax) for efficient search
|
|
749
|
+
- Set appropriate `num_samples` based on search space size
|
|
750
|
+
|
|
751
|
+
### Resource Management
|
|
752
|
+
|
|
753
|
+
- Allocate `num_cpus` and `num_gpus` based on trial resource needs
|
|
754
|
+
- Set `max_concurrent_trials` based on available hardware
|
|
755
|
+
- Monitor resource usage during tuning
|
|
756
|
+
|
|
757
|
+
### Checkpoint Management
|
|
758
|
+
|
|
759
|
+
- Always set `run.checkpoint_output` before training in tune mode
|
|
760
|
+
- Save checkpoints at regular intervals
|
|
761
|
+
- Use the best checkpoint returned by tuning
|
|
762
|
+
|
|
763
|
+
### Logging
|
|
764
|
+
|
|
765
|
+
- Log all relevant metrics for comparison
|
|
766
|
+
- Use consistent metric names across trials
|
|
767
|
+
- Include validation metrics in tune reports
|
|
768
|
+
|
|
769
|
+
## Troubleshooting
|
|
770
|
+
|
|
771
|
+
### Common Issues
|
|
772
|
+
|
|
773
|
+
#### "hyperparameter is required when is_tune=False"
|
|
774
|
+
|
|
775
|
+
Make sure to provide `hyperparameter` in training mode:
|
|
776
|
+
|
|
777
|
+
```json
|
|
778
|
+
{
|
|
779
|
+
"is_tune": false,
|
|
780
|
+
"hyperparameter": {...}
|
|
781
|
+
}
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
#### "hyperparameters is required when is_tune=True"
|
|
785
|
+
|
|
786
|
+
Make sure to provide `hyperparameters` and `tune_config` in tuning mode:
|
|
787
|
+
|
|
788
|
+
```json
|
|
789
|
+
{
|
|
790
|
+
"is_tune": true,
|
|
791
|
+
"hyperparameters": [...],
|
|
792
|
+
"tune_config": {...}
|
|
793
|
+
}
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
#### Tuning Fails Without Error
|
|
797
|
+
|
|
798
|
+
Check that your `tune()` function:
|
|
799
|
+
|
|
800
|
+
1. Sets `run.checkpoint_output` before training
|
|
801
|
+
2. Calls `tune.report()` with results and checkpoint
|
|
802
|
+
3. Returns properly without exceptions
|
|
803
|
+
|
|
804
|
+
## Next Steps
|
|
805
|
+
|
|
806
|
+
- **For Plugin Developers**: Implement `train()` and optionally `tune()` functions
|
|
807
|
+
- **For Users**: Start with training mode, then experiment with tuning
|
|
808
|
+
- **For Advanced Users**: Explore different search algorithms and schedulers
|
|
809
|
+
|
|
810
|
+
## Support and Resources
|
|
811
|
+
|
|
812
|
+
- **API Reference**: See TrainAction class documentation
|
|
813
|
+
- **Examples**: Check plugin examples repository
|
|
814
|
+
- **Ray Tune Documentation**: https://docs.ray.io/en/latest/tune/
|