synapse-sdk 1.0.0a35__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.

Files changed (307) hide show
  1. synapse_sdk/__init__.py +24 -0
  2. synapse_sdk/cli/__init__.py +308 -5
  3. synapse_sdk/cli/alias/utils.py +1 -1
  4. synapse_sdk/cli/code_server.py +687 -0
  5. synapse_sdk/cli/config.py +440 -0
  6. synapse_sdk/cli/devtools.py +90 -0
  7. synapse_sdk/cli/plugin/publish.py +23 -15
  8. synapse_sdk/clients/agent/__init__.py +9 -3
  9. synapse_sdk/clients/agent/container.py +133 -0
  10. synapse_sdk/clients/agent/core.py +19 -0
  11. synapse_sdk/clients/agent/ray.py +298 -9
  12. synapse_sdk/clients/backend/__init__.py +28 -12
  13. synapse_sdk/clients/backend/annotation.py +9 -1
  14. synapse_sdk/clients/backend/core.py +31 -4
  15. synapse_sdk/clients/backend/data_collection.py +186 -0
  16. synapse_sdk/clients/backend/hitl.py +1 -1
  17. synapse_sdk/clients/backend/integration.py +4 -3
  18. synapse_sdk/clients/backend/ml.py +1 -1
  19. synapse_sdk/clients/backend/models.py +35 -1
  20. synapse_sdk/clients/base.py +309 -36
  21. synapse_sdk/clients/ray/serve.py +2 -0
  22. synapse_sdk/devtools/__init__.py +0 -0
  23. synapse_sdk/devtools/config.py +94 -0
  24. synapse_sdk/devtools/docs/.gitignore +20 -0
  25. synapse_sdk/devtools/docs/README.md +41 -0
  26. synapse_sdk/devtools/docs/blog/2019-05-28-first-blog-post.md +12 -0
  27. synapse_sdk/devtools/docs/blog/2019-05-29-long-blog-post.md +44 -0
  28. synapse_sdk/devtools/docs/blog/2021-08-01-mdx-blog-post.mdx +24 -0
  29. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg +0 -0
  30. synapse_sdk/devtools/docs/blog/2021-08-26-welcome/index.md +29 -0
  31. synapse_sdk/devtools/docs/blog/authors.yml +25 -0
  32. synapse_sdk/devtools/docs/blog/tags.yml +19 -0
  33. synapse_sdk/devtools/docs/docs/api/clients/agent.md +43 -0
  34. synapse_sdk/devtools/docs/docs/api/clients/annotation-mixin.md +378 -0
  35. synapse_sdk/devtools/docs/docs/api/clients/backend.md +420 -0
  36. synapse_sdk/devtools/docs/docs/api/clients/base.md +257 -0
  37. synapse_sdk/devtools/docs/docs/api/clients/core-mixin.md +477 -0
  38. synapse_sdk/devtools/docs/docs/api/clients/data-collection-mixin.md +422 -0
  39. synapse_sdk/devtools/docs/docs/api/clients/hitl-mixin.md +554 -0
  40. synapse_sdk/devtools/docs/docs/api/clients/index.md +391 -0
  41. synapse_sdk/devtools/docs/docs/api/clients/integration-mixin.md +571 -0
  42. synapse_sdk/devtools/docs/docs/api/clients/ml-mixin.md +578 -0
  43. synapse_sdk/devtools/docs/docs/api/clients/ray.md +342 -0
  44. synapse_sdk/devtools/docs/docs/api/index.md +52 -0
  45. synapse_sdk/devtools/docs/docs/api/plugins/categories.md +43 -0
  46. synapse_sdk/devtools/docs/docs/api/plugins/models.md +114 -0
  47. synapse_sdk/devtools/docs/docs/api/plugins/utils.md +328 -0
  48. synapse_sdk/devtools/docs/docs/categories.md +0 -0
  49. synapse_sdk/devtools/docs/docs/cli-usage.md +280 -0
  50. synapse_sdk/devtools/docs/docs/concepts/index.md +38 -0
  51. synapse_sdk/devtools/docs/docs/configuration.md +83 -0
  52. synapse_sdk/devtools/docs/docs/contributing.md +306 -0
  53. synapse_sdk/devtools/docs/docs/examples/index.md +29 -0
  54. synapse_sdk/devtools/docs/docs/faq.md +179 -0
  55. synapse_sdk/devtools/docs/docs/features/converters/index.md +455 -0
  56. synapse_sdk/devtools/docs/docs/features/index.md +24 -0
  57. synapse_sdk/devtools/docs/docs/features/utils/file.md +415 -0
  58. synapse_sdk/devtools/docs/docs/features/utils/network.md +378 -0
  59. synapse_sdk/devtools/docs/docs/features/utils/storage.md +57 -0
  60. synapse_sdk/devtools/docs/docs/features/utils/types.md +51 -0
  61. synapse_sdk/devtools/docs/docs/installation.md +94 -0
  62. synapse_sdk/devtools/docs/docs/introduction.md +47 -0
  63. synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +814 -0
  64. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  65. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  66. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  67. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  68. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  69. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  70. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  71. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +1092 -0
  72. synapse_sdk/devtools/docs/docs/plugins/plugins.md +852 -0
  73. synapse_sdk/devtools/docs/docs/quickstart.md +78 -0
  74. synapse_sdk/devtools/docs/docs/troubleshooting.md +519 -0
  75. synapse_sdk/devtools/docs/docs/tutorial-basics/_category_.json +8 -0
  76. synapse_sdk/devtools/docs/docs/tutorial-basics/congratulations.md +23 -0
  77. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  78. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-document.md +57 -0
  79. synapse_sdk/devtools/docs/docs/tutorial-basics/create-a-page.md +43 -0
  80. synapse_sdk/devtools/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  81. synapse_sdk/devtools/docs/docs/tutorial-basics/markdown-features.mdx +152 -0
  82. synapse_sdk/devtools/docs/docs/tutorial-extras/_category_.json +7 -0
  83. synapse_sdk/devtools/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  84. synapse_sdk/devtools/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  85. synapse_sdk/devtools/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  86. synapse_sdk/devtools/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  87. synapse_sdk/devtools/docs/docusaurus.config.ts +148 -0
  88. synapse_sdk/devtools/docs/i18n/ko/code.json +325 -0
  89. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/agent.md +43 -0
  90. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/annotation-mixin.md +289 -0
  91. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/backend.md +420 -0
  92. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +257 -0
  93. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/core-mixin.md +417 -0
  94. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/data-collection-mixin.md +356 -0
  95. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/hitl-mixin.md +192 -0
  96. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/index.md +391 -0
  97. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/integration-mixin.md +479 -0
  98. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ml-mixin.md +284 -0
  99. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/ray.md +342 -0
  100. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/index.md +52 -0
  101. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
  102. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/categories.md +0 -0
  103. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/cli-usage.md +280 -0
  104. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/concepts/index.md +38 -0
  105. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/configuration.md +83 -0
  106. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/contributing.md +306 -0
  107. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/examples/index.md +29 -0
  108. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/faq.md +179 -0
  109. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/converters/index.md +30 -0
  110. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/index.md +24 -0
  111. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/file.md +415 -0
  112. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/network.md +378 -0
  113. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/storage.md +60 -0
  114. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/features/utils/types.md +51 -0
  115. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/installation.md +94 -0
  116. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/introduction.md +47 -0
  117. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +815 -0
  118. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  119. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  120. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  121. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  122. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +948 -0
  123. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +544 -0
  124. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +766 -0
  125. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +1092 -0
  126. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/plugins.md +117 -0
  127. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/quickstart.md +78 -0
  128. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/troubleshooting.md +519 -0
  129. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +34 -0
  130. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/footer.json +42 -0
  131. synapse_sdk/devtools/docs/i18n/ko/docusaurus-theme-classic/navbar.json +18 -0
  132. synapse_sdk/devtools/docs/package-lock.json +18784 -0
  133. synapse_sdk/devtools/docs/package.json +48 -0
  134. synapse_sdk/devtools/docs/sidebars.ts +122 -0
  135. synapse_sdk/devtools/docs/src/components/HomepageFeatures/index.tsx +71 -0
  136. synapse_sdk/devtools/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  137. synapse_sdk/devtools/docs/src/css/custom.css +30 -0
  138. synapse_sdk/devtools/docs/src/pages/index.module.css +23 -0
  139. synapse_sdk/devtools/docs/src/pages/index.tsx +21 -0
  140. synapse_sdk/devtools/docs/src/pages/markdown-page.md +7 -0
  141. synapse_sdk/devtools/docs/static/.nojekyll +0 -0
  142. synapse_sdk/devtools/docs/static/img/docusaurus-social-card.jpg +0 -0
  143. synapse_sdk/devtools/docs/static/img/docusaurus.png +0 -0
  144. synapse_sdk/devtools/docs/static/img/favicon.ico +0 -0
  145. synapse_sdk/devtools/docs/static/img/logo.png +0 -0
  146. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  147. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_react.svg +170 -0
  148. synapse_sdk/devtools/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  149. synapse_sdk/devtools/docs/tsconfig.json +8 -0
  150. synapse_sdk/devtools/server.py +41 -0
  151. synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
  152. synapse_sdk/devtools/streamlit_app/app.py +128 -0
  153. synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
  154. synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
  155. synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
  156. synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
  157. synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
  158. synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
  159. synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
  160. synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
  161. synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
  162. synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
  163. synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
  164. synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
  165. synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
  166. synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
  167. synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
  168. synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
  169. synapse_sdk/devtools/streamlit_app.py +10 -0
  170. synapse_sdk/loggers.py +65 -7
  171. synapse_sdk/plugins/README.md +1340 -0
  172. synapse_sdk/plugins/categories/base.py +73 -11
  173. synapse_sdk/plugins/categories/data_validation/actions/validation.py +72 -0
  174. synapse_sdk/plugins/categories/data_validation/templates/plugin/validation.py +33 -5
  175. synapse_sdk/plugins/categories/export/actions/__init__.py +3 -0
  176. synapse_sdk/plugins/categories/export/actions/export/__init__.py +28 -0
  177. synapse_sdk/plugins/categories/export/actions/export/action.py +165 -0
  178. synapse_sdk/plugins/categories/export/actions/export/enums.py +113 -0
  179. synapse_sdk/plugins/categories/export/actions/export/exceptions.py +53 -0
  180. synapse_sdk/plugins/categories/export/actions/export/models.py +74 -0
  181. synapse_sdk/plugins/categories/export/actions/export/run.py +195 -0
  182. synapse_sdk/plugins/categories/export/actions/{export.py → export/utils.py} +47 -82
  183. synapse_sdk/plugins/categories/export/templates/config.yaml +19 -1
  184. synapse_sdk/plugins/categories/export/templates/plugin/__init__.py +390 -0
  185. synapse_sdk/plugins/categories/export/templates/plugin/export.py +153 -129
  186. synapse_sdk/plugins/categories/neural_net/actions/deployment.py +9 -62
  187. synapse_sdk/plugins/categories/neural_net/actions/train.py +1062 -32
  188. synapse_sdk/plugins/categories/neural_net/actions/tune.py +534 -0
  189. synapse_sdk/plugins/categories/neural_net/templates/config.yaml +27 -5
  190. synapse_sdk/plugins/categories/neural_net/templates/plugin/inference.py +26 -10
  191. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  192. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  193. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/action.py +10 -0
  194. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  195. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
  196. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  197. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  198. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  199. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
  200. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
  201. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  202. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  203. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +287 -0
  204. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  205. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  206. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
  207. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
  208. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  209. synapse_sdk/plugins/categories/pre_annotation/actions/to_task.py +966 -0
  210. synapse_sdk/plugins/categories/pre_annotation/templates/config.yaml +19 -0
  211. synapse_sdk/plugins/categories/pre_annotation/templates/plugin/to_task.py +40 -0
  212. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +19 -0
  213. synapse_sdk/plugins/categories/upload/actions/upload/action.py +232 -0
  214. synapse_sdk/plugins/categories/upload/actions/upload/context.py +185 -0
  215. synapse_sdk/plugins/categories/upload/actions/upload/enums.py +471 -0
  216. synapse_sdk/plugins/categories/upload/actions/upload/exceptions.py +36 -0
  217. synapse_sdk/plugins/categories/upload/actions/upload/factory.py +138 -0
  218. synapse_sdk/plugins/categories/upload/actions/upload/models.py +203 -0
  219. synapse_sdk/plugins/categories/upload/actions/upload/orchestrator.py +183 -0
  220. synapse_sdk/plugins/categories/upload/actions/upload/registry.py +113 -0
  221. synapse_sdk/plugins/categories/upload/actions/upload/run.py +179 -0
  222. synapse_sdk/plugins/categories/upload/actions/upload/steps/__init__.py +1 -0
  223. synapse_sdk/plugins/categories/upload/actions/upload/steps/base.py +107 -0
  224. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +62 -0
  225. synapse_sdk/plugins/categories/upload/actions/upload/steps/collection.py +63 -0
  226. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +84 -0
  227. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +82 -0
  228. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +235 -0
  229. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +203 -0
  230. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +97 -0
  231. synapse_sdk/plugins/categories/upload/actions/upload/steps/validate.py +71 -0
  232. synapse_sdk/plugins/categories/upload/actions/upload/strategies/__init__.py +1 -0
  233. synapse_sdk/plugins/categories/upload/actions/upload/strategies/base.py +82 -0
  234. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/__init__.py +1 -0
  235. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/batch.py +39 -0
  236. synapse_sdk/plugins/categories/upload/actions/upload/strategies/data_unit/single.py +29 -0
  237. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/__init__.py +1 -0
  238. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +258 -0
  239. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +281 -0
  240. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/__init__.py +1 -0
  241. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/excel.py +174 -0
  242. synapse_sdk/plugins/categories/upload/actions/upload/strategies/metadata/none.py +16 -0
  243. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/__init__.py +1 -0
  244. synapse_sdk/plugins/categories/upload/actions/upload/strategies/upload/sync.py +84 -0
  245. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/__init__.py +1 -0
  246. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +60 -0
  247. synapse_sdk/plugins/categories/upload/actions/upload/utils.py +250 -0
  248. synapse_sdk/plugins/categories/upload/templates/README.md +470 -0
  249. synapse_sdk/plugins/categories/upload/templates/config.yaml +29 -2
  250. synapse_sdk/plugins/categories/upload/templates/plugin/__init__.py +294 -0
  251. synapse_sdk/plugins/categories/upload/templates/plugin/upload.py +88 -30
  252. synapse_sdk/plugins/models.py +122 -16
  253. synapse_sdk/plugins/templates/plugin-config-schema.json +406 -0
  254. synapse_sdk/plugins/templates/schema.json +491 -0
  255. synapse_sdk/plugins/templates/synapse-{{cookiecutter.plugin_code}}-plugin/requirements.txt +1 -1
  256. synapse_sdk/plugins/utils/__init__.py +46 -0
  257. synapse_sdk/plugins/utils/actions.py +119 -0
  258. synapse_sdk/plugins/utils/config.py +203 -0
  259. synapse_sdk/plugins/{utils.py → utils/legacy.py} +26 -46
  260. synapse_sdk/plugins/utils/ray_gcs.py +66 -0
  261. synapse_sdk/plugins/utils/registry.py +58 -0
  262. synapse_sdk/shared/__init__.py +25 -0
  263. synapse_sdk/shared/enums.py +93 -0
  264. synapse_sdk/utils/converters/__init__.py +240 -0
  265. synapse_sdk/utils/converters/coco/__init__.py +0 -0
  266. synapse_sdk/utils/converters/coco/from_dm.py +322 -0
  267. synapse_sdk/utils/converters/coco/to_dm.py +215 -0
  268. synapse_sdk/utils/converters/dm/__init__.py +56 -0
  269. synapse_sdk/utils/converters/dm/from_v1.py +627 -0
  270. synapse_sdk/utils/converters/dm/to_v1.py +367 -0
  271. synapse_sdk/utils/converters/pascal/__init__.py +0 -0
  272. synapse_sdk/utils/converters/pascal/from_dm.py +244 -0
  273. synapse_sdk/utils/converters/pascal/to_dm.py +214 -0
  274. synapse_sdk/utils/converters/yolo/__init__.py +0 -0
  275. synapse_sdk/utils/converters/yolo/from_dm.py +384 -0
  276. synapse_sdk/utils/converters/yolo/to_dm.py +267 -0
  277. synapse_sdk/utils/dataset.py +46 -0
  278. synapse_sdk/utils/encryption.py +158 -0
  279. synapse_sdk/utils/file/__init__.py +39 -0
  280. synapse_sdk/utils/file/archive.py +32 -0
  281. synapse_sdk/utils/file/checksum.py +56 -0
  282. synapse_sdk/utils/file/chunking.py +31 -0
  283. synapse_sdk/utils/file/download.py +385 -0
  284. synapse_sdk/utils/file/encoding.py +40 -0
  285. synapse_sdk/utils/file/io.py +22 -0
  286. synapse_sdk/utils/file/video/__init__.py +29 -0
  287. synapse_sdk/utils/file/video/transcode.py +307 -0
  288. synapse_sdk/utils/{file.py → file.py.backup} +84 -2
  289. synapse_sdk/utils/http.py +138 -0
  290. synapse_sdk/utils/network.py +293 -0
  291. synapse_sdk/utils/storage/__init__.py +36 -2
  292. synapse_sdk/utils/storage/providers/__init__.py +141 -0
  293. synapse_sdk/utils/storage/providers/file_system.py +134 -0
  294. synapse_sdk/utils/storage/providers/http.py +190 -0
  295. synapse_sdk/utils/storage/providers/s3.py +54 -6
  296. synapse_sdk/utils/storage/providers/sftp.py +31 -0
  297. synapse_sdk/utils/storage/registry.py +6 -0
  298. synapse_sdk-2025.11.7.dist-info/METADATA +122 -0
  299. synapse_sdk-2025.11.7.dist-info/RECORD +386 -0
  300. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/WHEEL +1 -1
  301. synapse_sdk/clients/backend/dataset.py +0 -102
  302. synapse_sdk/plugins/categories/upload/actions/upload.py +0 -293
  303. synapse_sdk-1.0.0a35.dist-info/METADATA +0 -47
  304. synapse_sdk-1.0.0a35.dist-info/RECORD +0 -137
  305. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/entry_points.txt +0 -0
  306. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/licenses/LICENSE +0 -0
  307. {synapse_sdk-1.0.0a35.dist-info → synapse_sdk-2025.11.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,815 @@
1
+ ---
2
+ id: train-action-overview
3
+ title: Train 액션 개요
4
+ sidebar_position: 1
5
+ ---
6
+
7
+ # Train 액션 개요
8
+
9
+ Train 액션은 단일 인터페이스를 통해 모델 학습과 하이퍼파라미터 최적화(HPO)를 모두 제공하는 통합 기능입니다. 일반 학습 워크플로우와 Ray Tune 통합을 통한 고급 하이퍼파라미터 튜닝을 지원합니다.
10
+
11
+ ## 빠른 개요
12
+
13
+ **카테고리:** Neural Net
14
+ **사용 가능한 액션:** `train`
15
+ **실행 방식:** 작업 기반 실행
16
+ **모드:** 학습 모드 및 하이퍼파라미터 튜닝 모드
17
+
18
+ ## 주요 기능
19
+
20
+ - **통합 인터페이스**: 학습과 하이퍼파라미터 튜닝을 위한 단일 액션
21
+ - **유연한 하이퍼파라미터**: 고정된 구조 없음 - 플러그인이 자체 하이퍼파라미터 스키마 정의
22
+ - **Ray Tune 통합**: 다양한 검색 알고리즘과 스케줄러를 통한 고급 HPO
23
+ - **자동 시행 추적**: 튜닝 중 로그에 자동으로 trial ID 주입
24
+ - **실시간 시행 진행 상황**: 하이퍼파라미터 및 메트릭을 포함한 실시간 시행 테이블 업데이트
25
+ - **모든 시행 모델 업로드**: 최적 모델뿐만 아니라 모든 시행 모델 업로드
26
+ - **리소스 관리**: 시행당 CPU/GPU 할당 구성 가능
27
+ - **최적 모델 선택**: 튜닝 후 자동으로 최적 모델 체크포인트 선택
28
+ - **진행 상황 추적**: 학습/튜닝 단계별 실시간 진행 상황 업데이트
29
+
30
+ ## 모드
31
+
32
+ ### 학습 모드 (기본값)
33
+
34
+ 고정된 하이퍼파라미터를 사용한 표준 모델 학습.
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
+ ### 하이퍼파라미터 튜닝 모드
55
+
56
+ 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
+ ## 구성 매개변수
96
+
97
+ ### 공통 매개변수 (두 모드 모두)
98
+
99
+ | 매개변수 | 타입 | 필수 여부 | 설명 |
100
+ | ------------ | ------------- | --------- | ---------------------------------- |
101
+ | `name` | `str` | 예 | 학습/튜닝 작업 이름 |
102
+ | `dataset` | `int` | 예 | 데이터셋 ID |
103
+ | `checkpoint` | `int \| None` | 아니오 | 학습 재개를 위한 체크포인트 ID |
104
+ | `is_tune` | `bool` | 아니오 | 튜닝 모드 활성화 (기본값: `false`) |
105
+ | `num_cpus` | `float` | 아니오 | 시행당 CPU 리소스 (튜닝 전용) |
106
+ | `num_gpus` | `float` | 아니오 | 시행당 GPU 리소스 (튜닝 전용) |
107
+
108
+ ### 학습 모드 매개변수 (`is_tune=false`)
109
+
110
+ | 매개변수 | 타입 | 필수 여부 | 설명 |
111
+ | ---------------- | ------ | --------- | ------------------------------- |
112
+ | `hyperparameter` | `dict` | 예 | 학습을 위한 고정 하이퍼파라미터 |
113
+
114
+ **참고**: `hyperparameter`의 구조는 완전히 유연하며 플러그인에서 정의합니다. 일반적인 필드는 다음과 같습니다:
115
+
116
+ - `epochs`: 학습 에폭 수
117
+ - `batch_size`: 학습 배치 크기
118
+ - `learning_rate`: 학습률
119
+ - `optimizer`: 옵티마이저 타입 (adam, sgd 등)
120
+ - 플러그인에 필요한 모든 사용자 정의 필드 (예: `dropout_rate`, `weight_decay`, `image_size`)
121
+
122
+ ### 튜닝 모드 매개변수 (`is_tune=true`)
123
+
124
+ | 매개변수 | 타입 | 필수 여부 | 설명 |
125
+ | ----------------- | ------ | --------- | ----------------------------- |
126
+ | `hyperparameters` | `list` | 예 | 하이퍼파라미터 검색 공간 목록 |
127
+ | `tune_config` | `dict` | 예 | Ray Tune 구성 |
128
+
129
+ ## 하이퍼파라미터 검색 공간
130
+
131
+ 튜닝을 위한 하이퍼파라미터 분포 정의:
132
+
133
+ ### 연속 분포
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
+ ### 이산 분포
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
+ ### 양자화 분포
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
+ ### 지원되는 분포 타입
185
+
186
+ 각 하이퍼파라미터 타입은 특정 파라미터가 필요합니다:
187
+
188
+ | 타입 | 필수 파라미터 | 설명 | 예시 |
189
+ | ------------- | -------------------- | -------------------------- | ------------------------------------------------------------------------------- |
190
+ | `uniform` | `min`, `max` | min과 max 사이의 균등 분포 | `{"name": "lr", "type": "uniform", "min": 0.0001, "max": 0.01}` |
191
+ | `quniform` | `min`, `max` | 양자화된 균등 분포 | `{"name": "lr", "type": "quniform", "min": 0.0001, "max": 0.01}` |
192
+ | `loguniform` | `min`, `max`, `base` | 로그 균등 분포 | `{"name": "lr", "type": "loguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
193
+ | `qloguniform` | `min`, `max`, `base` | 양자화된 로그 균등 분포 | `{"name": "lr", "type": "qloguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
194
+ | `randn` | `mean`, `sd` | 정규(가우시안) 분포 | `{"name": "noise", "type": "randn", "mean": 0.0, "sd": 1.0}` |
195
+ | `qrandn` | `mean`, `sd` | 양자화된 정규 분포 | `{"name": "noise", "type": "qrandn", "mean": 0.0, "sd": 1.0}` |
196
+ | `randint` | `min`, `max` | min과 max 사이의 랜덤 정수 | `{"name": "epochs", "type": "randint", "min": 5, "max": 15}` |
197
+ | `qrandint` | `min`, `max` | 양자화된 랜덤 정수 | `{"name": "epochs", "type": "qrandint", "min": 5, "max": 15}` |
198
+ | `lograndint` | `min`, `max`, `base` | 로그 랜덤 정수 | `{"name": "units", "type": "lograndint", "min": 16, "max": 256, "base": 2}` |
199
+ | `qlograndint` | `min`, `max`, `base` | 양자화된 로그 랜덤 정수 | `{"name": "units", "type": "qlograndint", "min": 16, "max": 256, "base": 2}` |
200
+ | `choice` | `options` | 값 목록에서 선택 | `{"name": "optimizer", "type": "choice", "options": ["adam", "sgd"]}` |
201
+ | `grid_search` | `options` | 모든 값에 대한 그리드 검색 | `{"name": "batch_size", "type": "grid_search", "options": [16, 32, 64]}` |
202
+
203
+ **중요 참고사항:**
204
+
205
+ - 모든 하이퍼파라미터는 `name`과 `type` 필드를 포함해야 합니다
206
+ - `loguniform`, `qloguniform`, `lograndint`, `qlograndint`의 경우: `base` 파라미터가 필수입니다 (일반적으로 10 또는 2)
207
+ - `choice` 및 `grid_search`의 경우: `options` 사용 (`values` 아님)
208
+ - 범위 기반 타입의 경우: `min` 및 `max` 사용 (`lower` 및 `upper` 아님)
209
+
210
+ ## Tune 구성
211
+
212
+ ### 기본 구성
213
+
214
+ ```python
215
+ {
216
+ "mode": "max", # "max" 또는 "min"
217
+ "metric": "accuracy", # 최적화할 메트릭
218
+ "num_samples": 10, # 시행 횟수
219
+ "max_concurrent_trials": 2 # 병렬 시행 수
220
+ }
221
+ ```
222
+
223
+ ### 검색 알고리즘 포함
224
+
225
+ ```python
226
+ {
227
+ "mode": "max",
228
+ "metric": "accuracy",
229
+ "num_samples": 20,
230
+ "max_concurrent_trials": 4,
231
+ "search_alg": {
232
+ "name": "hyperoptsearch", # 검색 알고리즘
233
+ "points_to_evaluate": [ # 선택적 초기 포인트
234
+ {
235
+ "learning_rate": 0.001,
236
+ "batch_size": 32
237
+ }
238
+ ]
239
+ }
240
+ }
241
+ ```
242
+
243
+ ### 스케줄러 포함
244
+
245
+ ```python
246
+ {
247
+ "mode": "max",
248
+ "metric": "accuracy",
249
+ "num_samples": 50,
250
+ "max_concurrent_trials": 8,
251
+ "scheduler": {
252
+ "name": "hyperband", # 스케줄러 타입
253
+ "options": {
254
+ "max_t": 100
255
+ }
256
+ }
257
+ }
258
+ ```
259
+
260
+ ### 지원되는 검색 알고리즘
261
+
262
+ - `basicvariantgenerator` - 랜덤 검색 (기본값)
263
+ - `bayesoptsearch` - 베이지안 최적화
264
+ - `hyperoptsearch` - Tree-structured Parzen Estimator
265
+
266
+ ### 지원되는 스케줄러
267
+
268
+ - `fifo` - First-in-first-out (기본값)
269
+ - `hyperband` - HyperBand 스케줄러
270
+
271
+ ## 플러그인 개발
272
+
273
+ ### 학습 모드용
274
+
275
+ 플러그인에서 `train()` 함수 구현:
276
+
277
+ ```python
278
+ def train(run, dataset, hyperparameter, checkpoint, **kwargs):
279
+ """
280
+ 모델 학습 함수.
281
+
282
+ Args:
283
+ run: 로깅을 위한 TrainRun 객체
284
+ dataset: Dataset 객체
285
+ hyperparameter: 하이퍼파라미터가 포함된 dict
286
+ checkpoint: 재개를 위한 선택적 체크포인트
287
+ """
288
+ # 하이퍼파라미터 접근
289
+ epochs = hyperparameter['epochs']
290
+ batch_size = hyperparameter['batch_size']
291
+ learning_rate = hyperparameter['learning_rate']
292
+
293
+ # 학습 루프
294
+ for epoch in range(epochs):
295
+ # 한 에폭 학습
296
+ loss, accuracy = train_one_epoch(...)
297
+
298
+ # 메트릭 로깅
299
+ run.log_metric('training', 'loss', loss, epoch=epoch)
300
+ run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
301
+
302
+ # 시각화 로깅
303
+ run.log_visualization('predictions', 'train', epoch, image_data)
304
+
305
+ # 최종 모델 저장
306
+ save_model(model, '/path/to/model.pth')
307
+ ```
308
+
309
+ ### 튜닝 모드용
310
+
311
+ 플러그인에서 `tune()` 함수 구현:
312
+
313
+ ```python
314
+ def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
315
+ """
316
+ 하이퍼파라미터 최적화를 위한 튜닝 함수.
317
+
318
+ Args:
319
+ hyperparameter: 현재 시행의 하이퍼파라미터가 포함된 dict
320
+ run: 로깅을 위한 TrainRun 객체 (is_tune=True)
321
+ dataset: Dataset 객체
322
+ checkpoint: 재개를 위한 선택적 체크포인트
323
+ """
324
+ from ray import tune
325
+
326
+ # 학습 전에 체크포인트 출력 경로 설정
327
+ output_path = Path('/path/to/trial/weights')
328
+ run.checkpoint_output = str(output_path)
329
+
330
+ # 학습 루프
331
+ for epoch in range(hyperparameter['epochs']):
332
+ loss, accuracy = train_one_epoch(...)
333
+
334
+ # 메트릭 로깅 (trial_id가 자동으로 추가됨)
335
+ run.log_metric('training', 'loss', loss, epoch=epoch)
336
+ run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
337
+
338
+ # Ray Tune에 결과 보고
339
+ results = {
340
+ "accuracy": final_accuracy,
341
+ "loss": final_loss
342
+ }
343
+
344
+ # 중요: 체크포인트와 함께 보고
345
+ tune.report(
346
+ results,
347
+ checkpoint=tune.Checkpoint.from_directory(run.checkpoint_output)
348
+ )
349
+ ```
350
+
351
+ ### 매개변수 순서 차이
352
+
353
+ **중요**: `train()`과 `tune()` 간에 매개변수 순서가 다릅니다:
354
+
355
+ - `train(run, dataset, hyperparameter, checkpoint, **kwargs)`
356
+ - `tune(hyperparameter, run, dataset, checkpoint, **kwargs)`
357
+
358
+ ### 자동 Trial ID 로깅
359
+
360
+ `is_tune=True`일 때, SDK는 모든 메트릭 및 시각화 로그에 자동으로 `trial_id`를 주입합니다:
361
+
362
+ ```python
363
+ # 플러그인 코드
364
+ run.log_metric('training', 'loss', 0.5, epoch=10)
365
+
366
+ # 실제 로깅된 데이터 (trial_id가 자동으로 추가됨)
367
+ {
368
+ 'category': 'training',
369
+ 'key': 'loss',
370
+ 'value': 0.5,
371
+ 'metrics': {'epoch': 10},
372
+ 'trial_id': 'abc123' # 자동으로 추가됨
373
+ }
374
+ ```
375
+
376
+ 플러그인 변경 불필요 - SDK 레벨에서 투명하게 처리됩니다.
377
+
378
+ ## TuneAction에서 마이그레이션
379
+
380
+ 독립형 `TuneAction`은 이제 **더 이상 사용되지 않습니다**. `is_tune=true`를 사용하는 `TrainAction`으로 마이그레이션하세요:
381
+
382
+ ### 이전 (더 이상 사용되지 않음)
383
+
384
+ ```json
385
+ {
386
+ "action": "tune",
387
+ "params": {
388
+ "name": "my_tuning_job",
389
+ "dataset": 123,
390
+ "hyperparameter": [...],
391
+ "tune_config": {...}
392
+ }
393
+ }
394
+ ```
395
+
396
+ ### 이후 (권장)
397
+
398
+ ```json
399
+ {
400
+ "action": "train",
401
+ "params": {
402
+ "name": "my_tuning_job",
403
+ "dataset": 123,
404
+ "is_tune": true,
405
+ "hyperparameters": [...],
406
+ "tune_config": {...}
407
+ }
408
+ }
409
+ ```
410
+
411
+ ### 주요 변경 사항
412
+
413
+ 1. `"action": "tune"`을 `"action": "train"`으로 변경
414
+ 2. `"is_tune": true` 추가
415
+ 3. `"hyperparameter"`를 `"hyperparameters"`로 이름 변경
416
+
417
+ ## 예제
418
+
419
+ ### 간단한 학습
420
+
421
+ ```json
422
+ {
423
+ "action": "train",
424
+ "params": {
425
+ "name": "resnet50_training",
426
+ "dataset": 456,
427
+ "checkpoint": null,
428
+ "hyperparameter": {
429
+ "epochs": 100,
430
+ "batch_size": 32,
431
+ "learning_rate": 0.001,
432
+ "optimizer": "adam",
433
+ "weight_decay": 0.0001
434
+ }
435
+ }
436
+ }
437
+ ```
438
+
439
+ ### 체크포인트에서 재개
440
+
441
+ ```json
442
+ {
443
+ "action": "train",
444
+ "params": {
445
+ "name": "resnet50_continued",
446
+ "dataset": 456,
447
+ "checkpoint": 789,
448
+ "hyperparameter": {
449
+ "epochs": 50,
450
+ "batch_size": 32,
451
+ "learning_rate": 0.0001,
452
+ "optimizer": "adam"
453
+ }
454
+ }
455
+ }
456
+ ```
457
+
458
+ ### 그리드 검색을 통한 하이퍼파라미터 튜닝
459
+
460
+ ```json
461
+ {
462
+ "action": "train",
463
+ "params": {
464
+ "name": "resnet50_tuning",
465
+ "dataset": 456,
466
+ "is_tune": true,
467
+ "hyperparameters": [
468
+ {
469
+ "name": "batch_size",
470
+ "type": "grid_search",
471
+ "options": [16, 32, 64]
472
+ },
473
+ {
474
+ "name": "learning_rate",
475
+ "type": "grid_search",
476
+ "options": [0.001, 0.0001]
477
+ },
478
+ {
479
+ "name": "optimizer",
480
+ "type": "grid_search",
481
+ "options": ["adam", "sgd"]
482
+ }
483
+ ],
484
+ "tune_config": {
485
+ "mode": "max",
486
+ "metric": "validation_accuracy",
487
+ "num_samples": 12,
488
+ "max_concurrent_trials": 4
489
+ }
490
+ }
491
+ }
492
+ ```
493
+
494
+ ### HyperOpt 및 HyperBand를 사용한 고급 튜닝
495
+
496
+ ```json
497
+ {
498
+ "action": "train",
499
+ "params": {
500
+ "name": "resnet50_hyperopt_tuning",
501
+ "dataset": 456,
502
+ "is_tune": true,
503
+ "num_cpus": 2,
504
+ "num_gpus": 0.5,
505
+ "hyperparameters": [
506
+ {
507
+ "name": "batch_size",
508
+ "type": "choice",
509
+ "options": [16, 32, 64, 128]
510
+ },
511
+ {
512
+ "name": "learning_rate",
513
+ "type": "loguniform",
514
+ "min": 0.00001,
515
+ "max": 0.01,
516
+ "base": 10
517
+ },
518
+ {
519
+ "name": "weight_decay",
520
+ "type": "loguniform",
521
+ "min": 0.00001,
522
+ "max": 0.001,
523
+ "base": 10
524
+ },
525
+ {
526
+ "name": "optimizer",
527
+ "type": "choice",
528
+ "options": ["adam", "sgd", "rmsprop"]
529
+ }
530
+ ],
531
+ "tune_config": {
532
+ "mode": "max",
533
+ "metric": "validation_accuracy",
534
+ "num_samples": 50,
535
+ "max_concurrent_trials": 8,
536
+ "search_alg": {
537
+ "name": "hyperoptsearch"
538
+ },
539
+ "scheduler": {
540
+ "name": "hyperband",
541
+ "options": {
542
+ "max_t": 100
543
+ }
544
+ }
545
+ }
546
+ }
547
+ }
548
+ ```
549
+
550
+ ## 실시간 시행 진행 상황 추적
551
+
552
+ 튜닝 모드(`is_tune=true`)에서 실행할 때, SDK는 실시간 시행 진행 테이블을 자동으로 캡처하고 백엔드에 로깅합니다. 다음 사항에 대한 실시간 가시성을 제공합니다:
553
+
554
+ - 시행 상태 (RUNNING, TERMINATED, ERROR, PENDING)
555
+ - 시행당 하이퍼파라미터 구성
556
+ - 시행당 성능 메트릭
557
+ - 시행 완료 진행 상황
558
+
559
+ ### 자동 시행 테이블 로깅
560
+
561
+ SDK는 `_TuneTrialsLoggingCallback`을 사용하여:
562
+
563
+ - 실시간으로 Ray Tune 시행 테이블 스냅샷 캡처
564
+ - 시행 상태, 하이퍼파라미터 및 메트릭 추적
565
+ - `run.log_trials()`를 통해 구조화된 데이터를 백엔드로 전달
566
+ - 최적의 UI 성능을 위해 메트릭 열을 4개로 제한
567
+ - 시행 완료, 오류 및 단계 종료 이벤트 처리
568
+
569
+ 이는 자동으로 발생하며 플러그인 변경이 필요하지 않습니다.
570
+
571
+ ### TrainRun.log_trials() 메서드
572
+
573
+ `log_trials()` 메서드를 사용하여 시행 진행 데이터를 수동으로 로깅할 수도 있습니다:
574
+
575
+ ```python
576
+ run.log_trials(
577
+ trials={
578
+ 'trial_001': {
579
+ 'status': 'RUNNING',
580
+ 'batch_size': 32,
581
+ 'learning_rate': 0.001,
582
+ 'accuracy': 0.85
583
+ },
584
+ 'trial_002': {
585
+ 'status': 'TERMINATED',
586
+ 'batch_size': 64,
587
+ 'learning_rate': 0.0001,
588
+ 'accuracy': 0.87
589
+ }
590
+ },
591
+ base=['status'],
592
+ hyperparameters=['batch_size', 'learning_rate'],
593
+ metrics=['accuracy']
594
+ )
595
+ ```
596
+
597
+ **매개변수:**
598
+
599
+ - `data` (선택 사항): 사용자 정의 형식을 위한 미리 빌드된 페이로드
600
+ - `trials`: trial_id에서 구조화된 값으로의 매핑
601
+ - `base`: 고정된 기본 섹션의 열 이름 (예: status)
602
+ - `hyperparameters`: 하이퍼파라미터의 열 이름
603
+ - `metrics`: 메트릭의 열 이름 (최대 4개 권장)
604
+ - `best_trial` (선택 사항): 최적 시행의 trial ID (튜닝 중에는 빈 문자열, 종료 시 채워짐)
605
+
606
+ ## 시행 모델 관리
607
+
608
+ ### 모든 시행 모델 업로드
609
+
610
+ 튜닝이 완료되면 SDK는 이제 최적 모델뿐만 아니라 **모든 시행 모델**을 업로드합니다. 다음이 가능합니다:
611
+
612
+ - 모든 시행 결과 검토 및 비교
613
+ - 필요한 경우 대체 시행 선택
614
+ - 전체 실험 기록 추적
615
+
616
+ 튜닝 작업의 반환 값은 다음을 포함합니다:
617
+
618
+ ```python
619
+ {
620
+ 'model_id': 123, # 최적 시행 모델 ID
621
+ 'best_trial': {
622
+ 'trial_logdir': '/path/to/best_trial',
623
+ 'config': {'batch_size': 32, 'learning_rate': 0.001},
624
+ 'metrics': {'accuracy': 0.92, 'loss': 0.15}
625
+ },
626
+ 'trial_models': [
627
+ {
628
+ 'trial_logdir': '/path/to/trial_001',
629
+ 'model_id': 124,
630
+ 'config': {'batch_size': 16, 'learning_rate': 0.001},
631
+ 'metrics': {'accuracy': 0.85, 'loss': 0.22}
632
+ },
633
+ {
634
+ 'trial_logdir': '/path/to/trial_002',
635
+ 'model_id': 125,
636
+ 'config': {'batch_size': 32, 'learning_rate': 0.0001},
637
+ 'metrics': {'accuracy': 0.88, 'loss': 0.18}
638
+ }
639
+ ]
640
+ }
641
+ ```
642
+
643
+ 각 시행 모델은 trial ID를 포함한 고유한 이름으로 등록됩니다.
644
+
645
+ ### 최적 시행 재정의
646
+
647
+ 튜닝이 완료되면 SDK는 최적으로 선택된 시행에 대해 백엔드에 자동으로 알리고 최적 시행이 표시된 최종 시행 테이블을 로깅합니다. 다음이 가능합니다:
648
+
649
+ - 최적 구성의 적절한 추적
650
+ - 시행 테이블에서 강조 표시된 선택된 시행의 UI 표시
651
+ - 최적 하이퍼파라미터에 대한 백엔드 인식
652
+ - 우승자가 명확하게 식별된 모든 시행의 최종 스냅샷
653
+
654
+ SDK는 다음을 수행합니다:
655
+ 1. 백엔드 API를 호출하여 최적 시행 등록
656
+ 2. `run.log_trials()`를 통해 `best_trial`이 우승 trial ID로 설정된 업데이트된 시행 테이블 로깅
657
+ 3. 중복 데이터 수집을 피하기 위해 마지막 캐시된 시행 스냅샷 재사용
658
+
659
+ 이는 투명하게 발생하며 플러그인 변경이 필요하지 않습니다.
660
+
661
+ ## 향상된 Tune 진입점 동작
662
+
663
+ SDK는 다양한 반환 값 형식을 처리하기 위해 `tune()` 함수를 자동으로 래핑합니다:
664
+
665
+ ### 반환 값 정규화
666
+
667
+ 튜닝 함수는 다음을 반환할 수 있습니다:
668
+
669
+ - **딕셔너리**: `return {"accuracy": 0.92, "loss": 0.15}`
670
+ - **숫자**: `return 0.92` (메트릭 키로 자동 래핑됨)
671
+ - **기타 타입**: 적절한 형식으로 변환
672
+
673
+ 래퍼는 다음을 보장합니다:
674
+
675
+ - 최적화 메트릭이 항상 결과에 존재
676
+ - `ray.train.report()`의 메트릭이 캐시되고 병합됨
677
+ - Ray Tune의 내부 추적을 위한 적절한 함수 이름
678
+
679
+ ### 플러그인 변경 불필요
680
+
681
+ 이 동작은 투명합니다. 튜닝 함수를 자연스럽게 작성할 수 있습니다:
682
+
683
+ ```python
684
+ def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
685
+ from ray import tune
686
+
687
+ # 학습 로직...
688
+ accuracy = train_model(...)
689
+
690
+ # 다음 중 하나를 사용할 수 있습니다:
691
+ tune.report({"accuracy": accuracy}) # Dict
692
+ # 또는
693
+ return accuracy # Number (자동으로 래핑됨)
694
+ ```
695
+
696
+ ## 진행 상황 추적
697
+
698
+ train 액션은 다양한 단계에서 진행 상황을 추적합니다:
699
+
700
+ ### 학습 모드
701
+
702
+ | 카테고리 | 비율 | 설명 |
703
+ | -------------- | ---- | ---------------- |
704
+ | `dataset` | 20% | 데이터셋 준비 |
705
+ | `train` | 75% | 모델 학습 |
706
+ | `model_upload` | 5% | 모델 업로드 |
707
+
708
+ ### 튜닝 모드
709
+
710
+ | 카테고리 | 비율 | 설명 |
711
+ | -------------- | ---- | ------------------------ |
712
+ | `dataset` | 20% | 데이터셋 준비 |
713
+ | `train` | 75% | 하이퍼파라미터 튜닝 시행 |
714
+ | `trials` | 90% | 시행 진행 로깅 |
715
+ | `model_upload` | 5% | 모델 업로드 |
716
+
717
+ ## 이점
718
+
719
+ ### 통합 인터페이스
720
+
721
+ - 학습과 튜닝을 위한 단일 액션
722
+ - 일관된 매개변수 처리
723
+ - 코드 중복 감소
724
+
725
+ ### 유연한 하이퍼파라미터
726
+
727
+ - SDK에서 고정된 구조 강제하지 않음
728
+ - 플러그인이 자체 하이퍼파라미터 스키마 정의
729
+ - 검증 오류 없이 사용자 정의 필드 지원
730
+
731
+ ### 고급 HPO
732
+
733
+ - 다양한 검색 알고리즘 (Optuna, Ax, HyperOpt, BayesOpt)
734
+ - 다양한 스케줄러 (ASHA, HyperBand, PBT)
735
+ - 자동 최적 모델 선택
736
+
737
+ ### 개발자 경험
738
+
739
+ - 자동 시행 추적
740
+ - 투명한 로깅 향상
741
+ - 더 이상 사용되지 않는 TuneAction에서의 명확한 마이그레이션 경로
742
+
743
+ ## 모범 사례
744
+
745
+ ### 하이퍼파라미터 설계
746
+
747
+ - 합리적인 하이퍼파라미터 검색 공간 유지
748
+ - 초기 탐색을 위해 그리드 검색으로 시작
749
+ - 효율적인 검색을 위해 베이지안 최적화 (Optuna, Ax) 사용
750
+ - 검색 공간 크기에 따라 적절한 `num_samples` 설정
751
+
752
+ ### 리소스 관리
753
+
754
+ - 시행 리소스 요구 사항에 따라 `num_cpus` 및 `num_gpus` 할당
755
+ - 사용 가능한 하드웨어에 따라 `max_concurrent_trials` 설정
756
+ - 튜닝 중 리소스 사용량 모니터링
757
+
758
+ ### 체크포인트 관리
759
+
760
+ - 튜닝 모드에서 학습 전에 항상 `run.checkpoint_output` 설정
761
+ - 정기적으로 체크포인트 저장
762
+ - 튜닝에서 반환된 최적 체크포인트 사용
763
+
764
+ ### 로깅
765
+
766
+ - 비교를 위해 모든 관련 메트릭 로깅
767
+ - 시행 간에 일관된 메트릭 이름 사용
768
+ - 튜닝 보고서에 검증 메트릭 포함
769
+
770
+ ## 문제 해결
771
+
772
+ ### 일반적인 문제
773
+
774
+ #### "hyperparameter is required when is_tune=False"
775
+
776
+ 학습 모드에서 `hyperparameter`를 제공했는지 확인하세요:
777
+
778
+ ```json
779
+ {
780
+ "is_tune": false,
781
+ "hyperparameter": {...}
782
+ }
783
+ ```
784
+
785
+ #### "hyperparameters is required when is_tune=True"
786
+
787
+ 튜닝 모드에서 `hyperparameters`와 `tune_config`를 제공했는지 확인하세요:
788
+
789
+ ```json
790
+ {
791
+ "is_tune": true,
792
+ "hyperparameters": [...],
793
+ "tune_config": {...}
794
+ }
795
+ ```
796
+
797
+ #### 오류 없이 튜닝 실패
798
+
799
+ `tune()` 함수가 다음을 수행하는지 확인하세요:
800
+
801
+ 1. 학습 전에 `run.checkpoint_output` 설정
802
+ 2. 결과 및 체크포인트와 함께 `tune.report()` 호출
803
+ 3. 예외 없이 적절하게 반환
804
+
805
+ ## 다음 단계
806
+
807
+ - **플러그인 개발자용**: `train()` 및 선택적으로 `tune()` 함수 구현
808
+ - **사용자용**: 학습 모드로 시작한 다음 튜닝 실험
809
+ - **고급 사용자용**: 다양한 검색 알고리즘 및 스케줄러 탐색
810
+
811
+ ## 지원 및 리소스
812
+
813
+ - **API 참조**: TrainAction 클래스 문서 참조
814
+ - **예제**: 플러그인 예제 저장소 확인
815
+ - **Ray Tune 문서**: https://docs.ray.io/en/latest/tune/