synapse-sdk 2025.10.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.
- synapse_sdk/clients/base.py +129 -9
- synapse_sdk/devtools/docs/docs/api/clients/base.md +230 -8
- synapse_sdk/devtools/docs/docs/plugins/categories/neural-net-plugins/train-action-overview.md +663 -0
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/api/clients/base.md +230 -8
- synapse_sdk/devtools/docs/i18n/ko/docusaurus-plugin-content-docs/current/plugins/categories/neural-net-plugins/train-action-overview.md +621 -0
- synapse_sdk/devtools/docs/sidebars.ts +11 -0
- synapse_sdk/plugins/categories/neural_net/actions/train.py +592 -22
- synapse_sdk/plugins/categories/neural_net/actions/tune.py +150 -3
- synapse_sdk/plugins/categories/upload/templates/README.md +61 -32
- synapse_sdk/utils/file/download.py +261 -0
- {synapse_sdk-2025.10.5.dist-info → synapse_sdk-2025.10.6.dist-info}/METADATA +1 -1
- {synapse_sdk-2025.10.5.dist-info → synapse_sdk-2025.10.6.dist-info}/RECORD +16 -14
- {synapse_sdk-2025.10.5.dist-info → synapse_sdk-2025.10.6.dist-info}/WHEEL +0 -0
- {synapse_sdk-2025.10.5.dist-info → synapse_sdk-2025.10.6.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-2025.10.5.dist-info → synapse_sdk-2025.10.6.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-2025.10.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/
|
|
@@ -68,6 +68,17 @@ const sidebars: SidebarsConfig = {
|
|
|
68
68
|
'plugins/categories/pre-annotation-plugins/to-task-template-development',
|
|
69
69
|
],
|
|
70
70
|
},
|
|
71
|
+
{
|
|
72
|
+
type: 'category',
|
|
73
|
+
label: 'Neural Network Plugins',
|
|
74
|
+
link: {
|
|
75
|
+
type: 'doc',
|
|
76
|
+
id: 'plugins/categories/neural-net-plugins/train-action-overview',
|
|
77
|
+
},
|
|
78
|
+
items: [
|
|
79
|
+
'plugins/categories/neural-net-plugins/train-action-overview',
|
|
80
|
+
],
|
|
81
|
+
},
|
|
71
82
|
],
|
|
72
83
|
},
|
|
73
84
|
{
|