gcube-cli 0.1.0__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.
- gcube_cli-0.1.0/PKG-INFO +505 -0
- gcube_cli-0.1.0/README.md +483 -0
- gcube_cli-0.1.0/pyproject.toml +56 -0
- gcube_cli-0.1.0/setup.cfg +4 -0
- gcube_cli-0.1.0/src/gcube_cli/__init__.py +6 -0
- gcube_cli-0.1.0/src/gcube_cli/__main__.py +4 -0
- gcube_cli-0.1.0/src/gcube_cli/_group.py +8 -0
- gcube_cli-0.1.0/src/gcube_cli/api/__init__.py +16 -0
- gcube_cli-0.1.0/src/gcube_cli/api/client.py +225 -0
- gcube_cli-0.1.0/src/gcube_cli/api/credential.py +68 -0
- gcube_cli-0.1.0/src/gcube_cli/api/logs.py +52 -0
- gcube_cli-0.1.0/src/gcube_cli/api/point.py +173 -0
- gcube_cli-0.1.0/src/gcube_cli/api/resource.py +108 -0
- gcube_cli-0.1.0/src/gcube_cli/api/workload.py +409 -0
- gcube_cli-0.1.0/src/gcube_cli/cli.py +87 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/__init__.py +0 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/configure.py +168 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/credential.py +173 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/gpu.py +129 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/point.py +190 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/resource.py +98 -0
- gcube_cli-0.1.0/src/gcube_cli/commands/workload.py +1020 -0
- gcube_cli-0.1.0/src/gcube_cli/config/__init__.py +3 -0
- gcube_cli-0.1.0/src/gcube_cli/config/config.py +86 -0
- gcube_cli-0.1.0/src/gcube_cli/output/__init__.py +39 -0
- gcube_cli-0.1.0/src/gcube_cli/output/json_out.py +10 -0
- gcube_cli-0.1.0/src/gcube_cli/output/table.py +40 -0
- gcube_cli-0.1.0/src/gcube_cli/output/yaml_out.py +11 -0
- gcube_cli-0.1.0/src/gcube_cli.egg-info/PKG-INFO +505 -0
- gcube_cli-0.1.0/src/gcube_cli.egg-info/SOURCES.txt +45 -0
- gcube_cli-0.1.0/src/gcube_cli.egg-info/dependency_links.txt +1 -0
- gcube_cli-0.1.0/src/gcube_cli.egg-info/entry_points.txt +2 -0
- gcube_cli-0.1.0/src/gcube_cli.egg-info/requires.txt +13 -0
- gcube_cli-0.1.0/src/gcube_cli.egg-info/top_level.txt +1 -0
- gcube_cli-0.1.0/tests/test_api_client.py +243 -0
- gcube_cli-0.1.0/tests/test_cli.py +74 -0
- gcube_cli-0.1.0/tests/test_configure.py +444 -0
- gcube_cli-0.1.0/tests/test_credential.py +392 -0
- gcube_cli-0.1.0/tests/test_gpu.py +371 -0
- gcube_cli-0.1.0/tests/test_output.py +146 -0
- gcube_cli-0.1.0/tests/test_point.py +515 -0
- gcube_cli-0.1.0/tests/test_resource.py +287 -0
- gcube_cli-0.1.0/tests/test_workload.py +508 -0
- gcube_cli-0.1.0/tests/test_workload_commands.py +530 -0
- gcube_cli-0.1.0/tests/test_workload_logs.py +371 -0
- gcube_cli-0.1.0/tests/test_workload_register.py +1136 -0
- gcube_cli-0.1.0/tests/test_workload_update.py +522 -0
gcube_cli-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gcube-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Official command-line tool for the gcube AI GPU cloud platform
|
|
5
|
+
Author-email: Data Alliance <support@data-alliance.com>
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://gcube.ai
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
Requires-Dist: click>=8.1
|
|
11
|
+
Requires-Dist: httpx>=0.27
|
|
12
|
+
Requires-Dist: rich>=13.0
|
|
13
|
+
Requires-Dist: pyyaml>=6.0
|
|
14
|
+
Requires-Dist: websockets>=13.0
|
|
15
|
+
Provides-Extra: dev
|
|
16
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
17
|
+
Requires-Dist: pytest-httpx>=0.30; extra == "dev"
|
|
18
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
19
|
+
Requires-Dist: ruff>=0.4; extra == "dev"
|
|
20
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
21
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
22
|
+
|
|
23
|
+
# gcube CLI
|
|
24
|
+
|
|
25
|
+
gcube 플랫폼(AI GPU 클라우드) 공식 커맨드라인 도구.
|
|
26
|
+
브라우저 없이 터미널만으로 GPU 워크로드를 등록하고, 리소스를 모니터링하고, 사용자를 관리한다.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Overview
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
gcube <service> <operation> [options]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`gcube`는 [gcube 플랫폼](https://gcube.ai)의 REST API를 직접 호출하는 Python CLI다.
|
|
37
|
+
|
|
38
|
+
| 특징 | 설명 |
|
|
39
|
+
|---|---|
|
|
40
|
+
| pip 설치 | `pip install gcube-cli`로 설치, Python 3.10+ |
|
|
41
|
+
| AWS CLI 스타일 | `gcube <service> <operation>` 구조, `--output table\|json\|yaml` |
|
|
42
|
+
| 웹 토큰 인증 | gcube 웹 프론트에서 토큰 발급 후 CLI에 설정 |
|
|
43
|
+
| 주요 의존성 | click · httpx · rich · pyyaml |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Installation
|
|
48
|
+
|
|
49
|
+
### pip 설치 (권장)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pip install gcube-cli
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 소스 설치
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git clone https://github.com/data-alliance/gcube-cli.git
|
|
59
|
+
cd gcube-cli
|
|
60
|
+
pip install -e ".[dev]"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Quick Start
|
|
66
|
+
|
|
67
|
+
핵심 워크플로우를 4개 명령어로 완료한다.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# 1. 토큰 설정 (gcube 웹 프론트에서 복사한 토큰)
|
|
71
|
+
gcube configure set --token "eyJ..."
|
|
72
|
+
|
|
73
|
+
# 2. GPU 워크로드 등록
|
|
74
|
+
gcube workload register -f workload.yaml
|
|
75
|
+
|
|
76
|
+
# 3. 상태 확인
|
|
77
|
+
gcube workload list
|
|
78
|
+
|
|
79
|
+
# 4. 로그 조회
|
|
80
|
+
gcube workload logs my-train-job
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Configuration
|
|
86
|
+
|
|
87
|
+
### 토큰 발급 및 설정
|
|
88
|
+
|
|
89
|
+
1. [gcube 웹 프론트](https://gcube.ai)에 로그인
|
|
90
|
+
2. "API 토큰 발급" 메뉴에서 토큰 복사
|
|
91
|
+
3. CLI에서 토큰 설정:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
gcube configure set --token "eyJ..."
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 설정 파일
|
|
98
|
+
|
|
99
|
+
`gcube configure` 이후 `~/.gcube/config.yaml`에 자동 생성된다.
|
|
100
|
+
|
|
101
|
+
```yaml
|
|
102
|
+
platform_url: https://console.gcube.ai
|
|
103
|
+
ws_url: wss://console.gcube.ai:61443
|
|
104
|
+
auth:
|
|
105
|
+
access_token: "eyJ..."
|
|
106
|
+
expires_at: "2026-04-03T10:00:00Z"
|
|
107
|
+
output: table # table | json | yaml
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Commands
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
gcube configure # 대화형 설정
|
|
114
|
+
gcube configure set --token <token> # 토큰 설정
|
|
115
|
+
gcube configure set --platform-url <url> # 플랫폼 URL 설정
|
|
116
|
+
gcube configure set --ws-url <url> # WebSocket URL 설정 (로그 스트리밍용)
|
|
117
|
+
gcube configure set --output <format> # 기본 출력 형식 설정
|
|
118
|
+
gcube configure get <key> # 설정값 조회 (token, platform-url, ws-url, output)
|
|
119
|
+
gcube configure status # 현재 설정 및 토큰 유효 여부 표시
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 환경변수
|
|
123
|
+
|
|
124
|
+
환경변수는 설정 파일보다 우선 적용된다.
|
|
125
|
+
|
|
126
|
+
| 환경변수 | 설명 | 예시 |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| `GCUBE_PLATFORM_URL` | 플랫폼 Base URL | `https://gcube.ai` |
|
|
129
|
+
| `GCUBE_ACCESS_TOKEN` | Bearer 토큰 (CI/CD용) | `eyJ...` |
|
|
130
|
+
| `GCUBE_OUTPUT` | 기본 출력 형식 | `json` |
|
|
131
|
+
| `GCUBE_CONFIG` | 설정 파일 경로 override | `/etc/gcube/config.yaml` |
|
|
132
|
+
|
|
133
|
+
### 다중 프로파일
|
|
134
|
+
|
|
135
|
+
`--profile` 플래그로 여러 플랫폼 환경(dev/prod 등)을 전환한다.
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# 개발 환경 토큰 설정
|
|
139
|
+
gcube configure set --token "eyJ..." --platform-url https://dev.gcube.ai --profile dev
|
|
140
|
+
|
|
141
|
+
# dev 프로파일로 명령 실행
|
|
142
|
+
gcube workload list --profile dev
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
프로파일별 설정은 `~/.gcube/profiles/<profile>/config.yaml`에 저장된다.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Command Reference
|
|
150
|
+
|
|
151
|
+
### Workload
|
|
152
|
+
|
|
153
|
+
GPU 워크로드 수명주기를 관리한다.
|
|
154
|
+
|
|
155
|
+
| 명령 | 설명 |
|
|
156
|
+
|---|---|
|
|
157
|
+
| `gcube workload register -f <yaml>` | YAML 파일로 워크로드 등록 |
|
|
158
|
+
| `gcube workload register --image <img> ...` | 인라인 플래그로 워크로드 등록 |
|
|
159
|
+
| `gcube workload update <ser> -f <yaml>` | 중지된 워크로드 수정 |
|
|
160
|
+
| `gcube workload list` | 워크로드 목록 조회 |
|
|
161
|
+
| `gcube workload describe <name>` | 워크로드 상세 조회 |
|
|
162
|
+
| `gcube workload start <name>` | 워크로드 시작 |
|
|
163
|
+
| `gcube workload stop <name>` | 워크로드 중지 |
|
|
164
|
+
| `gcube workload delete <name>` | 워크로드 삭제 |
|
|
165
|
+
| `gcube workload logs <ser>` | 컨테이너 로그 실시간 스트리밍 (WebSocket) |
|
|
166
|
+
| `gcube workload logs <ser> --pod <idx>` | 특정 pod 로그 스트리밍 |
|
|
167
|
+
| `gcube workload logs <ser> --pod <idx> --container <idx>` | 특정 컨테이너 로그 스트리밍 |
|
|
168
|
+
| `gcube workload pods <name>` | Pod 목록 조회 |
|
|
169
|
+
|
|
170
|
+
**주요 플래그**
|
|
171
|
+
|
|
172
|
+
| 플래그 | 설명 | 기본값 |
|
|
173
|
+
|---|---|---|
|
|
174
|
+
| `-f, --file <path>` | 워크로드 YAML 파일 경로 | — |
|
|
175
|
+
| `--image <image>` | 컨테이너 이미지 | — |
|
|
176
|
+
| `--gpu <code>` | GPU 코드 (예: `029`, `gcube gpu list`의 CODE 컬럼) | — |
|
|
177
|
+
| `--cuda <version>` | CUDA 버전 코드 | — |
|
|
178
|
+
| `--category <type>` | 워크로드 유형: `infer\|learn` | — |
|
|
179
|
+
| `--owner <email>` | 워크로드 소유자 (list 필터) | — |
|
|
180
|
+
| `--container <name>` | 컨테이너명 (logs용) | — |
|
|
181
|
+
| `--backend astrago` | AstraGo 백엔드 사용 | — |
|
|
182
|
+
| `--namespace gai` | GAI 네임스페이스 사용 | — |
|
|
183
|
+
|
|
184
|
+
**CUDA 버전 코드** (형식: major×1000 + minor×10)
|
|
185
|
+
|
|
186
|
+
| 코드 | CUDA 버전 |
|
|
187
|
+
|---|---|
|
|
188
|
+
| `12000` | 12.0 |
|
|
189
|
+
| `12020` | 12.2 |
|
|
190
|
+
| `12030` | 12.3 |
|
|
191
|
+
| `12040` | 12.4 |
|
|
192
|
+
| `12050` | 12.5 |
|
|
193
|
+
| `12060` | 12.6 |
|
|
194
|
+
| `12080` | 12.8 |
|
|
195
|
+
| `12090` | 12.9 |
|
|
196
|
+
| `13000` | 13.0 |
|
|
197
|
+
|
|
198
|
+
**워크로드 YAML 형식** (`register -f` / `update -f` 공통)
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
# workload.yaml
|
|
202
|
+
description: "My ML training job" # 필수, 2-80자
|
|
203
|
+
cuda: "12020" # CUDA 버전 코드 (선택)
|
|
204
|
+
sharedMemory: 1 # GB
|
|
205
|
+
|
|
206
|
+
containers:
|
|
207
|
+
- containerImage: "pytorch/pytorch:2.0" # 필수
|
|
208
|
+
repo: docker.io
|
|
209
|
+
port: 0 # 0 = 자동 감지
|
|
210
|
+
maxConnection: 4
|
|
211
|
+
containerCommand: "python train.py"
|
|
212
|
+
isCredential: false
|
|
213
|
+
containerEnvs:
|
|
214
|
+
- EPOCHS: "100"
|
|
215
|
+
- BATCH_SIZE: "32"
|
|
216
|
+
|
|
217
|
+
gpuSpecs:
|
|
218
|
+
- gpuCode: "029" # 필수 — 'gcube gpu list'의 CODE 컬럼 값
|
|
219
|
+
# 레플리카 추가: 항목 반복
|
|
220
|
+
# - gpuCode: "029"
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
> `gcube workload register --skeleton` 으로 빈 템플릿을 출력할 수 있습니다.
|
|
224
|
+
> `gcube workload update <ser> --skeleton > workload.yaml` 으로 현재 워크로드 설정을 내보낸 후 gpuCode를 채워 `-f`로 전달합니다.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
### GPU
|
|
229
|
+
|
|
230
|
+
사용 가능한 GPU 목록과 스펙·가격을 조회한다.
|
|
231
|
+
|
|
232
|
+
| 명령 | 설명 |
|
|
233
|
+
|---|---|
|
|
234
|
+
| `gcube gpu list` | 가용 GPU 목록 (CODE·스펙·시간당 가격 범위) |
|
|
235
|
+
| `gcube gpu list --all` | 전체 GPU 목록 (비가용 포함, AVAIL 컬럼 표시) |
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
gcube gpu list # 가용 GPU만 (CODE 포함)
|
|
239
|
+
gcube gpu list --all # 전체 (비가용 포함)
|
|
240
|
+
gcube -o json gpu list # JSON 출력
|
|
241
|
+
gcube -o yaml gpu list # YAML 출력
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
> CODE는 API 응답 순서 기반 3자리 순번(001, 002, ...)이며, 워크로드 등록 시 GPU 특정에 사용된다.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### Resource
|
|
249
|
+
|
|
250
|
+
워크로드의 CPU·GPU·메모리 사용량을 조회한다. workload 이름을 입력하면 내부적으로 pod를 resolve하여 리소스를 조회한다.
|
|
251
|
+
|
|
252
|
+
| 명령 | 설명 |
|
|
253
|
+
|---|---|
|
|
254
|
+
| `gcube resource workload <name>` | 워크로드 리소스 사용량 (시간 평균) |
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
### Point
|
|
259
|
+
|
|
260
|
+
포인트 잔액과 일별 지출 내역을 조회한다.
|
|
261
|
+
|
|
262
|
+
| 명령 | 설명 |
|
|
263
|
+
|---|---|
|
|
264
|
+
| `gcube point status` | 포인트 현황 (잔액·충전·지출 요약, 잔액 부족 경고) |
|
|
265
|
+
| `gcube point spending` | 당월 일별 지출 내역 |
|
|
266
|
+
| `gcube point spending --month 2026-03` | 특정 월 일별 지출 내역 |
|
|
267
|
+
| `gcube point spending --workload <ser>` | 특정 워크로드 지출 필터 |
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
### User
|
|
272
|
+
|
|
273
|
+
사용자 계정과 크레덴셜을 관리한다.
|
|
274
|
+
|
|
275
|
+
| 명령 | 설명 |
|
|
276
|
+
|---|---|
|
|
277
|
+
| `gcube user list [--keyword <search>]` | 사용자 목록 조회 |
|
|
278
|
+
| `gcube user describe <email>` | 사용자 상세 조회 |
|
|
279
|
+
| `gcube user create --email <e> --name <n> [--role <r>]` | 사용자 생성 |
|
|
280
|
+
| `gcube user update <email> [--name <n>]` | 사용자 정보 수정 |
|
|
281
|
+
| `gcube user delete <email>` | 사용자 삭제 |
|
|
282
|
+
| `gcube user credentials list <email>` | 크레덴셜 목록 |
|
|
283
|
+
| `gcube user credentials create <email> --name <n>` | 크레덴셜 생성 |
|
|
284
|
+
| `gcube user credentials delete <email> --cred-id <id>` | 크레덴셜 삭제 |
|
|
285
|
+
| `gcube user token <email>` | 플랫폼 토큰 발급/조회 |
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Output Formats
|
|
290
|
+
|
|
291
|
+
`--output` 플래그(또는 `GCUBE_OUTPUT` 환경변수)로 출력 형식을 선택한다.
|
|
292
|
+
|
|
293
|
+
### table (기본값)
|
|
294
|
+
|
|
295
|
+
```
|
|
296
|
+
$ gcube workload list
|
|
297
|
+
|
|
298
|
+
NAME CATEGORY TARGET GPU GPU COUNT STATE
|
|
299
|
+
my-train-job learn any RTX4090 2 running
|
|
300
|
+
my-infer-svc infer svr A100 1 stopped
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### json
|
|
304
|
+
|
|
305
|
+
```
|
|
306
|
+
$ gcube -o json workload list
|
|
307
|
+
|
|
308
|
+
[
|
|
309
|
+
{"ser":"abc123","owner":"user@example.com","category":"learn","gpu":"RTX4090","gpuCount":2,"state":"running"},
|
|
310
|
+
{"ser":"def456","owner":"admin@example.com","category":"infer","gpu":"A100","gpuCount":1,"state":"stopped"}
|
|
311
|
+
]
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### yaml
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
$ gcube -o yaml workload list
|
|
318
|
+
|
|
319
|
+
- ser: abc123
|
|
320
|
+
owner: user@example.com
|
|
321
|
+
category: learn
|
|
322
|
+
gpu: RTX4090
|
|
323
|
+
gpuCount: 2
|
|
324
|
+
state: running
|
|
325
|
+
- ser: def456
|
|
326
|
+
owner: admin@example.com
|
|
327
|
+
category: infer
|
|
328
|
+
gpu: A100
|
|
329
|
+
gpuCount: 1
|
|
330
|
+
state: stopped
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Global Options
|
|
336
|
+
|
|
337
|
+
모든 명령에서 사용 가능한 플래그.
|
|
338
|
+
|
|
339
|
+
| 플래그 | 설명 | 기본값 |
|
|
340
|
+
|---|---|---|
|
|
341
|
+
| `--platform-url <url>` | gcube 플랫폼 Base URL | `config.yaml` 값 |
|
|
342
|
+
| `--output <format>` | 출력 형식: `table\|json\|yaml` | `table` |
|
|
343
|
+
| `--profile <name>` | 사용할 프로파일 이름 | `default` |
|
|
344
|
+
| `--debug` | HTTP 요청/응답 상세 출력 | `false` |
|
|
345
|
+
| `--help`, `-h` | 도움말 출력 | — |
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Exit Codes
|
|
350
|
+
|
|
351
|
+
| 코드 | 의미 | 예시 |
|
|
352
|
+
|---|---|---|
|
|
353
|
+
| `0` | 성공 | 정상 출력 |
|
|
354
|
+
| `1` | 잘못된 인수 또는 플래그 | 필수 플래그 누락 |
|
|
355
|
+
| `2` | gcube API 오류 | `API Error [NOT_FOUND]: workload not found` |
|
|
356
|
+
| `3` | 인증 실패 또는 토큰 만료 | `Token expired or invalid. Please get a new token from https://gcube.ai` |
|
|
357
|
+
| `4` | 네트워크 오류 | `Cannot connect to https://gcube.ai. Check network.` |
|
|
358
|
+
|
|
359
|
+
스크립트에서 활용:
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
gcube workload start my-job
|
|
363
|
+
if [ $? -eq 3 ]; then
|
|
364
|
+
echo "Token expired. Please get a new token from https://gcube.ai"
|
|
365
|
+
echo "Then run: gcube configure set --token <new-token>"
|
|
366
|
+
fi
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Environment Variables
|
|
372
|
+
|
|
373
|
+
| 변수 | 설명 |
|
|
374
|
+
|---|---|
|
|
375
|
+
| `GCUBE_PLATFORM_URL` | 플랫폼 Base URL (`--platform-url` override) |
|
|
376
|
+
| `GCUBE_ACCESS_TOKEN` | Bearer 토큰 직접 지정 (CI/CD 환경) |
|
|
377
|
+
| `GCUBE_OUTPUT` | 기본 출력 형식 (`--output` override) |
|
|
378
|
+
| `GCUBE_PROFILE` | 기본 프로파일 이름 (`--profile` override) |
|
|
379
|
+
| `GCUBE_CONFIG` | 설정 파일 경로 override |
|
|
380
|
+
| `GCUBE_DEBUG` | `1` 로 설정 시 `--debug` 활성화 |
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## Examples
|
|
385
|
+
|
|
386
|
+
### 토큰 설정
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# gcube 웹 프론트에서 복사한 토큰 설정
|
|
390
|
+
gcube configure set --token "eyJ..."
|
|
391
|
+
|
|
392
|
+
# 설정 상태 확인
|
|
393
|
+
gcube configure status
|
|
394
|
+
|
|
395
|
+
# 대화형 설정 (플랫폼 URL, 토큰, 출력 형식을 순서대로 입력)
|
|
396
|
+
gcube configure
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### 워크로드 등록 및 관리
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
# YAML 파일로 학습 잡 등록
|
|
403
|
+
gcube workload register -f train.yaml
|
|
404
|
+
|
|
405
|
+
# 인라인 플래그로 인퍼런스 서비스 등록 (GPU CODE는 gcube gpu list에서 확인)
|
|
406
|
+
gcube workload register \
|
|
407
|
+
--image pytorch/pytorch:2.0-cuda12.0 \
|
|
408
|
+
--gpu 029 \
|
|
409
|
+
--cuda 12020 \
|
|
410
|
+
--category infer
|
|
411
|
+
|
|
412
|
+
# 내 워크로드만 조회
|
|
413
|
+
gcube workload list --owner me@example.com
|
|
414
|
+
|
|
415
|
+
# 특정 워크로드 상세 + JSON 출력
|
|
416
|
+
gcube -o json workload describe my-train-job
|
|
417
|
+
|
|
418
|
+
# 실시간 로그 스트리밍 (단일 pod/컨테이너)
|
|
419
|
+
gcube workload logs 2041
|
|
420
|
+
|
|
421
|
+
# 멀티 pod/컨테이너 — 목록 확인 후 지정
|
|
422
|
+
gcube workload logs 2095
|
|
423
|
+
gcube workload logs 2095 --pod 0 --container 1
|
|
424
|
+
|
|
425
|
+
# 워크로드 중지 후 삭제
|
|
426
|
+
gcube workload stop my-train-job
|
|
427
|
+
gcube workload delete my-train-job
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### 리소스 모니터링
|
|
431
|
+
|
|
432
|
+
```bash
|
|
433
|
+
# 워크로드 리소스 사용량 (시간 평균)
|
|
434
|
+
gcube resource workload my-train-job
|
|
435
|
+
|
|
436
|
+
# JSON 출력
|
|
437
|
+
gcube -o json resource workload my-train-job
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### 사용자 및 크레덴셜 관리
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
# 사용자 검색
|
|
444
|
+
gcube user list --keyword kim
|
|
445
|
+
|
|
446
|
+
# 사용자 생성
|
|
447
|
+
gcube user create --email new@example.com --name "Kim Gildong" --role user
|
|
448
|
+
|
|
449
|
+
# 크레덴셜 발급
|
|
450
|
+
gcube user credentials create kim@example.com --name "dev-key"
|
|
451
|
+
|
|
452
|
+
# 플랫폼 토큰 발급 (다른 도구 연동용)
|
|
453
|
+
gcube user token kim@example.com
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### CI/CD 파이프라인
|
|
457
|
+
|
|
458
|
+
```bash
|
|
459
|
+
# 환경변수로 인증 (토큰 사전 발급)
|
|
460
|
+
export GCUBE_ACCESS_TOKEN="eyJ..."
|
|
461
|
+
export GCUBE_OUTPUT=json
|
|
462
|
+
|
|
463
|
+
# 파이프라인에서 워크로드 등록 후 상태 확인
|
|
464
|
+
gcube workload register -f pipeline.yaml
|
|
465
|
+
gcube workload describe pipeline-job-001 | jq '.state'
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### GAI / AstraGo 백엔드
|
|
469
|
+
|
|
470
|
+
```bash
|
|
471
|
+
# GAI 네임스페이스 워크로드 목록
|
|
472
|
+
gcube workload list --namespace gai
|
|
473
|
+
|
|
474
|
+
# AstraGo 백엔드 워크로드 상세
|
|
475
|
+
gcube workload describe my-job --backend astrago
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## Development
|
|
481
|
+
|
|
482
|
+
```bash
|
|
483
|
+
# 소스 클론 및 개발 환경 설치
|
|
484
|
+
git clone https://github.com/data-alliance/gcube-cli.git
|
|
485
|
+
cd gcube-cli
|
|
486
|
+
pip install -e ".[dev]"
|
|
487
|
+
|
|
488
|
+
# 테스트
|
|
489
|
+
pytest --cov=gcube_cli --cov-report=term-missing
|
|
490
|
+
|
|
491
|
+
# 빌드
|
|
492
|
+
python -m build
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## Contributing
|
|
498
|
+
|
|
499
|
+
버그 리포트 및 기능 요청은 [GitHub Issues](https://github.com/data-alliance/gcube-cli/issues)를 이용한다.
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## License
|
|
504
|
+
|
|
505
|
+
Apache License 2.0 — [LICENSE](LICENSE) 참조
|