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.
Files changed (20) hide show
  1. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/PKG-INFO +26 -4
  2. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/README.md +25 -3
  3. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/examples/example_torch_multiple_objective.py +7 -2
  4. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/examples/example_torch_single_objective.py +7 -2
  5. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/examples/simple_example.py +8 -2
  6. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/pyproject.toml +1 -1
  7. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/http_client.py +13 -4
  8. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/PKG-INFO +26 -4
  9. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/MANIFEST.in +0 -0
  10. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/setup.cfg +0 -0
  11. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/__init__.py +0 -0
  12. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/_config.py +0 -0
  13. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/constants.py +0 -0
  14. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/core.py +0 -0
  15. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto/serializer.py +0 -0
  16. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/SOURCES.txt +0 -0
  17. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/dependency_links.txt +0 -0
  18. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/requires.txt +0 -0
  19. {aiauto_client-0.1.11 → aiauto_client-0.1.12}/src/aiauto_client.egg-info/top_level.txt +0 -0
  20. {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.11
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
- study = ac.create_study(
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
- study.optimize(
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
- study = ac.create_study(
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
- study.optimize(
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
- study = ac.create_study(
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
- study.optimize(
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}')
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aiauto-client"
7
- version = "0.1.11"
7
+ version = "0.1.12"
8
8
  description = "AI Auto HPO (Hyperparameter Optimization) Client Library"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -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
- error_data = e.response.json()
39
- error_msg = error_data.get('message', str(e))
40
- raise RuntimeError(f"RPC error: {error_msg}") from e
41
- raise RuntimeError(f"HTTP error: {e}") from e
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.11
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