aiauto-client 0.1.10__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.10 → aiauto_client-0.1.12}/PKG-INFO +48 -26
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/README.md +47 -25
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/examples/example_torch_multiple_objective.py +7 -2
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/examples/example_torch_single_objective.py +7 -2
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/examples/simple_example.py +8 -2
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/pyproject.toml +1 -1
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto/http_client.py +13 -4
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/PKG-INFO +48 -26
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/MANIFEST.in +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/setup.cfg +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto/__init__.py +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto/_config.py +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto/constants.py +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto/core.py +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto/serializer.py +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/SOURCES.txt +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/dependency_links.txt +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/requires.txt +0 -0
- {aiauto_client-0.1.10 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/top_level.txt +0 -0
- {aiauto_client-0.1.10 → 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
|
@@ -68,23 +68,25 @@ for image in aiauto.RUNTIME_IMAGES:
|
|
68
68
|
|
69
69
|
## 실행 흐름
|
70
70
|
### token 발급 # TODO
|
71
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후
|
72
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai/token` 으로 이동하여 aiauto 의 token 을 발급
|
71
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후
|
72
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai/token` 으로 이동하여 aiauto 의 token 을 발급
|
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
|
```
|
79
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
80
|
-
- 아래 코드 처럼 study 를 생성하면 `https://dashboard.aiauto.pangyo.ainode.ai/study` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
80
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
81
|
+
- 아래 코드 처럼 study 를 생성하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
81
82
|
```python
|
82
83
|
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
|
-
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
89
|
+
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
88
90
|
```python
|
89
91
|
study_wrapper.optimize(
|
90
92
|
objective=func_with_parameter_trial,
|
@@ -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,12 +152,13 @@ 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
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
158
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
152
159
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
153
160
|
ac = aiauto.AIAutoController('<token>')
|
154
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
161
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
155
162
|
|
156
163
|
# StudyWrapper 생성
|
157
164
|
study_wrapper = ac.create_study(
|
@@ -159,7 +166,8 @@ 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
|
)
|
162
|
-
|
169
|
+
time.sleep(5)
|
170
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
163
171
|
|
164
172
|
# objective 함수 정의
|
165
173
|
def objective(trial: optuna.trial.Trial):
|
@@ -174,7 +182,8 @@ study_wrapper.optimize(
|
|
174
182
|
n_trials=100,
|
175
183
|
parallelism=4 # 동시 실행 Pod 수
|
176
184
|
)
|
177
|
-
|
185
|
+
time.sleep(5)
|
186
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
178
187
|
```
|
179
188
|
|
180
189
|
### 2. PyTorch 모델 최적화 (Single Objective)
|
@@ -182,12 +191,13 @@ study_wrapper.optimize(
|
|
182
191
|
```python
|
183
192
|
import optuna
|
184
193
|
import aiauto
|
194
|
+
import time
|
185
195
|
|
186
196
|
|
187
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
197
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
188
198
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
189
199
|
ac = aiauto.AIAutoController('<token>')
|
190
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
200
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
191
201
|
|
192
202
|
# StudyWrapper 생성
|
193
203
|
study_wrapper = ac.create_study(
|
@@ -199,7 +209,8 @@ study_wrapper = ac.create_study(
|
|
199
209
|
patience=4,
|
200
210
|
),
|
201
211
|
)
|
202
|
-
|
212
|
+
time.sleep(5)
|
213
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
203
214
|
|
204
215
|
# objective 함수 정의
|
205
216
|
# https://docs.pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 참고
|
@@ -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,12 +325,13 @@ study_wrapper.optimize(
|
|
313
325
|
```python
|
314
326
|
import optuna
|
315
327
|
import aiauto
|
328
|
+
import time
|
316
329
|
|
317
330
|
|
318
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
331
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
319
332
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
320
333
|
ac = aiauto.AIAutoController('<token>')
|
321
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
334
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
322
335
|
|
323
336
|
# StudyWrapper 생성
|
324
337
|
study_wrapper = ac.create_study(
|
@@ -326,7 +339,8 @@ 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
|
)
|
329
|
-
|
342
|
+
time.sleep(5)
|
343
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
330
344
|
|
331
345
|
# objective 함수 정의
|
332
346
|
# https://docs.pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 참고
|
@@ -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,11 +456,12 @@ study_wrapper.optimize(
|
|
441
456
|
```python
|
442
457
|
import optuna
|
443
458
|
import aiauto
|
459
|
+
import time
|
444
460
|
|
445
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
461
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
446
462
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
447
463
|
ac = aiauto.AIAutoController('<token>')
|
448
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
464
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
449
465
|
|
450
466
|
# Study 생성
|
451
467
|
study_wrapper = ac.create_study(
|
@@ -457,7 +473,8 @@ study_wrapper = ac.create_study(
|
|
457
473
|
# patience=4,
|
458
474
|
# )
|
459
475
|
)
|
460
|
-
|
476
|
+
time.sleep(5)
|
477
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
461
478
|
|
462
479
|
# 실제 optuna.Study 객체 획득 (로컬에서 ask/tell 가능)
|
463
480
|
study = study_wrapper.get_study()
|
@@ -474,7 +491,7 @@ ret = (x - 2) ** 2 + (y - 3) ** 2
|
|
474
491
|
|
475
492
|
# 결과 보고
|
476
493
|
study.tell(trial, ret)
|
477
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
494
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
478
495
|
```
|
479
496
|
|
480
497
|
# lib build
|
@@ -495,11 +512,11 @@ make build push
|
|
495
512
|
2) `StudyWrapper.get_study()` → 실제 `optuna.Study` 로드 후 **ask/tell** 직접 사용
|
496
513
|
|
497
514
|
### 2) 네트워크/도메인 규칙 (필수)
|
498
|
-
- **Connect RPC (HTTPS/443)**: `https://api.aiauto.pangyo.ainode.ai`
|
515
|
+
- **Connect RPC (HTTPS/443)**: `https://api.common.aiauto.pangyo.ainode.ai`
|
499
516
|
- **Optuna Storage (gRPC, 평문 h2c/13000)**:
|
500
517
|
`{userID}.journal-grpc-storage-proxy.aiauto.pangyo.ainode.ai:13000`
|
501
518
|
→ **항상 평문(h2c)**. 443/TLS 시도 **금지**.
|
502
|
-
- 대시보드(웹): `https://dashboard.aiauto.pangyo.ainode.ai`
|
519
|
+
- 대시보드(웹): `https://dashboard.common.aiauto.pangyo.ainode.ai`
|
503
520
|
|
504
521
|
### 3) 호출 순서 (결정 트리)
|
505
522
|
1) 컨트롤러 생성: `AIAutoController(token)` → 토큰 검증 & 워크스페이스/엔드포인트 획득
|
@@ -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()
|
@@ -554,7 +574,7 @@ real.tell(t, (x - 2) ** 2)
|
|
554
574
|
|
555
575
|
### 6) 에러 응답 템플릿(자동 응답 가이드)
|
556
576
|
- 초기화/토큰 문제 감지:
|
557
|
-
- “대시보드에서 토큰을 재발급한 뒤 다시 시도하세요: https://dashboard.aiauto.pangyo.ainode.ai”
|
577
|
+
- “대시보드에서 토큰을 재발급한 뒤 다시 시도하세요: https://dashboard.common.aiauto.pangyo.ainode.ai”
|
558
578
|
- `get_study()` 연결 실패(스토리지 준비 전):
|
559
579
|
- “Workspace/Storage가 아직 준비 중일 수 있어요. 잠시 후 다시 시도하거나 대시보드에서 상태를 확인해 주세요.”
|
560
580
|
|
@@ -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 그대로 사용
|
@@ -41,23 +41,25 @@ for image in aiauto.RUNTIME_IMAGES:
|
|
41
41
|
|
42
42
|
## 실행 흐름
|
43
43
|
### token 발급 # TODO
|
44
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후
|
45
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai/token` 으로 이동하여 aiauto 의 token 을 발급
|
44
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후
|
45
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai/token` 으로 이동하여 aiauto 의 token 을 발급
|
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
|
```
|
52
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
53
|
-
- 아래 코드 처럼 study 를 생성하면 `https://dashboard.aiauto.pangyo.ainode.ai/study` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
53
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
54
|
+
- 아래 코드 처럼 study 를 생성하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
54
55
|
```python
|
55
56
|
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
|
-
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
62
|
+
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
61
63
|
```python
|
62
64
|
study_wrapper.optimize(
|
63
65
|
objective=func_with_parameter_trial,
|
@@ -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,12 +125,13 @@ 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
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
131
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
125
132
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
126
133
|
ac = aiauto.AIAutoController('<token>')
|
127
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
134
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
128
135
|
|
129
136
|
# StudyWrapper 생성
|
130
137
|
study_wrapper = ac.create_study(
|
@@ -132,7 +139,8 @@ 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
|
)
|
135
|
-
|
142
|
+
time.sleep(5)
|
143
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
136
144
|
|
137
145
|
# objective 함수 정의
|
138
146
|
def objective(trial: optuna.trial.Trial):
|
@@ -147,7 +155,8 @@ study_wrapper.optimize(
|
|
147
155
|
n_trials=100,
|
148
156
|
parallelism=4 # 동시 실행 Pod 수
|
149
157
|
)
|
150
|
-
|
158
|
+
time.sleep(5)
|
159
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
151
160
|
```
|
152
161
|
|
153
162
|
### 2. PyTorch 모델 최적화 (Single Objective)
|
@@ -155,12 +164,13 @@ study_wrapper.optimize(
|
|
155
164
|
```python
|
156
165
|
import optuna
|
157
166
|
import aiauto
|
167
|
+
import time
|
158
168
|
|
159
169
|
|
160
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
170
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
161
171
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
162
172
|
ac = aiauto.AIAutoController('<token>')
|
163
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
173
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
164
174
|
|
165
175
|
# StudyWrapper 생성
|
166
176
|
study_wrapper = ac.create_study(
|
@@ -172,7 +182,8 @@ study_wrapper = ac.create_study(
|
|
172
182
|
patience=4,
|
173
183
|
),
|
174
184
|
)
|
175
|
-
|
185
|
+
time.sleep(5)
|
186
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
176
187
|
|
177
188
|
# objective 함수 정의
|
178
189
|
# https://docs.pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 참고
|
@@ -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,12 +298,13 @@ study_wrapper.optimize(
|
|
286
298
|
```python
|
287
299
|
import optuna
|
288
300
|
import aiauto
|
301
|
+
import time
|
289
302
|
|
290
303
|
|
291
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
304
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
292
305
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
293
306
|
ac = aiauto.AIAutoController('<token>')
|
294
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
307
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
295
308
|
|
296
309
|
# StudyWrapper 생성
|
297
310
|
study_wrapper = ac.create_study(
|
@@ -299,7 +312,8 @@ 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
|
)
|
302
|
-
|
315
|
+
time.sleep(5)
|
316
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
303
317
|
|
304
318
|
# objective 함수 정의
|
305
319
|
# https://docs.pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 참고
|
@@ -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,11 +429,12 @@ study_wrapper.optimize(
|
|
414
429
|
```python
|
415
430
|
import optuna
|
416
431
|
import aiauto
|
432
|
+
import time
|
417
433
|
|
418
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
434
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
419
435
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
420
436
|
ac = aiauto.AIAutoController('<token>')
|
421
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
437
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
422
438
|
|
423
439
|
# Study 생성
|
424
440
|
study_wrapper = ac.create_study(
|
@@ -430,7 +446,8 @@ study_wrapper = ac.create_study(
|
|
430
446
|
# patience=4,
|
431
447
|
# )
|
432
448
|
)
|
433
|
-
|
449
|
+
time.sleep(5)
|
450
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
434
451
|
|
435
452
|
# 실제 optuna.Study 객체 획득 (로컬에서 ask/tell 가능)
|
436
453
|
study = study_wrapper.get_study()
|
@@ -447,7 +464,7 @@ ret = (x - 2) ** 2 + (y - 3) ** 2
|
|
447
464
|
|
448
465
|
# 결과 보고
|
449
466
|
study.tell(trial, ret)
|
450
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
467
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
451
468
|
```
|
452
469
|
|
453
470
|
# lib build
|
@@ -468,11 +485,11 @@ make build push
|
|
468
485
|
2) `StudyWrapper.get_study()` → 실제 `optuna.Study` 로드 후 **ask/tell** 직접 사용
|
469
486
|
|
470
487
|
### 2) 네트워크/도메인 규칙 (필수)
|
471
|
-
- **Connect RPC (HTTPS/443)**: `https://api.aiauto.pangyo.ainode.ai`
|
488
|
+
- **Connect RPC (HTTPS/443)**: `https://api.common.aiauto.pangyo.ainode.ai`
|
472
489
|
- **Optuna Storage (gRPC, 평문 h2c/13000)**:
|
473
490
|
`{userID}.journal-grpc-storage-proxy.aiauto.pangyo.ainode.ai:13000`
|
474
491
|
→ **항상 평문(h2c)**. 443/TLS 시도 **금지**.
|
475
|
-
- 대시보드(웹): `https://dashboard.aiauto.pangyo.ainode.ai`
|
492
|
+
- 대시보드(웹): `https://dashboard.common.aiauto.pangyo.ainode.ai`
|
476
493
|
|
477
494
|
### 3) 호출 순서 (결정 트리)
|
478
495
|
1) 컨트롤러 생성: `AIAutoController(token)` → 토큰 검증 & 워크스페이스/엔드포인트 획득
|
@@ -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()
|
@@ -527,7 +547,7 @@ real.tell(t, (x - 2) ** 2)
|
|
527
547
|
|
528
548
|
### 6) 에러 응답 템플릿(자동 응답 가이드)
|
529
549
|
- 초기화/토큰 문제 감지:
|
530
|
-
- “대시보드에서 토큰을 재발급한 뒤 다시 시도하세요: https://dashboard.aiauto.pangyo.ainode.ai”
|
550
|
+
- “대시보드에서 토큰을 재발급한 뒤 다시 시도하세요: https://dashboard.common.aiauto.pangyo.ainode.ai”
|
531
551
|
- `get_study()` 연결 실패(스토리지 준비 전):
|
532
552
|
- “Workspace/Storage가 아직 준비 중일 수 있어요. 잠시 후 다시 시도하거나 대시보드에서 상태를 확인해 주세요.”
|
533
553
|
|
@@ -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
|
@@ -68,23 +68,25 @@ for image in aiauto.RUNTIME_IMAGES:
|
|
68
68
|
|
69
69
|
## 실행 흐름
|
70
70
|
### token 발급 # TODO
|
71
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후
|
72
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai/token` 으로 이동하여 aiauto 의 token 을 발급
|
71
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후
|
72
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai/token` 으로 이동하여 aiauto 의 token 을 발급
|
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
|
```
|
79
|
-
- `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
80
|
-
- 아래 코드 처럼 study 를 생성하면 `https://dashboard.aiauto.pangyo.ainode.ai/study` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
80
|
+
- `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
81
|
+
- 아래 코드 처럼 study 를 생성하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
81
82
|
```python
|
82
83
|
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
|
-
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
89
|
+
- 아래 코드 처럼 생성한 study 애서 objective 함수를 작성하여 넘겨주면 optimize 를 호출하면 `https://dashboard.common.aiauto.pangyo.ainode.ai/trialbatch` 에서 확인할 수 있고 optuna-dashboard 링크에서도 확인 가능
|
88
90
|
```python
|
89
91
|
study_wrapper.optimize(
|
90
92
|
objective=func_with_parameter_trial,
|
@@ -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,12 +152,13 @@ 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
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
158
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
152
159
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
153
160
|
ac = aiauto.AIAutoController('<token>')
|
154
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
161
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
155
162
|
|
156
163
|
# StudyWrapper 생성
|
157
164
|
study_wrapper = ac.create_study(
|
@@ -159,7 +166,8 @@ 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
|
)
|
162
|
-
|
169
|
+
time.sleep(5)
|
170
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
163
171
|
|
164
172
|
# objective 함수 정의
|
165
173
|
def objective(trial: optuna.trial.Trial):
|
@@ -174,7 +182,8 @@ study_wrapper.optimize(
|
|
174
182
|
n_trials=100,
|
175
183
|
parallelism=4 # 동시 실행 Pod 수
|
176
184
|
)
|
177
|
-
|
185
|
+
time.sleep(5)
|
186
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
178
187
|
```
|
179
188
|
|
180
189
|
### 2. PyTorch 모델 최적화 (Single Objective)
|
@@ -182,12 +191,13 @@ study_wrapper.optimize(
|
|
182
191
|
```python
|
183
192
|
import optuna
|
184
193
|
import aiauto
|
194
|
+
import time
|
185
195
|
|
186
196
|
|
187
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
197
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
188
198
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
189
199
|
ac = aiauto.AIAutoController('<token>')
|
190
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
200
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
191
201
|
|
192
202
|
# StudyWrapper 생성
|
193
203
|
study_wrapper = ac.create_study(
|
@@ -199,7 +209,8 @@ study_wrapper = ac.create_study(
|
|
199
209
|
patience=4,
|
200
210
|
),
|
201
211
|
)
|
202
|
-
|
212
|
+
time.sleep(5)
|
213
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
203
214
|
|
204
215
|
# objective 함수 정의
|
205
216
|
# https://docs.pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 참고
|
@@ -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,12 +325,13 @@ study_wrapper.optimize(
|
|
313
325
|
```python
|
314
326
|
import optuna
|
315
327
|
import aiauto
|
328
|
+
import time
|
316
329
|
|
317
330
|
|
318
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
331
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
319
332
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
320
333
|
ac = aiauto.AIAutoController('<token>')
|
321
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
334
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
322
335
|
|
323
336
|
# StudyWrapper 생성
|
324
337
|
study_wrapper = ac.create_study(
|
@@ -326,7 +339,8 @@ 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
|
)
|
329
|
-
|
342
|
+
time.sleep(5)
|
343
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
330
344
|
|
331
345
|
# objective 함수 정의
|
332
346
|
# https://docs.pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html 참고
|
@@ -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,11 +456,12 @@ study_wrapper.optimize(
|
|
441
456
|
```python
|
442
457
|
import optuna
|
443
458
|
import aiauto
|
459
|
+
import time
|
444
460
|
|
445
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
461
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai` 에 접속하여 ainode 에 로그인 한 후 aiauto 의 token 을 발급
|
446
462
|
# AIAutoController singleton 객체를 초기화 하여, OptunaWorkspace 를 활성화 시킨다 (토큰은 한 번만 설정)
|
447
463
|
ac = aiauto.AIAutoController('<token>')
|
448
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
464
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 OptunaWorkspace 와 optuna-dashboard 링크를 확인할 수 있음
|
449
465
|
|
450
466
|
# Study 생성
|
451
467
|
study_wrapper = ac.create_study(
|
@@ -457,7 +473,8 @@ study_wrapper = ac.create_study(
|
|
457
473
|
# patience=4,
|
458
474
|
# )
|
459
475
|
)
|
460
|
-
|
476
|
+
time.sleep(5)
|
477
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/study` 에서 생성된 study 확인 가능
|
461
478
|
|
462
479
|
# 실제 optuna.Study 객체 획득 (로컬에서 ask/tell 가능)
|
463
480
|
study = study_wrapper.get_study()
|
@@ -474,7 +491,7 @@ ret = (x - 2) ** 2 + (y - 3) ** 2
|
|
474
491
|
|
475
492
|
# 결과 보고
|
476
493
|
study.tell(trial, ret)
|
477
|
-
# `https://dashboard.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
494
|
+
# `https://dashboard.common.aiauto.pangyo.ainode.ai/workspace` 에서 생성된 optuna-dashboard 링크에서 결과 확인 가능
|
478
495
|
```
|
479
496
|
|
480
497
|
# lib build
|
@@ -495,11 +512,11 @@ make build push
|
|
495
512
|
2) `StudyWrapper.get_study()` → 실제 `optuna.Study` 로드 후 **ask/tell** 직접 사용
|
496
513
|
|
497
514
|
### 2) 네트워크/도메인 규칙 (필수)
|
498
|
-
- **Connect RPC (HTTPS/443)**: `https://api.aiauto.pangyo.ainode.ai`
|
515
|
+
- **Connect RPC (HTTPS/443)**: `https://api.common.aiauto.pangyo.ainode.ai`
|
499
516
|
- **Optuna Storage (gRPC, 평문 h2c/13000)**:
|
500
517
|
`{userID}.journal-grpc-storage-proxy.aiauto.pangyo.ainode.ai:13000`
|
501
518
|
→ **항상 평문(h2c)**. 443/TLS 시도 **금지**.
|
502
|
-
- 대시보드(웹): `https://dashboard.aiauto.pangyo.ainode.ai`
|
519
|
+
- 대시보드(웹): `https://dashboard.common.aiauto.pangyo.ainode.ai`
|
503
520
|
|
504
521
|
### 3) 호출 순서 (결정 트리)
|
505
522
|
1) 컨트롤러 생성: `AIAutoController(token)` → 토큰 검증 & 워크스페이스/엔드포인트 획득
|
@@ -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()
|
@@ -554,7 +574,7 @@ real.tell(t, (x - 2) ** 2)
|
|
554
574
|
|
555
575
|
### 6) 에러 응답 템플릿(자동 응답 가이드)
|
556
576
|
- 초기화/토큰 문제 감지:
|
557
|
-
- “대시보드에서 토큰을 재발급한 뒤 다시 시도하세요: https://dashboard.aiauto.pangyo.ainode.ai”
|
577
|
+
- “대시보드에서 토큰을 재발급한 뒤 다시 시도하세요: https://dashboard.common.aiauto.pangyo.ainode.ai”
|
558
578
|
- `get_study()` 연결 실패(스토리지 준비 전):
|
559
579
|
- “Workspace/Storage가 아직 준비 중일 수 있어요. 잠시 후 다시 시도하거나 대시보드에서 상태를 확인해 주세요.”
|
560
580
|
|
@@ -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.10 → 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
|