synapse-sdk 2025.9.5__py3-none-any.whl → 2025.10.6__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 (78) hide show
  1. synapse_sdk/clients/base.py +129 -9
  2. synapse_sdk/devtools/docs/docs/api/clients/base.md +230 -8
  3. synapse_sdk/devtools/docs/docs/api/plugins/models.md +58 -3
  4. synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +663 -0
  5. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  6. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  7. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  8. synapse_sdk/devtools/docs/docs/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  9. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-action.md +934 -0
  10. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-overview.md +585 -0
  11. synapse_sdk/devtools/docs/docs/plugins/categories/upload-plugins/upload-plugin-template.md +715 -0
  12. synapse_sdk/devtools/docs/docs/plugins/export-plugins.md +39 -0
  13. synapse_sdk/devtools/docs/docs/plugins/plugins.md +12 -5
  14. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +230 -8
  15. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/plugins/models.md +114 -0
  16. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +621 -0
  17. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/pre-annotation-plugin-overview.md +198 -0
  18. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-action-development.md +1645 -0
  19. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-overview.md +717 -0
  20. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/pre-annotation-plugins/to-task-template-development.md +1380 -0
  21. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-action.md +934 -0
  22. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-overview.md +585 -0
  23. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/upload-plugins/upload-plugin-template.md +715 -0
  24. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/export-plugins.md +39 -0
  25. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current.json +16 -4
  26. synapse_sdk/devtools/docs/sidebars.ts +45 -1
  27. synapse_sdk/plugins/README.md +487 -80
  28. synapse_sdk/plugins/categories/base.py +1 -0
  29. synapse_sdk/plugins/categories/export/actions/export/action.py +8 -3
  30. synapse_sdk/plugins/categories/export/actions/export/utils.py +108 -8
  31. synapse_sdk/plugins/categories/export/templates/config.yaml +18 -0
  32. synapse_sdk/plugins/categories/export/templates/plugin/export.py +97 -0
  33. synapse_sdk/plugins/categories/neural_net/actions/train.py +592 -22
  34. synapse_sdk/plugins/categories/neural_net/actions/tune.py +150 -3
  35. synapse_sdk/plugins/categories/pre_annotation/actions/__init__.py +4 -0
  36. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/__init__.py +3 -0
  37. synapse_sdk/plugins/categories/pre_annotation/actions/pre_annotation/action.py +10 -0
  38. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/__init__.py +28 -0
  39. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/action.py +145 -0
  40. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/enums.py +269 -0
  41. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/exceptions.py +14 -0
  42. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/factory.py +76 -0
  43. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/models.py +97 -0
  44. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/orchestrator.py +250 -0
  45. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/run.py +64 -0
  46. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/__init__.py +17 -0
  47. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/annotation.py +284 -0
  48. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/base.py +170 -0
  49. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/extraction.py +83 -0
  50. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/metrics.py +87 -0
  51. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/preprocessor.py +127 -0
  52. synapse_sdk/plugins/categories/pre_annotation/actions/to_task/strategies/validation.py +143 -0
  53. synapse_sdk/plugins/categories/upload/actions/upload/__init__.py +2 -1
  54. synapse_sdk/plugins/categories/upload/actions/upload/action.py +8 -1
  55. synapse_sdk/plugins/categories/upload/actions/upload/context.py +0 -1
  56. synapse_sdk/plugins/categories/upload/actions/upload/models.py +134 -94
  57. synapse_sdk/plugins/categories/upload/actions/upload/steps/cleanup.py +2 -2
  58. synapse_sdk/plugins/categories/upload/actions/upload/steps/generate.py +6 -2
  59. synapse_sdk/plugins/categories/upload/actions/upload/steps/initialize.py +24 -9
  60. synapse_sdk/plugins/categories/upload/actions/upload/steps/metadata.py +130 -18
  61. synapse_sdk/plugins/categories/upload/actions/upload/steps/organize.py +147 -37
  62. synapse_sdk/plugins/categories/upload/actions/upload/steps/upload.py +10 -5
  63. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/flat.py +31 -6
  64. synapse_sdk/plugins/categories/upload/actions/upload/strategies/file_discovery/recursive.py +65 -37
  65. synapse_sdk/plugins/categories/upload/actions/upload/strategies/validation/default.py +17 -2
  66. synapse_sdk/plugins/categories/upload/templates/README.md +394 -0
  67. synapse_sdk/plugins/models.py +62 -0
  68. synapse_sdk/utils/file/download.py +261 -0
  69. {synapse_sdk-2025.9.5.dist-info → synapse_sdk-2025.10.6.dist-info}/METADATA +15 -2
  70. {synapse_sdk-2025.9.5.dist-info → synapse_sdk-2025.10.6.dist-info}/RECORD +74 -43
  71. synapse_sdk/devtools/docs/docs/plugins/developing-upload-template.md +0 -1463
  72. synapse_sdk/devtools/docs/docs/plugins/upload-plugins.md +0 -1964
  73. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/developing-upload-template.md +0 -1463
  74. synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/upload-plugins.md +0 -2077
  75. {synapse_sdk-2025.9.5.dist-info → synapse_sdk-2025.10.6.dist-info}/WHEEL +0 -0
  76. {synapse_sdk-2025.9.5.dist-info → synapse_sdk-2025.10.6.dist-info}/entry_points.txt +0 -0
  77. {synapse_sdk-2025.9.5.dist-info → synapse_sdk-2025.10.6.dist-info}/licenses/LICENSE +0 -0
  78. {synapse_sdk-2025.9.5.dist-info → synapse_sdk-2025.10.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,621 @@
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
+ - **리소스 관리**: 시행당 CPU/GPU 할당 구성 가능
25
+ - **최적 모델 선택**: 튜닝 후 자동으로 최적 모델 체크포인트 선택
26
+ - **진행 상황 추적**: 학습/튜닝 단계별 실시간 진행 상황 업데이트
27
+
28
+ ## 모드
29
+
30
+ ### 학습 모드 (기본값)
31
+
32
+ 고정된 하이퍼파라미터를 사용한 표준 모델 학습.
33
+
34
+ ```json
35
+ {
36
+ "action": "train",
37
+ "params": {
38
+ "name": "my_model",
39
+ "dataset": 123,
40
+ "checkpoint": null,
41
+ "is_tune": false,
42
+ "hyperparameter": {
43
+ "epochs": 100,
44
+ "batch_size": 32,
45
+ "learning_rate": 0.001,
46
+ "optimizer": "adam"
47
+ }
48
+ }
49
+ }
50
+ ```
51
+
52
+ ### 하이퍼파라미터 튜닝 모드
53
+
54
+ Ray Tune을 사용한 하이퍼파라미터 최적화.
55
+
56
+ ```json
57
+ {
58
+ "action": "train",
59
+ "params": {
60
+ "name": "my_tuning_job",
61
+ "dataset": 123,
62
+ "checkpoint": null,
63
+ "is_tune": true,
64
+ "hyperparameters": [
65
+ {
66
+ "batch_size": { "type": "choice", "values": [16, 32, 64] },
67
+ "learning_rate": { "type": "loguniform", "min": 0.0001, "max": 0.01 },
68
+ "optimizer": { "type": "choice", "values": ["adam", "sgd"] }
69
+ }
70
+ ],
71
+ "tune_config": {
72
+ "mode": "max",
73
+ "metric": "accuracy",
74
+ "num_samples": 10,
75
+ "max_concurrent_trials": 2
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## 구성 매개변수
82
+
83
+ ### 공통 매개변수 (두 모드 모두)
84
+
85
+ | 매개변수 | 타입 | 필수 여부 | 설명 |
86
+ | ------------ | ------------- | --------- | ---------------------------------- |
87
+ | `name` | `str` | 예 | 학습/튜닝 작업 이름 |
88
+ | `dataset` | `int` | 예 | 데이터셋 ID |
89
+ | `checkpoint` | `int \| None` | 아니오 | 학습 재개를 위한 체크포인트 ID |
90
+ | `is_tune` | `bool` | 아니오 | 튜닝 모드 활성화 (기본값: `false`) |
91
+ | `num_cpus` | `float` | 아니오 | 시행당 CPU 리소스 (튜닝 전용) |
92
+ | `num_gpus` | `float` | 아니오 | 시행당 GPU 리소스 (튜닝 전용) |
93
+
94
+ ### 학습 모드 매개변수 (`is_tune=false`)
95
+
96
+ | 매개변수 | 타입 | 필수 여부 | 설명 |
97
+ | ---------------- | ------ | --------- | ------------------------------- |
98
+ | `hyperparameter` | `dict` | 예 | 학습을 위한 고정 하이퍼파라미터 |
99
+
100
+ **참고**: `hyperparameter`의 구조는 완전히 유연하며 플러그인에서 정의합니다. 일반적인 필드는 다음과 같습니다:
101
+
102
+ - `epochs`: 학습 에폭 수
103
+ - `batch_size`: 학습 배치 크기
104
+ - `learning_rate`: 학습률
105
+ - `optimizer`: 옵티마이저 타입 (adam, sgd 등)
106
+ - 플러그인에 필요한 모든 사용자 정의 필드 (예: `dropout_rate`, `weight_decay`, `image_size`)
107
+
108
+ ### 튜닝 모드 매개변수 (`is_tune=true`)
109
+
110
+ | 매개변수 | 타입 | 필수 여부 | 설명 |
111
+ | ----------------- | ------ | --------- | ----------------------------- |
112
+ | `hyperparameters` | `list` | 예 | 하이퍼파라미터 검색 공간 목록 |
113
+ | `tune_config` | `dict` | 예 | Ray Tune 구성 |
114
+
115
+ ## 하이퍼파라미터 검색 공간
116
+
117
+ 튜닝을 위한 하이퍼파라미터 분포 정의:
118
+
119
+ ### 연속 분포
120
+
121
+ ```python
122
+ {
123
+ "learning_rate": {
124
+ "type": "uniform", # 균등 분포
125
+ "min": 0.0001,
126
+ "max": 0.01
127
+ },
128
+ "dropout_rate": {
129
+ "type": "loguniform", # 로그 균등 분포
130
+ "min": 0.0001,
131
+ "max": 0.1
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### 이산 분포
137
+
138
+ ```python
139
+ {
140
+ "batch_size": {
141
+ "type": "choice", # 목록에서 선택
142
+ "values": [16, 32, 64, 128]
143
+ },
144
+ "optimizer": {
145
+ "type": "choice",
146
+ "values": ["adam", "sgd", "rmsprop"]
147
+ }
148
+ }
149
+ ```
150
+
151
+ ### 양자화 분포
152
+
153
+ ```python
154
+ {
155
+ "learning_rate": {
156
+ "type": "quniform", # 양자화된 균등 분포
157
+ "min": 0.0001,
158
+ "max": 0.01,
159
+ "q": 0.0001
160
+ }
161
+ }
162
+ ```
163
+
164
+ ### 지원되는 분포 타입
165
+
166
+ 각 하이퍼파라미터 타입은 특정 파라미터가 필요합니다:
167
+
168
+ | 타입 | 필수 파라미터 | 설명 | 예시 |
169
+ | ------------- | -------------------- | -------------------------- | ------------------------------------------------------------------------------- |
170
+ | `uniform` | `min`, `max` | min과 max 사이의 균등 분포 | `{"name": "lr", "type": "uniform", "min": 0.0001, "max": 0.01}` |
171
+ | `quniform` | `min`, `max` | 양자화된 균등 분포 | `{"name": "lr", "type": "quniform", "min": 0.0001, "max": 0.01}` |
172
+ | `loguniform` | `min`, `max`, `base` | 로그 균등 분포 | `{"name": "lr", "type": "loguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
173
+ | `qloguniform` | `min`, `max`, `base` | 양자화된 로그 균등 분포 | `{"name": "lr", "type": "qloguniform", "min": 0.0001, "max": 0.01, "base": 10}` |
174
+ | `randn` | `mean`, `sd` | 정규(가우시안) 분포 | `{"name": "noise", "type": "randn", "mean": 0.0, "sd": 1.0}` |
175
+ | `qrandn` | `mean`, `sd` | 양자화된 정규 분포 | `{"name": "noise", "type": "qrandn", "mean": 0.0, "sd": 1.0}` |
176
+ | `randint` | `min`, `max` | min과 max 사이의 랜덤 정수 | `{"name": "epochs", "type": "randint", "min": 5, "max": 15}` |
177
+ | `qrandint` | `min`, `max` | 양자화된 랜덤 정수 | `{"name": "epochs", "type": "qrandint", "min": 5, "max": 15}` |
178
+ | `lograndint` | `min`, `max`, `base` | 로그 랜덤 정수 | `{"name": "units", "type": "lograndint", "min": 16, "max": 256, "base": 2}` |
179
+ | `qlograndint` | `min`, `max`, `base` | 양자화된 로그 랜덤 정수 | `{"name": "units", "type": "qlograndint", "min": 16, "max": 256, "base": 2}` |
180
+ | `choice` | `options` | 값 목록에서 선택 | `{"name": "optimizer", "type": "choice", "options": ["adam", "sgd"]}` |
181
+ | `grid_search` | `options` | 모든 값에 대한 그리드 검색 | `{"name": "batch_size", "type": "grid_search", "options": [16, 32, 64]}` |
182
+
183
+ **중요 참고사항:**
184
+
185
+ - 모든 하이퍼파라미터는 `name`과 `type` 필드를 포함해야 합니다
186
+ - `loguniform`, `qloguniform`, `lograndint`, `qlograndint`의 경우: `base` 파라미터가 필수입니다 (일반적으로 10 또는 2)
187
+ - `choice` 및 `grid_search`의 경우: `options` 사용 (`values` 아님)
188
+ - 범위 기반 타입의 경우: `min` 및 `max` 사용 (`lower` 및 `upper` 아님)
189
+
190
+ ## Tune 구성
191
+
192
+ ### 기본 구성
193
+
194
+ ```python
195
+ {
196
+ "mode": "max", # "max" 또는 "min"
197
+ "metric": "accuracy", # 최적화할 메트릭
198
+ "num_samples": 10, # 시행 횟수
199
+ "max_concurrent_trials": 2 # 병렬 시행 수
200
+ }
201
+ ```
202
+
203
+ ### 검색 알고리즘 포함
204
+
205
+ ```python
206
+ {
207
+ "mode": "max",
208
+ "metric": "accuracy",
209
+ "num_samples": 20,
210
+ "max_concurrent_trials": 4,
211
+ "search_alg": {
212
+ "name": "OptunaSearch", # 검색 알고리즘
213
+ "points_to_evaluate": [ # 선택적 초기 포인트
214
+ {
215
+ "learning_rate": 0.001,
216
+ "batch_size": 32
217
+ }
218
+ ]
219
+ }
220
+ }
221
+ ```
222
+
223
+ ### 스케줄러 포함
224
+
225
+ ```python
226
+ {
227
+ "mode": "max",
228
+ "metric": "accuracy",
229
+ "num_samples": 50,
230
+ "max_concurrent_trials": 8,
231
+ "scheduler": {
232
+ "name": "ASHA", # 스케줄러 타입
233
+ "options": {
234
+ "grace_period": 10,
235
+ "max_t": 100
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ ### 지원되는 검색 알고리즘
242
+
243
+ - `basicvariantgenerator` - 랜덤 검색 (기본값)
244
+ - `bayesoptsearch` - 베이지안 최적화
245
+ - `hyperoptsearch` - Tree-structured Parzen Estimator
246
+
247
+ ### 지원되는 스케줄러
248
+
249
+ - `fifo` - First-in-first-out (기본값)
250
+ - `hyperband` - HyperBand 스케줄러
251
+
252
+ ## 플러그인 개발
253
+
254
+ ### 학습 모드용
255
+
256
+ 플러그인에서 `train()` 함수 구현:
257
+
258
+ ```python
259
+ def train(run, dataset, hyperparameter, checkpoint, **kwargs):
260
+ """
261
+ 모델 학습 함수.
262
+
263
+ Args:
264
+ run: 로깅을 위한 TrainRun 객체
265
+ dataset: Dataset 객체
266
+ hyperparameter: 하이퍼파라미터가 포함된 dict
267
+ checkpoint: 재개를 위한 선택적 체크포인트
268
+ """
269
+ # 하이퍼파라미터 접근
270
+ epochs = hyperparameter['epochs']
271
+ batch_size = hyperparameter['batch_size']
272
+ learning_rate = hyperparameter['learning_rate']
273
+
274
+ # 학습 루프
275
+ for epoch in range(epochs):
276
+ # 한 에폭 학습
277
+ loss, accuracy = train_one_epoch(...)
278
+
279
+ # 메트릭 로깅
280
+ run.log_metric('training', 'loss', loss, epoch=epoch)
281
+ run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
282
+
283
+ # 시각화 로깅
284
+ run.log_visualization('predictions', 'train', epoch, image_data)
285
+
286
+ # 최종 모델 저장
287
+ save_model(model, '/path/to/model.pth')
288
+ ```
289
+
290
+ ### 튜닝 모드용
291
+
292
+ 플러그인에서 `tune()` 함수 구현:
293
+
294
+ ```python
295
+ def tune(hyperparameter, run, dataset, checkpoint, **kwargs):
296
+ """
297
+ 하이퍼파라미터 최적화를 위한 튜닝 함수.
298
+
299
+ Args:
300
+ hyperparameter: 현재 시행의 하이퍼파라미터가 포함된 dict
301
+ run: 로깅을 위한 TrainRun 객체 (is_tune=True)
302
+ dataset: Dataset 객체
303
+ checkpoint: 재개를 위한 선택적 체크포인트
304
+ """
305
+ from ray import tune
306
+
307
+ # 학습 전에 체크포인트 출력 경로 설정
308
+ output_path = Path('/path/to/trial/weights')
309
+ run.checkpoint_output = str(output_path)
310
+
311
+ # 학습 루프
312
+ for epoch in range(hyperparameter['epochs']):
313
+ loss, accuracy = train_one_epoch(...)
314
+
315
+ # 메트릭 로깅 (trial_id가 자동으로 추가됨)
316
+ run.log_metric('training', 'loss', loss, epoch=epoch)
317
+ run.log_metric('training', 'accuracy', accuracy, epoch=epoch)
318
+
319
+ # Ray Tune에 결과 보고
320
+ results = {
321
+ "accuracy": final_accuracy,
322
+ "loss": final_loss
323
+ }
324
+
325
+ # 중요: 체크포인트와 함께 보고
326
+ tune.report(
327
+ results,
328
+ checkpoint=tune.Checkpoint.from_directory(run.checkpoint_output)
329
+ )
330
+ ```
331
+
332
+ ### 매개변수 순서 차이
333
+
334
+ **중요**: `train()`과 `tune()` 간에 매개변수 순서가 다릅니다:
335
+
336
+ - `train(run, dataset, hyperparameter, checkpoint, **kwargs)`
337
+ - `tune(hyperparameter, run, dataset, checkpoint, **kwargs)`
338
+
339
+ ### 자동 Trial ID 로깅
340
+
341
+ `is_tune=True`일 때, SDK는 모든 메트릭 및 시각화 로그에 자동으로 `trial_id`를 주입합니다:
342
+
343
+ ```python
344
+ # 플러그인 코드
345
+ run.log_metric('training', 'loss', 0.5, epoch=10)
346
+
347
+ # 실제 로깅된 데이터 (trial_id가 자동으로 추가됨)
348
+ {
349
+ 'category': 'training',
350
+ 'key': 'loss',
351
+ 'value': 0.5,
352
+ 'metrics': {'epoch': 10},
353
+ 'trial_id': 'abc123' # 자동으로 추가됨
354
+ }
355
+ ```
356
+
357
+ 플러그인 변경 불필요 - SDK 레벨에서 투명하게 처리됩니다.
358
+
359
+ ## TuneAction에서 마이그레이션
360
+
361
+ 독립형 `TuneAction`은 이제 **더 이상 사용되지 않습니다**. `is_tune=true`를 사용하는 `TrainAction`으로 마이그레이션하세요:
362
+
363
+ ### 이전 (더 이상 사용되지 않음)
364
+
365
+ ```json
366
+ {
367
+ "action": "tune",
368
+ "params": {
369
+ "name": "my_tuning_job",
370
+ "dataset": 123,
371
+ "hyperparameter": [...],
372
+ "tune_config": {...}
373
+ }
374
+ }
375
+ ```
376
+
377
+ ### 이후 (권장)
378
+
379
+ ```json
380
+ {
381
+ "action": "train",
382
+ "params": {
383
+ "name": "my_tuning_job",
384
+ "dataset": 123,
385
+ "is_tune": true,
386
+ "hyperparameters": [...],
387
+ "tune_config": {...}
388
+ }
389
+ }
390
+ ```
391
+
392
+ ### 주요 변경 사항
393
+
394
+ 1. `"action": "tune"`을 `"action": "train"`으로 변경
395
+ 2. `"is_tune": true` 추가
396
+ 3. `"hyperparameter"`를 `"hyperparameters"`로 이름 변경
397
+
398
+ ## 예제
399
+
400
+ ### 간단한 학습
401
+
402
+ ```json
403
+ {
404
+ "action": "train",
405
+ "params": {
406
+ "name": "resnet50_training",
407
+ "dataset": 456,
408
+ "checkpoint": null,
409
+ "hyperparameter": {
410
+ "epochs": 100,
411
+ "batch_size": 32,
412
+ "learning_rate": 0.001,
413
+ "optimizer": "adam",
414
+ "weight_decay": 0.0001
415
+ }
416
+ }
417
+ }
418
+ ```
419
+
420
+ ### 체크포인트에서 재개
421
+
422
+ ```json
423
+ {
424
+ "action": "train",
425
+ "params": {
426
+ "name": "resnet50_continued",
427
+ "dataset": 456,
428
+ "checkpoint": 789,
429
+ "hyperparameter": {
430
+ "epochs": 50,
431
+ "batch_size": 32,
432
+ "learning_rate": 0.0001,
433
+ "optimizer": "adam"
434
+ }
435
+ }
436
+ }
437
+ ```
438
+
439
+ ### 그리드 검색을 통한 하이퍼파라미터 튜닝
440
+
441
+ ```json
442
+ {
443
+ "action": "train",
444
+ "params": {
445
+ "name": "resnet50_tuning",
446
+ "dataset": 456,
447
+ "is_tune": true,
448
+ "hyperparameters": [
449
+ {
450
+ "batch_size": { "type": "grid_search", "values": [16, 32, 64] },
451
+ "learning_rate": { "type": "grid_search", "values": [0.001, 0.0001] },
452
+ "optimizer": { "type": "grid_search", "values": ["adam", "sgd"] }
453
+ }
454
+ ],
455
+ "tune_config": {
456
+ "mode": "max",
457
+ "metric": "validation_accuracy",
458
+ "num_samples": 12,
459
+ "max_concurrent_trials": 4
460
+ }
461
+ }
462
+ }
463
+ ```
464
+
465
+ ### Optuna 및 ASHA를 사용한 고급 튜닝
466
+
467
+ ```json
468
+ {
469
+ "action": "train",
470
+ "params": {
471
+ "name": "resnet50_optuna_tuning",
472
+ "dataset": 456,
473
+ "is_tune": true,
474
+ "num_cpus": 2,
475
+ "num_gpus": 0.5,
476
+ "hyperparameters": [
477
+ {
478
+ "batch_size": { "type": "choice", "values": [16, 32, 64, 128] },
479
+ "learning_rate": { "type": "loguniform", "min": 0.00001, "max": 0.01 },
480
+ "weight_decay": { "type": "loguniform", "min": 0.00001, "max": 0.001 },
481
+ "optimizer": { "type": "choice", "values": ["adam", "sgd", "rmsprop"] }
482
+ }
483
+ ],
484
+ "tune_config": {
485
+ "mode": "max",
486
+ "metric": "validation_accuracy",
487
+ "num_samples": 50,
488
+ "max_concurrent_trials": 8,
489
+ "search_alg": {
490
+ "name": "OptunaSearch"
491
+ },
492
+ "scheduler": {
493
+ "name": "ASHA",
494
+ "options": {
495
+ "grace_period": 10,
496
+ "max_t": 100,
497
+ "reduction_factor": 3
498
+ }
499
+ }
500
+ }
501
+ }
502
+ }
503
+ ```
504
+
505
+ ## 진행 상황 추적
506
+
507
+ train 액션은 다양한 단계에서 진행 상황을 추적합니다:
508
+
509
+ ### 학습 모드
510
+
511
+ | 카테고리 | 비율 | 설명 |
512
+ | ------------ | ---- | ------------- |
513
+ | `validation` | 10% | 매개변수 검증 |
514
+ | `training` | 90% | 모델 학습 |
515
+
516
+ ### 튜닝 모드
517
+
518
+ | 카테고리 | 비율 | 설명 |
519
+ | ------------ | ---- | ------------------------ |
520
+ | `validation` | 10% | 매개변수 검증 |
521
+ | `trials` | 90% | 하이퍼파라미터 튜닝 시행 |
522
+
523
+ ## 이점
524
+
525
+ ### 통합 인터페이스
526
+
527
+ - 학습과 튜닝을 위한 단일 액션
528
+ - 일관된 매개변수 처리
529
+ - 코드 중복 감소
530
+
531
+ ### 유연한 하이퍼파라미터
532
+
533
+ - SDK에서 고정된 구조 강제하지 않음
534
+ - 플러그인이 자체 하이퍼파라미터 스키마 정의
535
+ - 검증 오류 없이 사용자 정의 필드 지원
536
+
537
+ ### 고급 HPO
538
+
539
+ - 다양한 검색 알고리즘 (Optuna, Ax, HyperOpt, BayesOpt)
540
+ - 다양한 스케줄러 (ASHA, HyperBand, PBT)
541
+ - 자동 최적 모델 선택
542
+
543
+ ### 개발자 경험
544
+
545
+ - 자동 시행 추적
546
+ - 투명한 로깅 향상
547
+ - 더 이상 사용되지 않는 TuneAction에서의 명확한 마이그레이션 경로
548
+
549
+ ## 모범 사례
550
+
551
+ ### 하이퍼파라미터 설계
552
+
553
+ - 합리적인 하이퍼파라미터 검색 공간 유지
554
+ - 초기 탐색을 위해 그리드 검색으로 시작
555
+ - 효율적인 검색을 위해 베이지안 최적화 (Optuna, Ax) 사용
556
+ - 검색 공간 크기에 따라 적절한 `num_samples` 설정
557
+
558
+ ### 리소스 관리
559
+
560
+ - 시행 리소스 요구 사항에 따라 `num_cpus` 및 `num_gpus` 할당
561
+ - 사용 가능한 하드웨어에 따라 `max_concurrent_trials` 설정
562
+ - 튜닝 중 리소스 사용량 모니터링
563
+
564
+ ### 체크포인트 관리
565
+
566
+ - 튜닝 모드에서 학습 전에 항상 `run.checkpoint_output` 설정
567
+ - 정기적으로 체크포인트 저장
568
+ - 튜닝에서 반환된 최적 체크포인트 사용
569
+
570
+ ### 로깅
571
+
572
+ - 비교를 위해 모든 관련 메트릭 로깅
573
+ - 시행 간에 일관된 메트릭 이름 사용
574
+ - 튜닝 보고서에 검증 메트릭 포함
575
+
576
+ ## 문제 해결
577
+
578
+ ### 일반적인 문제
579
+
580
+ #### "hyperparameter is required when is_tune=False"
581
+
582
+ 학습 모드에서 `hyperparameter`를 제공했는지 확인하세요:
583
+
584
+ ```json
585
+ {
586
+ "is_tune": false,
587
+ "hyperparameter": {...}
588
+ }
589
+ ```
590
+
591
+ #### "hyperparameters is required when is_tune=True"
592
+
593
+ 튜닝 모드에서 `hyperparameters`와 `tune_config`를 제공했는지 확인하세요:
594
+
595
+ ```json
596
+ {
597
+ "is_tune": true,
598
+ "hyperparameters": [...],
599
+ "tune_config": {...}
600
+ }
601
+ ```
602
+
603
+ #### 오류 없이 튜닝 실패
604
+
605
+ `tune()` 함수가 다음을 수행하는지 확인하세요:
606
+
607
+ 1. 학습 전에 `run.checkpoint_output` 설정
608
+ 2. 결과 및 체크포인트와 함께 `tune.report()` 호출
609
+ 3. 예외 없이 적절하게 반환
610
+
611
+ ## 다음 단계
612
+
613
+ - **플러그인 개발자용**: `train()` 및 선택적으로 `tune()` 함수 구현
614
+ - **사용자용**: 학습 모드로 시작한 다음 튜닝 실험
615
+ - **고급 사용자용**: 다양한 검색 알고리즘 및 스케줄러 탐색
616
+
617
+ ## 지원 및 리소스
618
+
619
+ - **API 참조**: TrainAction 클래스 문서 참조
620
+ - **예제**: 플러그인 예제 저장소 확인
621
+ - **Ray Tune 문서**: https://docs.ray.io/en/latest/tune/