aiauto-client 0.1.11__tar.gz → 0.1.12__tar.gz
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.
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/PKG-INFO +26 -4
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/README.md +25 -3
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/examples/example_torch_multiple_objective.py +7 -2
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/examples/example_torch_single_objective.py +7 -2
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/examples/simple_example.py +8 -2
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/pyproject.toml +1 -1
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/http_client.py +13 -4
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/PKG-INFO +26 -4
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/MANIFEST.in +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/setup.cfg +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/__init__.py +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/_config.py +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/constants.py +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/core.py +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/serializer.py +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/SOURCES.txt +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/dependency_links.txt +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/requires.txt +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/top_level.txt +0 -0
- {aiauto_client-0.1.11 → aiauto_client-0.1.12}/tests/test_local_storage.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: aiauto-client
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.12
|
4
4
|
Summary: AI Auto HPO (Hyperparameter Optimization) Client Library
|
5
5
|
Author-email: AIAuto Team <ainode@zeroone.ai>
|
6
6
|
Project-URL: Homepage, https://dashboard.common.aiauto.pangyo.ainode.ai
|
@@ -73,6 +73,7 @@ for image in aiauto.RUNTIME_IMAGES:
|
|
73
73
|
- 아래 코드 처럼 발급한 token 을 넣어 AIAutoController singleton 객체를 초기화, OptunaWorkspace 를 활성화 시킨다
|
74
74
|
```python
|
75
75
|
import aiauto
|
76
|
+
import time
|
76
77
|
|
77
78
|
ac = aiauto.AIAutoController('<token>')
|
78
79
|
```
|
@@ -83,6 +84,7 @@ study_wrapper = ac.create_study(
|
|
83
84
|
study_name='test',
|
84
85
|
direction='maximize', # or 'minimize'
|
85
86
|
)
|
87
|
+
time.sleep(5)
|
86
88
|
```
|
87
89
|
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
88
90
|
```python
|
@@ -93,6 +95,7 @@ study_wrapper.optimize(
|
|
93
95
|
use_gpu=False,
|
94
96
|
runtime_image=aiauto.RUNTIME_IMAGES[0],
|
95
97
|
)
|
98
|
+
time.sleep(5)
|
96
99
|
```
|
97
100
|
- 종료 됐는지 optuna-dashboard 가 아닌 코드로 확인하는 법
|
98
101
|
```python
|
@@ -132,11 +135,14 @@ def objective(trial: optuna.trial.Trial):
|
|
132
135
|
- 저장한 함수를 import해서 사용
|
133
136
|
```python
|
134
137
|
import aiauto
|
138
|
+
import time
|
135
139
|
from my_objective import objective
|
136
140
|
|
137
141
|
ac = aiauto.AIAutoController('<token>')
|
138
142
|
study = ac.create_study('test', 'minimize')
|
143
|
+
time.sleep(5)
|
139
144
|
study.optimize(objective, n_trials=10, parallelism=2)
|
145
|
+
time.sleep(5)
|
140
146
|
```
|
141
147
|
|
142
148
|
## 빠른 시작
|
@@ -146,6 +152,7 @@ study.optimize(objective, n_trials=10, parallelism=2)
|
|
146
152
|
```python
|
147
153
|
import optuna
|
148
154
|
import aiauto
|
155
|
+
import time
|
149
156
|
|
150
157
|
|
151
158
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -159,6 +166,7 @@ study_wrapper = ac.create_study(
|
|
159
166
|
direction="minimize"
|
160
167
|
# sampler=optuna.samplers.TPESampler(), # optuna 에서 제공하는 sampler 그대로 사용 가능, 참고 https://optuna.readthedocs.io/en/stable/reference/samplers/index.html
|
161
168
|
)
|
169
|
+
time.sleep(5)
|
162
170
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
163
171
|
|
164
172
|
# objective 함수 정의
|
@@ -174,6 +182,7 @@ study_wrapper.optimize(
|
|
174
182
|
n_trials=100,
|
175
183
|
parallelism=4 # 동시 실행 Pod 수
|
176
184
|
)
|
185
|
+
time.sleep(5)
|
177
186
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
178
187
|
```
|
179
188
|
|
@@ -182,6 +191,7 @@ study_wrapper.optimize(
|
|
182
191
|
```python
|
183
192
|
import optuna
|
184
193
|
import aiauto
|
194
|
+
import time
|
185
195
|
|
186
196
|
|
187
197
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -199,6 +209,7 @@ study_wrapper = ac.create_study(
|
|
199
209
|
patience=4,
|
200
210
|
),
|
201
211
|
)
|
212
|
+
time.sleep(5)
|
202
213
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
203
214
|
|
204
215
|
# objective 함수 정의
|
@@ -306,6 +317,7 @@ study_wrapper.optimize(
|
|
306
317
|
use_gpu=True, # GPU 사용
|
307
318
|
requirements_list=['torch', 'torchvision'] # Pod에서 자동 설치
|
308
319
|
)
|
320
|
+
time.sleep(5)
|
309
321
|
```
|
310
322
|
|
311
323
|
### 3. Multi-Objective 최적화 (Accuracy + FLOPS)
|
@@ -313,6 +325,7 @@ study_wrapper.optimize(
|
|
313
325
|
```python
|
314
326
|
import optuna
|
315
327
|
import aiauto
|
328
|
+
import time
|
316
329
|
|
317
330
|
|
318
331
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -326,6 +339,7 @@ study_wrapper = ac.create_study(
|
|
326
339
|
direction=["minimize", "minimize"], # loss minimize, FLOPS minimize
|
327
340
|
# sampler=optuna.samplers.TPESampler(), # optuna 에서 제공하는 sampler 그대로 사용 가능, 참고 https://optuna.readthedocs.io/en/stable/reference/samplers/index.html
|
328
341
|
)
|
342
|
+
time.sleep(5)
|
329
343
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
330
344
|
|
331
345
|
# objective 함수 정의
|
@@ -434,6 +448,7 @@ study_wrapper.optimize(
|
|
434
448
|
use_gpu=True, # GPU 사용
|
435
449
|
requirements_list=['torch', 'torchvision', 'fvcore'] # Pod에서 자동 설치
|
436
450
|
)
|
451
|
+
time.sleep(5)
|
437
452
|
```
|
438
453
|
|
439
454
|
### 4. Ask/Tell 패턴 및 Optuna 자체의 Study
|
@@ -441,6 +456,7 @@ study_wrapper.optimize(
|
|
441
456
|
```python
|
442
457
|
import optuna
|
443
458
|
import aiauto
|
459
|
+
import time
|
444
460
|
|
445
461
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
446
462
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
@@ -457,6 +473,7 @@ study_wrapper = ac.create_study(
|
|
457
473
|
# patience=4,
|
458
474
|
# )
|
459
475
|
)
|
476
|
+
time.sleep(5)
|
460
477
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
461
478
|
|
462
479
|
# 실제 optuna.Study 객체 획득 (로컬에서 ask/tell 가능)
|
@@ -521,10 +538,11 @@ make build push
|
|
521
538
|
|
522
539
|
#### (A) 분산 실행
|
523
540
|
```python
|
524
|
-
import aiauto, optuna
|
541
|
+
import aiauto, optuna, time
|
525
542
|
|
526
543
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
527
544
|
study = controller.create_study('exp1', direction='minimize')
|
545
|
+
time.sleep(5)
|
528
546
|
|
529
547
|
def objective(trial):
|
530
548
|
import numpy as np
|
@@ -537,14 +555,16 @@ n_trials=64,
|
|
537
555
|
parallelism=8,
|
538
556
|
requirements_list=['numpy'],
|
539
557
|
)
|
558
|
+
time.sleep(5)
|
540
559
|
```
|
541
560
|
|
542
561
|
#### (B) ask/tell (실제 optuna.Study 사용)
|
543
562
|
```python
|
544
|
-
import aiauto, optuna
|
563
|
+
import aiauto, optuna, time
|
545
564
|
|
546
565
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
547
566
|
sw = controller.create_study('manual', direction='minimize')
|
567
|
+
time.sleep(5)
|
548
568
|
|
549
569
|
real = sw.get_study() # 실제 optuna.Study 로드 (gRPC: h2c 13000)
|
550
570
|
t = real.ask()
|
@@ -576,7 +596,7 @@ real.tell(t, (x - 2) ** 2)
|
|
576
596
|
|
577
597
|
#### 예시: Sampler/Pruner 그대로 사용
|
578
598
|
```python
|
579
|
-
import optuna, aiauto
|
599
|
+
import optuna, aiauto, time
|
580
600
|
|
581
601
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
582
602
|
study = controller.create_study(
|
@@ -585,6 +605,7 @@ direction='minimize',
|
|
585
605
|
sampler=optuna.samplers.TPESampler(seed=42),
|
586
606
|
pruner=optuna.pruners.MedianPruner(n_startup_trials=5),
|
587
607
|
)
|
608
|
+
time.sleep(5)
|
588
609
|
|
589
610
|
def objective(trial):
|
590
611
|
import numpy as np
|
@@ -592,6 +613,7 @@ lr = trial.suggest_float('lr', 1e-5, 1e-1, log=True)
|
|
592
613
|
return (np.log10(lr) + 2) ** 2
|
593
614
|
|
594
615
|
study.optimize(objective, n_trials=50, parallelism=4)
|
616
|
+
time.sleep(5)
|
595
617
|
```
|
596
618
|
|
597
619
|
#### 예시: get_study() 후 Optuna API 그대로 사용
|
@@ -46,6 +46,7 @@ for image in aiauto.RUNTIME_IMAGES:
|
|
46
46
|
- 아래 코드 처럼 발급한 token 을 넣어 AIAutoController singleton 객체를 초기화, OptunaWorkspace 를 활성화 시킨다
|
47
47
|
```python
|
48
48
|
import aiauto
|
49
|
+
import time
|
49
50
|
|
50
51
|
ac = aiauto.AIAutoController('<token>')
|
51
52
|
```
|
@@ -56,6 +57,7 @@ study_wrapper = ac.create_study(
|
|
56
57
|
study_name='test',
|
57
58
|
direction='maximize', # or 'minimize'
|
58
59
|
)
|
60
|
+
time.sleep(5)
|
59
61
|
```
|
60
62
|
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
61
63
|
```python
|
@@ -66,6 +68,7 @@ study_wrapper.optimize(
|
|
66
68
|
use_gpu=False,
|
67
69
|
runtime_image=aiauto.RUNTIME_IMAGES[0],
|
68
70
|
)
|
71
|
+
time.sleep(5)
|
69
72
|
```
|
70
73
|
- 종료 됐는지 optuna-dashboard 가 아닌 코드로 확인하는 법
|
71
74
|
```python
|
@@ -105,11 +108,14 @@ def objective(trial: optuna.trial.Trial):
|
|
105
108
|
- 저장한 함수를 import해서 사용
|
106
109
|
```python
|
107
110
|
import aiauto
|
111
|
+
import time
|
108
112
|
from my_objective import objective
|
109
113
|
|
110
114
|
ac = aiauto.AIAutoController('<token>')
|
111
115
|
study = ac.create_study('test', 'minimize')
|
116
|
+
time.sleep(5)
|
112
117
|
study.optimize(objective, n_trials=10, parallelism=2)
|
118
|
+
time.sleep(5)
|
113
119
|
```
|
114
120
|
|
115
121
|
## 빠른 시작
|
@@ -119,6 +125,7 @@ study.optimize(objective, n_trials=10, parallelism=2)
|
|
119
125
|
```python
|
120
126
|
import optuna
|
121
127
|
import aiauto
|
128
|
+
import time
|
122
129
|
|
123
130
|
|
124
131
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -132,6 +139,7 @@ study_wrapper = ac.create_study(
|
|
132
139
|
direction="minimize"
|
133
140
|
# sampler=optuna.samplers.TPESampler(), # optuna 에서 제공하는 sampler 그대로 사용 가능, 참고 https://optuna.readthedocs.io/en/stable/reference/samplers/index.html
|
134
141
|
)
|
142
|
+
time.sleep(5)
|
135
143
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
136
144
|
|
137
145
|
# objective 함수 정의
|
@@ -147,6 +155,7 @@ study_wrapper.optimize(
|
|
147
155
|
n_trials=100,
|
148
156
|
parallelism=4 # 동시 실행 Pod 수
|
149
157
|
)
|
158
|
+
time.sleep(5)
|
150
159
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
151
160
|
```
|
152
161
|
|
@@ -155,6 +164,7 @@ study_wrapper.optimize(
|
|
155
164
|
```python
|
156
165
|
import optuna
|
157
166
|
import aiauto
|
167
|
+
import time
|
158
168
|
|
159
169
|
|
160
170
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -172,6 +182,7 @@ study_wrapper = ac.create_study(
|
|
172
182
|
patience=4,
|
173
183
|
),
|
174
184
|
)
|
185
|
+
time.sleep(5)
|
175
186
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
176
187
|
|
177
188
|
# objective 함수 정의
|
@@ -279,6 +290,7 @@ study_wrapper.optimize(
|
|
279
290
|
use_gpu=True, # GPU 사용
|
280
291
|
requirements_list=['torch', 'torchvision'] # Pod에서 자동 설치
|
281
292
|
)
|
293
|
+
time.sleep(5)
|
282
294
|
```
|
283
295
|
|
284
296
|
### 3. Multi-Objective 최적화 (Accuracy + FLOPS)
|
@@ -286,6 +298,7 @@ study_wrapper.optimize(
|
|
286
298
|
```python
|
287
299
|
import optuna
|
288
300
|
import aiauto
|
301
|
+
import time
|
289
302
|
|
290
303
|
|
291
304
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -299,6 +312,7 @@ study_wrapper = ac.create_study(
|
|
299
312
|
direction=["minimize", "minimize"], # loss minimize, FLOPS minimize
|
300
313
|
# sampler=optuna.samplers.TPESampler(), # optuna 에서 제공하는 sampler 그대로 사용 가능, 참고 https://optuna.readthedocs.io/en/stable/reference/samplers/index.html
|
301
314
|
)
|
315
|
+
time.sleep(5)
|
302
316
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
303
317
|
|
304
318
|
# objective 함수 정의
|
@@ -407,6 +421,7 @@ study_wrapper.optimize(
|
|
407
421
|
use_gpu=True, # GPU 사용
|
408
422
|
requirements_list=['torch', 'torchvision', 'fvcore'] # Pod에서 자동 설치
|
409
423
|
)
|
424
|
+
time.sleep(5)
|
410
425
|
```
|
411
426
|
|
412
427
|
### 4. Ask/Tell 패턴 및 Optuna 자체의 Study
|
@@ -414,6 +429,7 @@ study_wrapper.optimize(
|
|
414
429
|
```python
|
415
430
|
import optuna
|
416
431
|
import aiauto
|
432
|
+
import time
|
417
433
|
|
418
434
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
419
435
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
@@ -430,6 +446,7 @@ study_wrapper = ac.create_study(
|
|
430
446
|
# patience=4,
|
431
447
|
# )
|
432
448
|
)
|
449
|
+
time.sleep(5)
|
433
450
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
434
451
|
|
435
452
|
# 실제 optuna.Study 객체 획득 (로컬에서 ask/tell 가능)
|
@@ -494,10 +511,11 @@ make build push
|
|
494
511
|
|
495
512
|
#### (A) 분산 실행
|
496
513
|
```python
|
497
|
-
import aiauto, optuna
|
514
|
+
import aiauto, optuna, time
|
498
515
|
|
499
516
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
500
517
|
study = controller.create_study('exp1', direction='minimize')
|
518
|
+
time.sleep(5)
|
501
519
|
|
502
520
|
def objective(trial):
|
503
521
|
import numpy as np
|
@@ -510,14 +528,16 @@ n_trials=64,
|
|
510
528
|
parallelism=8,
|
511
529
|
requirements_list=['numpy'],
|
512
530
|
)
|
531
|
+
time.sleep(5)
|
513
532
|
```
|
514
533
|
|
515
534
|
#### (B) ask/tell (실제 optuna.Study 사용)
|
516
535
|
```python
|
517
|
-
import aiauto, optuna
|
536
|
+
import aiauto, optuna, time
|
518
537
|
|
519
538
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
520
539
|
sw = controller.create_study('manual', direction='minimize')
|
540
|
+
time.sleep(5)
|
521
541
|
|
522
542
|
real = sw.get_study() # 실제 optuna.Study 로드 (gRPC: h2c 13000)
|
523
543
|
t = real.ask()
|
@@ -549,7 +569,7 @@ real.tell(t, (x - 2) ** 2)
|
|
549
569
|
|
550
570
|
#### 예시: Sampler/Pruner 그대로 사용
|
551
571
|
```python
|
552
|
-
import optuna, aiauto
|
572
|
+
import optuna, aiauto, time
|
553
573
|
|
554
574
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
555
575
|
study = controller.create_study(
|
@@ -558,6 +578,7 @@ direction='minimize',
|
|
558
578
|
sampler=optuna.samplers.TPESampler(seed=42),
|
559
579
|
pruner=optuna.pruners.MedianPruner(n_startup_trials=5),
|
560
580
|
)
|
581
|
+
time.sleep(5)
|
561
582
|
|
562
583
|
def objective(trial):
|
563
584
|
import numpy as np
|
@@ -565,6 +586,7 @@ lr = trial.suggest_float('lr', 1e-5, 1e-1, log=True)
|
|
565
586
|
return (np.log10(lr) + 2) ** 2
|
566
587
|
|
567
588
|
study.optimize(objective, n_trials=50, parallelism=4)
|
589
|
+
time.sleep(5)
|
568
590
|
```
|
569
591
|
|
570
592
|
#### 예시: get_study() 후 Optuna API 그대로 사용
|
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
import optuna
|
16
16
|
import aiauto
|
17
|
+
import time
|
17
18
|
|
18
19
|
|
19
20
|
# 사용 가능한 런타임 이미지 목록 확인
|
@@ -425,15 +426,16 @@ def objective_detailed(trial):
|
|
425
426
|
|
426
427
|
if __name__ == '__main__':
|
427
428
|
# ======================= Multiple-objective study =========================
|
428
|
-
|
429
|
+
study_wrapper = ac.create_study(
|
429
430
|
study_name='cifar10_torch_multiple_objective',
|
430
431
|
sampler=optuna.samplers.TPESampler(),
|
431
432
|
directions=['maximize', 'minimize'], # accuracy maximize, FLOPS minimize
|
432
433
|
# multi objective has no pruner
|
433
434
|
)
|
435
|
+
time.sleep(5)
|
434
436
|
|
435
437
|
# ========================= subset data optimize ===========================
|
436
|
-
|
438
|
+
study_wrapper.optimize(
|
437
439
|
objective_multi(),
|
438
440
|
n_trials=100,
|
439
441
|
parallelism=4, # n_jobs 대신 parallelism 사용
|
@@ -447,6 +449,9 @@ if __name__ == '__main__':
|
|
447
449
|
],
|
448
450
|
# CallbackTopNArtifact은 클라이언트 측에서는 사용 불가 (runner 에서 자동으로 지정 됨)
|
449
451
|
)
|
452
|
+
time.sleep(5)
|
453
|
+
|
454
|
+
study = study_wrapper.get_study()
|
450
455
|
|
451
456
|
for trial in study.best_trials[:5]: # 상위 5개만
|
452
457
|
print(f' Best Values (Accuracy, FLOPS): {trial.values}')
|
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
import optuna
|
16
16
|
import aiauto
|
17
|
+
import time
|
17
18
|
|
18
19
|
|
19
20
|
# 사용 가능한 런타임 이미지 목록 확인
|
@@ -429,7 +430,7 @@ def objective_detailed(trial):
|
|
429
430
|
|
430
431
|
if __name__ == '__main__':
|
431
432
|
# ================= Single-objective study with pruning ====================
|
432
|
-
|
433
|
+
study_wrapper = ac.create_study(
|
433
434
|
study_name='cifar10_torch_single_objective',
|
434
435
|
sampler=optuna.samplers.TPESampler(),
|
435
436
|
direction='maximize', # accuracy maximize
|
@@ -438,9 +439,10 @@ if __name__ == '__main__':
|
|
438
439
|
patience=4,
|
439
440
|
)
|
440
441
|
)
|
442
|
+
time.sleep(5)
|
441
443
|
|
442
444
|
# ========================= subset data optimize ===========================
|
443
|
-
|
445
|
+
study_wrapper.optimize(
|
444
446
|
objective_single,
|
445
447
|
n_trials=100,
|
446
448
|
parallelism=4, # n_jobs 대신 parallelism 사용
|
@@ -450,6 +452,9 @@ if __name__ == '__main__':
|
|
450
452
|
requirements_list=['torch', 'torchvision'],
|
451
453
|
# CallbackTopNArtifact은 클라이언트 측에서는 사용 불가 (runner 에서 자동으로 지정 됨)
|
452
454
|
)
|
455
|
+
time.sleep(5)
|
456
|
+
|
457
|
+
study = study_wrapper.get_study()
|
453
458
|
|
454
459
|
print('\nBest trials:')
|
455
460
|
print(f' Best value (accuracy): {study.best_value:.4f}')
|
@@ -12,6 +12,7 @@
|
|
12
12
|
"""
|
13
13
|
|
14
14
|
import aiauto
|
15
|
+
import time
|
15
16
|
|
16
17
|
|
17
18
|
# 사용 가능한 런타임 이미지 목록 확인
|
@@ -58,18 +59,23 @@ def simple_objective(trial):
|
|
58
59
|
|
59
60
|
if __name__ == '__main__':
|
60
61
|
# ========================== 간단한 2차 함수 최적화 =============================
|
61
|
-
|
62
|
+
study_wrapper = ac.create_study(
|
62
63
|
study_name="simple_quadratic",
|
63
64
|
direction="minimize",
|
64
65
|
sampler=optuna.samplers.TPESampler(seed=42),
|
65
66
|
)
|
66
|
-
|
67
|
+
time.sleep(5)
|
68
|
+
|
69
|
+
study_wrapper.optimize(
|
67
70
|
simple_objective,
|
68
71
|
n_trials=20,
|
69
72
|
parallelism=2, # 동시 실행 Pod 수
|
70
73
|
# use_gpu=False, # default
|
71
74
|
# runtime_image = "ghcr.io/astral-sh/uv:python3.8-bookworm-slim", # default image for use_gpu False
|
72
75
|
)
|
76
|
+
time.sleep(5)
|
77
|
+
|
78
|
+
study = study_wrapper.get_study()
|
73
79
|
|
74
80
|
print('\nBest trials:')
|
75
81
|
print(f' Best value (accuracy): {study.best_value:.4f}')
|
@@ -35,10 +35,19 @@ class ConnectRPCClient:
|
|
35
35
|
except requests.exceptions.HTTPError as e:
|
36
36
|
# Connect RPC error format
|
37
37
|
if e.response and e.response.headers.get('content-type', '').startswith('application/json'):
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
try:
|
39
|
+
error_data = e.response.json()
|
40
|
+
# Connect RPC returns error in 'message' field
|
41
|
+
error_msg = error_data.get('message', '')
|
42
|
+
if error_msg:
|
43
|
+
raise RuntimeError(f"Server error: {error_msg}") from e
|
44
|
+
# Fallback to full error data if no message
|
45
|
+
raise RuntimeError(f"Server error: {error_data}") from e
|
46
|
+
except ValueError:
|
47
|
+
# JSON decode failed
|
48
|
+
pass
|
49
|
+
# Fallback to basic HTTP error
|
50
|
+
raise RuntimeError(f"HTTP {e.response.status_code} error: {e.response.text if e.response else str(e)}") from e
|
42
51
|
except requests.exceptions.RequestException as e:
|
43
52
|
raise RuntimeError(f"Request failed: {e}") from e
|
44
53
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: aiauto-client
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.12
|
4
4
|
Summary: AI Auto HPO (Hyperparameter Optimization) Client Library
|
5
5
|
Author-email: AIAuto Team <ainode@zeroone.ai>
|
6
6
|
Project-URL: Homepage, https://dashboard.common.aiauto.pangyo.ainode.ai
|
@@ -73,6 +73,7 @@ for image in aiauto.RUNTIME_IMAGES:
|
|
73
73
|
- 아래 코드 처럼 발급한 token 을 넣어 AIAutoController singleton 객체를 초기화, OptunaWorkspace 를 활성화 시킨다
|
74
74
|
```python
|
75
75
|
import aiauto
|
76
|
+
import time
|
76
77
|
|
77
78
|
ac = aiauto.AIAutoController('<token>')
|
78
79
|
```
|
@@ -83,6 +84,7 @@ study_wrapper = ac.create_study(
|
|
83
84
|
study_name='test',
|
84
85
|
direction='maximize', # or 'minimize'
|
85
86
|
)
|
87
|
+
time.sleep(5)
|
86
88
|
```
|
87
89
|
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
88
90
|
```python
|
@@ -93,6 +95,7 @@ study_wrapper.optimize(
|
|
93
95
|
use_gpu=False,
|
94
96
|
runtime_image=aiauto.RUNTIME_IMAGES[0],
|
95
97
|
)
|
98
|
+
time.sleep(5)
|
96
99
|
```
|
97
100
|
- 종료 됐는지 optuna-dashboard 가 아닌 코드로 확인하는 법
|
98
101
|
```python
|
@@ -132,11 +135,14 @@ def objective(trial: optuna.trial.Trial):
|
|
132
135
|
- 저장한 함수를 import해서 사용
|
133
136
|
```python
|
134
137
|
import aiauto
|
138
|
+
import time
|
135
139
|
from my_objective import objective
|
136
140
|
|
137
141
|
ac = aiauto.AIAutoController('<token>')
|
138
142
|
study = ac.create_study('test', 'minimize')
|
143
|
+
time.sleep(5)
|
139
144
|
study.optimize(objective, n_trials=10, parallelism=2)
|
145
|
+
time.sleep(5)
|
140
146
|
```
|
141
147
|
|
142
148
|
## 빠른 시작
|
@@ -146,6 +152,7 @@ study.optimize(objective, n_trials=10, parallelism=2)
|
|
146
152
|
```python
|
147
153
|
import optuna
|
148
154
|
import aiauto
|
155
|
+
import time
|
149
156
|
|
150
157
|
|
151
158
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -159,6 +166,7 @@ study_wrapper = ac.create_study(
|
|
159
166
|
direction="minimize"
|
160
167
|
# sampler=optuna.samplers.TPESampler(), # optuna 에서 제공하는 sampler 그대로 사용 가능, 참고 https://optuna.readthedocs.io/en/stable/reference/samplers/index.html
|
161
168
|
)
|
169
|
+
time.sleep(5)
|
162
170
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
163
171
|
|
164
172
|
# objective 함수 정의
|
@@ -174,6 +182,7 @@ study_wrapper.optimize(
|
|
174
182
|
n_trials=100,
|
175
183
|
parallelism=4 # 동시 실행 Pod 수
|
176
184
|
)
|
185
|
+
time.sleep(5)
|
177
186
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
178
187
|
```
|
179
188
|
|
@@ -182,6 +191,7 @@ study_wrapper.optimize(
|
|
182
191
|
```python
|
183
192
|
import optuna
|
184
193
|
import aiauto
|
194
|
+
import time
|
185
195
|
|
186
196
|
|
187
197
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -199,6 +209,7 @@ study_wrapper = ac.create_study(
|
|
199
209
|
patience=4,
|
200
210
|
),
|
201
211
|
)
|
212
|
+
time.sleep(5)
|
202
213
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
203
214
|
|
204
215
|
# objective 함수 정의
|
@@ -306,6 +317,7 @@ study_wrapper.optimize(
|
|
306
317
|
use_gpu=True, # GPU 사용
|
307
318
|
requirements_list=['torch', 'torchvision'] # Pod에서 자동 설치
|
308
319
|
)
|
320
|
+
time.sleep(5)
|
309
321
|
```
|
310
322
|
|
311
323
|
### 3. Multi-Objective 최적화 (Accuracy + FLOPS)
|
@@ -313,6 +325,7 @@ study_wrapper.optimize(
|
|
313
325
|
```python
|
314
326
|
import optuna
|
315
327
|
import aiauto
|
328
|
+
import time
|
316
329
|
|
317
330
|
|
318
331
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
@@ -326,6 +339,7 @@ study_wrapper = ac.create_study(
|
|
326
339
|
direction=["minimize", "minimize"], # loss minimize, FLOPS minimize
|
327
340
|
# sampler=optuna.samplers.TPESampler(), # optuna 에서 제공하는 sampler 그대로 사용 가능, 참고 https://optuna.readthedocs.io/en/stable/reference/samplers/index.html
|
328
341
|
)
|
342
|
+
time.sleep(5)
|
329
343
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
330
344
|
|
331
345
|
# objective 함수 정의
|
@@ -434,6 +448,7 @@ study_wrapper.optimize(
|
|
434
448
|
use_gpu=True, # GPU 사용
|
435
449
|
requirements_list=['torch', 'torchvision', 'fvcore'] # Pod에서 자동 설치
|
436
450
|
)
|
451
|
+
time.sleep(5)
|
437
452
|
```
|
438
453
|
|
439
454
|
### 4. Ask/Tell 패턴 및 Optuna 자체의 Study
|
@@ -441,6 +456,7 @@ study_wrapper.optimize(
|
|
441
456
|
```python
|
442
457
|
import optuna
|
443
458
|
import aiauto
|
459
|
+
import time
|
444
460
|
|
445
461
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
446
462
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
@@ -457,6 +473,7 @@ study_wrapper = ac.create_study(
|
|
457
473
|
# patience=4,
|
458
474
|
# )
|
459
475
|
)
|
476
|
+
time.sleep(5)
|
460
477
|
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
461
478
|
|
462
479
|
# 실제 optuna.Study 객체 획득 (로컬에서 ask/tell 가능)
|
@@ -521,10 +538,11 @@ make build push
|
|
521
538
|
|
522
539
|
#### (A) 분산 실행
|
523
540
|
```python
|
524
|
-
import aiauto, optuna
|
541
|
+
import aiauto, optuna, time
|
525
542
|
|
526
543
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
527
544
|
study = controller.create_study('exp1', direction='minimize')
|
545
|
+
time.sleep(5)
|
528
546
|
|
529
547
|
def objective(trial):
|
530
548
|
import numpy as np
|
@@ -537,14 +555,16 @@ n_trials=64,
|
|
537
555
|
parallelism=8,
|
538
556
|
requirements_list=['numpy'],
|
539
557
|
)
|
558
|
+
time.sleep(5)
|
540
559
|
```
|
541
560
|
|
542
561
|
#### (B) ask/tell (실제 optuna.Study 사용)
|
543
562
|
```python
|
544
|
-
import aiauto, optuna
|
563
|
+
import aiauto, optuna, time
|
545
564
|
|
546
565
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
547
566
|
sw = controller.create_study('manual', direction='minimize')
|
567
|
+
time.sleep(5)
|
548
568
|
|
549
569
|
real = sw.get_study() # 실제 optuna.Study 로드 (gRPC: h2c 13000)
|
550
570
|
t = real.ask()
|
@@ -576,7 +596,7 @@ real.tell(t, (x - 2) ** 2)
|
|
576
596
|
|
577
597
|
#### 예시: Sampler/Pruner 그대로 사용
|
578
598
|
```python
|
579
|
-
import optuna, aiauto
|
599
|
+
import optuna, aiauto, time
|
580
600
|
|
581
601
|
controller = aiauto.AIAutoController('aiauto_xxx')
|
582
602
|
study = controller.create_study(
|
@@ -585,6 +605,7 @@ direction='minimize',
|
|
585
605
|
sampler=optuna.samplers.TPESampler(seed=42),
|
586
606
|
pruner=optuna.pruners.MedianPruner(n_startup_trials=5),
|
587
607
|
)
|
608
|
+
time.sleep(5)
|
588
609
|
|
589
610
|
def objective(trial):
|
590
611
|
import numpy as np
|
@@ -592,6 +613,7 @@ lr = trial.suggest_float('lr', 1e-5, 1e-1, log=True)
|
|
592
613
|
return (np.log10(lr) + 2) ** 2
|
593
614
|
|
594
615
|
study.optimize(objective, n_trials=50, parallelism=4)
|
616
|
+
time.sleep(5)
|
595
617
|
```
|
596
618
|
|
597
619
|
#### 예시: get_study() 후 Optuna API 그대로 사용
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|