clouditia-manager 1.0.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.
- clouditia_manager-1.0.0/PKG-INFO +308 -0
- clouditia_manager-1.0.0/README.md +272 -0
- clouditia_manager-1.0.0/clouditia_manager/__init__.py +43 -0
- clouditia_manager-1.0.0/clouditia_manager/client.py +543 -0
- clouditia_manager-1.0.0/clouditia_manager/exceptions.py +31 -0
- clouditia_manager-1.0.0/clouditia_manager.egg-info/PKG-INFO +308 -0
- clouditia_manager-1.0.0/clouditia_manager.egg-info/SOURCES.txt +10 -0
- clouditia_manager-1.0.0/clouditia_manager.egg-info/dependency_links.txt +1 -0
- clouditia_manager-1.0.0/clouditia_manager.egg-info/requires.txt +1 -0
- clouditia_manager-1.0.0/clouditia_manager.egg-info/top_level.txt +1 -0
- clouditia_manager-1.0.0/setup.cfg +4 -0
- clouditia_manager-1.0.0/setup.py +38 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: clouditia-manager
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Manage GPU sessions on Clouditia platform
|
|
5
|
+
Home-page: https://clouditia.com
|
|
6
|
+
Author: Clouditia
|
|
7
|
+
Author-email: support@clouditia.com
|
|
8
|
+
Project-URL: Documentation, https://clouditia.com/docs/manager-sdk
|
|
9
|
+
Project-URL: Bug Reports, https://github.com/clouditia/clouditia-manager/issues
|
|
10
|
+
Project-URL: Source, https://github.com/clouditia/clouditia-manager
|
|
11
|
+
Keywords: gpu cloud computing ml machine-learning clouditia
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.8
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
Requires-Dist: requests>=2.25.0
|
|
25
|
+
Dynamic: author
|
|
26
|
+
Dynamic: author-email
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: description-content-type
|
|
30
|
+
Dynamic: home-page
|
|
31
|
+
Dynamic: keywords
|
|
32
|
+
Dynamic: project-url
|
|
33
|
+
Dynamic: requires-dist
|
|
34
|
+
Dynamic: requires-python
|
|
35
|
+
Dynamic: summary
|
|
36
|
+
|
|
37
|
+
# Clouditia Manager SDK
|
|
38
|
+
|
|
39
|
+
SDK Python pour gérer les sessions GPU sur la plateforme Clouditia via l'API Computing (`sk_compute_`).
|
|
40
|
+
|
|
41
|
+
## Installation
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install clouditia-manager
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Quick Start
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from clouditia_manager import GPUManager
|
|
51
|
+
|
|
52
|
+
# Initialiser avec votre clé API sk_compute_
|
|
53
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
54
|
+
|
|
55
|
+
# Créer une session GPU
|
|
56
|
+
# Le SDK attend automatiquement que la session soit prête
|
|
57
|
+
session = manager.create_session(
|
|
58
|
+
gpu_type="nvidia-rtx-3090",
|
|
59
|
+
vcpu=2,
|
|
60
|
+
ram=4,
|
|
61
|
+
storage=20
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Output:
|
|
65
|
+
# Creating GPU session with nvidia-rtx-3090...
|
|
66
|
+
# Session created: 0e4c713a
|
|
67
|
+
# Waiting for session 0e4c713a to be ready... Ready!
|
|
68
|
+
#
|
|
69
|
+
# ==================================================
|
|
70
|
+
# SESSION READY
|
|
71
|
+
# ==================================================
|
|
72
|
+
# Name : compute-gpu-0e4c713a
|
|
73
|
+
# Short ID : 0e4c713a
|
|
74
|
+
# Status : running
|
|
75
|
+
# GPU : nvidia-rtx-3090 x1
|
|
76
|
+
# vCPU : 2
|
|
77
|
+
# RAM : 4Gi
|
|
78
|
+
# Storage : 20Gi
|
|
79
|
+
# URL : https://clouditia.com/code-editor/...
|
|
80
|
+
# Password : xxxxxxxxxxxx
|
|
81
|
+
# ==================================================
|
|
82
|
+
|
|
83
|
+
print(f"Session prête: {session.name}")
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Configuration
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
from clouditia_manager import GPUManager
|
|
90
|
+
|
|
91
|
+
# Configuration par défaut (production)
|
|
92
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
93
|
+
|
|
94
|
+
# Configuration personnalisée (développement local)
|
|
95
|
+
manager = GPUManager(
|
|
96
|
+
api_key="sk_compute_xxxxx",
|
|
97
|
+
base_url="http://127.0.0.1:8000/jobs", # URL de base de l'API
|
|
98
|
+
timeout=120 # Timeout en secondes
|
|
99
|
+
)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Fonctionnalités
|
|
103
|
+
|
|
104
|
+
### 1. Vérifier la clé API
|
|
105
|
+
|
|
106
|
+
La vérification est automatique à l'initialisation :
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
110
|
+
print(f"Utilisateur: {manager.user['username']}")
|
|
111
|
+
print(f"Email: {manager.user['email']}")
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 2. Créer une session GPU
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
# Création standard (attend automatiquement que la session soit prête)
|
|
118
|
+
session = manager.create_session(
|
|
119
|
+
gpu_type="nvidia-rtx-3090", # Type de GPU
|
|
120
|
+
gpu_count=1, # Nombre de GPUs
|
|
121
|
+
vcpu=4, # Nombre de vCPUs
|
|
122
|
+
ram=16, # RAM en GB
|
|
123
|
+
storage=20 # Stockage en GB
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# La session est prête avec un nom automatique: compute-gpu-{short_id}
|
|
127
|
+
print(f"Nom: {session.name}") # compute-gpu-0e4c713a
|
|
128
|
+
print(f"ID: {session.short_id}") # 0e4c713a
|
|
129
|
+
print(f"Status: {session.status}") # running
|
|
130
|
+
print(f"URL: {session.url}")
|
|
131
|
+
print(f"Password: {session.password}")
|
|
132
|
+
|
|
133
|
+
# Options avancées
|
|
134
|
+
session = manager.create_session(
|
|
135
|
+
gpu_type="nvidia-rtx-3090",
|
|
136
|
+
wait_ready=True, # Attendre que la session soit prête (défaut: True)
|
|
137
|
+
timeout=180, # Timeout en secondes (défaut: 180)
|
|
138
|
+
verbose=True # Afficher les messages de status (défaut: True)
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Mode silencieux (sans attente ni messages)
|
|
142
|
+
session = manager.create_session(
|
|
143
|
+
gpu_type="nvidia-rtx-3090",
|
|
144
|
+
wait_ready=False, # Ne pas attendre
|
|
145
|
+
verbose=False # Pas de messages
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 3. Lister les sessions
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
# Toutes les sessions
|
|
153
|
+
sessions = manager.list_sessions()
|
|
154
|
+
|
|
155
|
+
# Filtrer par status
|
|
156
|
+
running = manager.list_sessions(status="running")
|
|
157
|
+
stopped = manager.list_sessions(status="stopped")
|
|
158
|
+
|
|
159
|
+
for session in sessions:
|
|
160
|
+
print(f"{session.name} ({session.short_id}): {session.status} - {session.gpu_type}")
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 4. Obtenir le status d'une session
|
|
164
|
+
|
|
165
|
+
```python
|
|
166
|
+
# Par short ID (8 caractères)
|
|
167
|
+
session = manager.get_session("0e4c713a")
|
|
168
|
+
|
|
169
|
+
print(f"Nom: {session.name}") # compute-gpu-0e4c713a
|
|
170
|
+
print(f"Status: {session.status}") # running
|
|
171
|
+
print(f"GPU: {session.gpu_type}") # nvidia-rtx-3090
|
|
172
|
+
print(f"URL: {session.url}")
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 5. Renommer une session
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
# Chaque session a un nom par défaut: compute-gpu-{short_id}
|
|
179
|
+
session = manager.create_session(gpu_type="nvidia-rtx-3090")
|
|
180
|
+
print(f"Nom par défaut: {session.name}") # compute-gpu-0e4c713a
|
|
181
|
+
|
|
182
|
+
# Renommer la session
|
|
183
|
+
session = manager.rename_session("0e4c713a", "mon-projet-ml-v1")
|
|
184
|
+
print(f"Nouveau nom: {session.name}") # mon-projet-ml-v1
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 6. Arrêter une session
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
# Arrêt standard (attend automatiquement la suppression du pod)
|
|
191
|
+
session = manager.stop_session("0e4c713a")
|
|
192
|
+
|
|
193
|
+
# Output:
|
|
194
|
+
# Stopping session 0e4c713a...
|
|
195
|
+
# Waiting for pod termination... Done!
|
|
196
|
+
#
|
|
197
|
+
# ==================================================
|
|
198
|
+
# SESSION STOPPED
|
|
199
|
+
# ==================================================
|
|
200
|
+
# Name : mon-projet-ml-v1
|
|
201
|
+
# Short ID : 0e4c713a
|
|
202
|
+
# Status : stopped
|
|
203
|
+
# GPU : nvidia-rtx-3090 (released)
|
|
204
|
+
# ==================================================
|
|
205
|
+
|
|
206
|
+
print(f"Session arrêtée: {session.name}")
|
|
207
|
+
print(f"Status: {session.status}")
|
|
208
|
+
|
|
209
|
+
# Options avancées
|
|
210
|
+
session = manager.stop_session(
|
|
211
|
+
"0e4c713a",
|
|
212
|
+
wait_stopped=True, # Attendre la suppression complète (défaut: True)
|
|
213
|
+
timeout=120, # Timeout en secondes (défaut: 120)
|
|
214
|
+
verbose=True # Afficher les messages (défaut: True)
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
# Mode silencieux
|
|
218
|
+
session = manager.stop_session("0e4c713a", wait_stopped=False, verbose=False)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 7. Consulter l'inventaire GPU
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
inventory = manager.get_inventory()
|
|
225
|
+
|
|
226
|
+
for gpu in inventory:
|
|
227
|
+
print(f"{gpu.gpu_name}: {gpu.available}/{gpu.total} disponibles")
|
|
228
|
+
print(f" Prix: {gpu.price_per_hour}€/h")
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 8. Générer une clé SDK (sk_live_)
|
|
232
|
+
|
|
233
|
+
```python
|
|
234
|
+
# Générer une clé pour utiliser le SDK clouditia
|
|
235
|
+
sdk_key = manager.generate_sdk_key("0e4c713a", name="Ma clé SDK")
|
|
236
|
+
print(f"Clé SDK: {sdk_key}") # sk_live_xxxxx...
|
|
237
|
+
|
|
238
|
+
# Utiliser avec le SDK clouditia
|
|
239
|
+
from clouditia import GPUSession
|
|
240
|
+
gpu = GPUSession(api_key=sdk_key)
|
|
241
|
+
result = gpu.run("print('Hello GPU!')")
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Types de GPU disponibles
|
|
245
|
+
|
|
246
|
+
| GPU | Slug |
|
|
247
|
+
|-----|------|
|
|
248
|
+
| NVIDIA RTX 3060 Ti | `nvidia-rtx-3060ti` |
|
|
249
|
+
| NVIDIA RTX 3080 Ti | `nvidia-rtx-3080ti` |
|
|
250
|
+
| NVIDIA RTX 3090 | `nvidia-rtx-3090` |
|
|
251
|
+
| NVIDIA RTX 4090 | `nvidia-rtx-4090` |
|
|
252
|
+
|
|
253
|
+
## Gestion des erreurs
|
|
254
|
+
|
|
255
|
+
```python
|
|
256
|
+
from clouditia_manager import (
|
|
257
|
+
GPUManager,
|
|
258
|
+
AuthenticationError,
|
|
259
|
+
SessionNotFoundError,
|
|
260
|
+
InsufficientResourcesError,
|
|
261
|
+
APIError
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
try:
|
|
265
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
266
|
+
session = manager.create_session(gpu_type="nvidia-rtx-4090")
|
|
267
|
+
except AuthenticationError:
|
|
268
|
+
print("Clé API invalide")
|
|
269
|
+
except InsufficientResourcesError:
|
|
270
|
+
print("Aucun GPU disponible")
|
|
271
|
+
except SessionNotFoundError:
|
|
272
|
+
print("Session non trouvée")
|
|
273
|
+
except APIError as e:
|
|
274
|
+
print(f"Erreur API: {e}")
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Référence API
|
|
278
|
+
|
|
279
|
+
| Méthode | Description |
|
|
280
|
+
|---------|-------------|
|
|
281
|
+
| `GPUManager(api_key, base_url, timeout)` | Initialise le SDK |
|
|
282
|
+
| `create_session(gpu_type, gpu_count, vcpu, ram, storage, wait_ready, timeout, verbose)` | Crée une session GPU |
|
|
283
|
+
| `stop_session(session_id, wait_stopped, timeout, verbose)` | Arrête une session |
|
|
284
|
+
| `get_session(session_id)` | Récupère les détails d'une session |
|
|
285
|
+
| `list_sessions(status)` | Liste les sessions (filtre optionnel) |
|
|
286
|
+
| `rename_session(session_id, new_name)` | Renomme une session |
|
|
287
|
+
| `get_inventory()` | Récupère l'inventaire GPU |
|
|
288
|
+
| `generate_sdk_key(session_id, name)` | Génère une clé sk_live_ |
|
|
289
|
+
|
|
290
|
+
## Attributs GPUSession
|
|
291
|
+
|
|
292
|
+
| Attribut | Type | Description |
|
|
293
|
+
|----------|------|-------------|
|
|
294
|
+
| `id` | str | UUID complet de la session |
|
|
295
|
+
| `short_id` | str | ID court (8 caractères) |
|
|
296
|
+
| `name` | str | Nom de la session |
|
|
297
|
+
| `status` | str | running, stopped, pending, failed |
|
|
298
|
+
| `gpu_type` | str | Type de GPU |
|
|
299
|
+
| `gpu_count` | int | Nombre de GPUs |
|
|
300
|
+
| `vcpu` | int | Nombre de vCPUs |
|
|
301
|
+
| `ram` | str | RAM allouée |
|
|
302
|
+
| `storage` | str | Stockage alloué |
|
|
303
|
+
| `url` | str | URL d'accès |
|
|
304
|
+
| `password` | str | Mot de passe |
|
|
305
|
+
|
|
306
|
+
## License
|
|
307
|
+
|
|
308
|
+
MIT License
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Clouditia Manager SDK
|
|
2
|
+
|
|
3
|
+
SDK Python pour gérer les sessions GPU sur la plateforme Clouditia via l'API Computing (`sk_compute_`).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install clouditia-manager
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
|
+
from clouditia_manager import GPUManager
|
|
15
|
+
|
|
16
|
+
# Initialiser avec votre clé API sk_compute_
|
|
17
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
18
|
+
|
|
19
|
+
# Créer une session GPU
|
|
20
|
+
# Le SDK attend automatiquement que la session soit prête
|
|
21
|
+
session = manager.create_session(
|
|
22
|
+
gpu_type="nvidia-rtx-3090",
|
|
23
|
+
vcpu=2,
|
|
24
|
+
ram=4,
|
|
25
|
+
storage=20
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Output:
|
|
29
|
+
# Creating GPU session with nvidia-rtx-3090...
|
|
30
|
+
# Session created: 0e4c713a
|
|
31
|
+
# Waiting for session 0e4c713a to be ready... Ready!
|
|
32
|
+
#
|
|
33
|
+
# ==================================================
|
|
34
|
+
# SESSION READY
|
|
35
|
+
# ==================================================
|
|
36
|
+
# Name : compute-gpu-0e4c713a
|
|
37
|
+
# Short ID : 0e4c713a
|
|
38
|
+
# Status : running
|
|
39
|
+
# GPU : nvidia-rtx-3090 x1
|
|
40
|
+
# vCPU : 2
|
|
41
|
+
# RAM : 4Gi
|
|
42
|
+
# Storage : 20Gi
|
|
43
|
+
# URL : https://clouditia.com/code-editor/...
|
|
44
|
+
# Password : xxxxxxxxxxxx
|
|
45
|
+
# ==================================================
|
|
46
|
+
|
|
47
|
+
print(f"Session prête: {session.name}")
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Configuration
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from clouditia_manager import GPUManager
|
|
54
|
+
|
|
55
|
+
# Configuration par défaut (production)
|
|
56
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
57
|
+
|
|
58
|
+
# Configuration personnalisée (développement local)
|
|
59
|
+
manager = GPUManager(
|
|
60
|
+
api_key="sk_compute_xxxxx",
|
|
61
|
+
base_url="http://127.0.0.1:8000/jobs", # URL de base de l'API
|
|
62
|
+
timeout=120 # Timeout en secondes
|
|
63
|
+
)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Fonctionnalités
|
|
67
|
+
|
|
68
|
+
### 1. Vérifier la clé API
|
|
69
|
+
|
|
70
|
+
La vérification est automatique à l'initialisation :
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
74
|
+
print(f"Utilisateur: {manager.user['username']}")
|
|
75
|
+
print(f"Email: {manager.user['email']}")
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 2. Créer une session GPU
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
# Création standard (attend automatiquement que la session soit prête)
|
|
82
|
+
session = manager.create_session(
|
|
83
|
+
gpu_type="nvidia-rtx-3090", # Type de GPU
|
|
84
|
+
gpu_count=1, # Nombre de GPUs
|
|
85
|
+
vcpu=4, # Nombre de vCPUs
|
|
86
|
+
ram=16, # RAM en GB
|
|
87
|
+
storage=20 # Stockage en GB
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# La session est prête avec un nom automatique: compute-gpu-{short_id}
|
|
91
|
+
print(f"Nom: {session.name}") # compute-gpu-0e4c713a
|
|
92
|
+
print(f"ID: {session.short_id}") # 0e4c713a
|
|
93
|
+
print(f"Status: {session.status}") # running
|
|
94
|
+
print(f"URL: {session.url}")
|
|
95
|
+
print(f"Password: {session.password}")
|
|
96
|
+
|
|
97
|
+
# Options avancées
|
|
98
|
+
session = manager.create_session(
|
|
99
|
+
gpu_type="nvidia-rtx-3090",
|
|
100
|
+
wait_ready=True, # Attendre que la session soit prête (défaut: True)
|
|
101
|
+
timeout=180, # Timeout en secondes (défaut: 180)
|
|
102
|
+
verbose=True # Afficher les messages de status (défaut: True)
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Mode silencieux (sans attente ni messages)
|
|
106
|
+
session = manager.create_session(
|
|
107
|
+
gpu_type="nvidia-rtx-3090",
|
|
108
|
+
wait_ready=False, # Ne pas attendre
|
|
109
|
+
verbose=False # Pas de messages
|
|
110
|
+
)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 3. Lister les sessions
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
# Toutes les sessions
|
|
117
|
+
sessions = manager.list_sessions()
|
|
118
|
+
|
|
119
|
+
# Filtrer par status
|
|
120
|
+
running = manager.list_sessions(status="running")
|
|
121
|
+
stopped = manager.list_sessions(status="stopped")
|
|
122
|
+
|
|
123
|
+
for session in sessions:
|
|
124
|
+
print(f"{session.name} ({session.short_id}): {session.status} - {session.gpu_type}")
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 4. Obtenir le status d'une session
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
# Par short ID (8 caractères)
|
|
131
|
+
session = manager.get_session("0e4c713a")
|
|
132
|
+
|
|
133
|
+
print(f"Nom: {session.name}") # compute-gpu-0e4c713a
|
|
134
|
+
print(f"Status: {session.status}") # running
|
|
135
|
+
print(f"GPU: {session.gpu_type}") # nvidia-rtx-3090
|
|
136
|
+
print(f"URL: {session.url}")
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 5. Renommer une session
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
# Chaque session a un nom par défaut: compute-gpu-{short_id}
|
|
143
|
+
session = manager.create_session(gpu_type="nvidia-rtx-3090")
|
|
144
|
+
print(f"Nom par défaut: {session.name}") # compute-gpu-0e4c713a
|
|
145
|
+
|
|
146
|
+
# Renommer la session
|
|
147
|
+
session = manager.rename_session("0e4c713a", "mon-projet-ml-v1")
|
|
148
|
+
print(f"Nouveau nom: {session.name}") # mon-projet-ml-v1
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 6. Arrêter une session
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# Arrêt standard (attend automatiquement la suppression du pod)
|
|
155
|
+
session = manager.stop_session("0e4c713a")
|
|
156
|
+
|
|
157
|
+
# Output:
|
|
158
|
+
# Stopping session 0e4c713a...
|
|
159
|
+
# Waiting for pod termination... Done!
|
|
160
|
+
#
|
|
161
|
+
# ==================================================
|
|
162
|
+
# SESSION STOPPED
|
|
163
|
+
# ==================================================
|
|
164
|
+
# Name : mon-projet-ml-v1
|
|
165
|
+
# Short ID : 0e4c713a
|
|
166
|
+
# Status : stopped
|
|
167
|
+
# GPU : nvidia-rtx-3090 (released)
|
|
168
|
+
# ==================================================
|
|
169
|
+
|
|
170
|
+
print(f"Session arrêtée: {session.name}")
|
|
171
|
+
print(f"Status: {session.status}")
|
|
172
|
+
|
|
173
|
+
# Options avancées
|
|
174
|
+
session = manager.stop_session(
|
|
175
|
+
"0e4c713a",
|
|
176
|
+
wait_stopped=True, # Attendre la suppression complète (défaut: True)
|
|
177
|
+
timeout=120, # Timeout en secondes (défaut: 120)
|
|
178
|
+
verbose=True # Afficher les messages (défaut: True)
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Mode silencieux
|
|
182
|
+
session = manager.stop_session("0e4c713a", wait_stopped=False, verbose=False)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 7. Consulter l'inventaire GPU
|
|
186
|
+
|
|
187
|
+
```python
|
|
188
|
+
inventory = manager.get_inventory()
|
|
189
|
+
|
|
190
|
+
for gpu in inventory:
|
|
191
|
+
print(f"{gpu.gpu_name}: {gpu.available}/{gpu.total} disponibles")
|
|
192
|
+
print(f" Prix: {gpu.price_per_hour}€/h")
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 8. Générer une clé SDK (sk_live_)
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
# Générer une clé pour utiliser le SDK clouditia
|
|
199
|
+
sdk_key = manager.generate_sdk_key("0e4c713a", name="Ma clé SDK")
|
|
200
|
+
print(f"Clé SDK: {sdk_key}") # sk_live_xxxxx...
|
|
201
|
+
|
|
202
|
+
# Utiliser avec le SDK clouditia
|
|
203
|
+
from clouditia import GPUSession
|
|
204
|
+
gpu = GPUSession(api_key=sdk_key)
|
|
205
|
+
result = gpu.run("print('Hello GPU!')")
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Types de GPU disponibles
|
|
209
|
+
|
|
210
|
+
| GPU | Slug |
|
|
211
|
+
|-----|------|
|
|
212
|
+
| NVIDIA RTX 3060 Ti | `nvidia-rtx-3060ti` |
|
|
213
|
+
| NVIDIA RTX 3080 Ti | `nvidia-rtx-3080ti` |
|
|
214
|
+
| NVIDIA RTX 3090 | `nvidia-rtx-3090` |
|
|
215
|
+
| NVIDIA RTX 4090 | `nvidia-rtx-4090` |
|
|
216
|
+
|
|
217
|
+
## Gestion des erreurs
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
from clouditia_manager import (
|
|
221
|
+
GPUManager,
|
|
222
|
+
AuthenticationError,
|
|
223
|
+
SessionNotFoundError,
|
|
224
|
+
InsufficientResourcesError,
|
|
225
|
+
APIError
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
try:
|
|
229
|
+
manager = GPUManager(api_key="sk_compute_xxxxx")
|
|
230
|
+
session = manager.create_session(gpu_type="nvidia-rtx-4090")
|
|
231
|
+
except AuthenticationError:
|
|
232
|
+
print("Clé API invalide")
|
|
233
|
+
except InsufficientResourcesError:
|
|
234
|
+
print("Aucun GPU disponible")
|
|
235
|
+
except SessionNotFoundError:
|
|
236
|
+
print("Session non trouvée")
|
|
237
|
+
except APIError as e:
|
|
238
|
+
print(f"Erreur API: {e}")
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Référence API
|
|
242
|
+
|
|
243
|
+
| Méthode | Description |
|
|
244
|
+
|---------|-------------|
|
|
245
|
+
| `GPUManager(api_key, base_url, timeout)` | Initialise le SDK |
|
|
246
|
+
| `create_session(gpu_type, gpu_count, vcpu, ram, storage, wait_ready, timeout, verbose)` | Crée une session GPU |
|
|
247
|
+
| `stop_session(session_id, wait_stopped, timeout, verbose)` | Arrête une session |
|
|
248
|
+
| `get_session(session_id)` | Récupère les détails d'une session |
|
|
249
|
+
| `list_sessions(status)` | Liste les sessions (filtre optionnel) |
|
|
250
|
+
| `rename_session(session_id, new_name)` | Renomme une session |
|
|
251
|
+
| `get_inventory()` | Récupère l'inventaire GPU |
|
|
252
|
+
| `generate_sdk_key(session_id, name)` | Génère une clé sk_live_ |
|
|
253
|
+
|
|
254
|
+
## Attributs GPUSession
|
|
255
|
+
|
|
256
|
+
| Attribut | Type | Description |
|
|
257
|
+
|----------|------|-------------|
|
|
258
|
+
| `id` | str | UUID complet de la session |
|
|
259
|
+
| `short_id` | str | ID court (8 caractères) |
|
|
260
|
+
| `name` | str | Nom de la session |
|
|
261
|
+
| `status` | str | running, stopped, pending, failed |
|
|
262
|
+
| `gpu_type` | str | Type de GPU |
|
|
263
|
+
| `gpu_count` | int | Nombre de GPUs |
|
|
264
|
+
| `vcpu` | int | Nombre de vCPUs |
|
|
265
|
+
| `ram` | str | RAM allouée |
|
|
266
|
+
| `storage` | str | Stockage alloué |
|
|
267
|
+
| `url` | str | URL d'accès |
|
|
268
|
+
| `password` | str | Mot de passe |
|
|
269
|
+
|
|
270
|
+
## License
|
|
271
|
+
|
|
272
|
+
MIT License
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Clouditia Manager SDK - Manage GPU sessions via the Computing API
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
from clouditia_manager import GPUManager
|
|
6
|
+
|
|
7
|
+
manager = GPUManager(api_key="sk_compute_...")
|
|
8
|
+
|
|
9
|
+
# Create a session
|
|
10
|
+
session = manager.create_session(
|
|
11
|
+
gpu_type="nvidia-rtx-3090",
|
|
12
|
+
vcpu=2,
|
|
13
|
+
ram=4,
|
|
14
|
+
storage=20
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
# List sessions
|
|
18
|
+
sessions = manager.list_sessions()
|
|
19
|
+
|
|
20
|
+
# Stop a session
|
|
21
|
+
manager.stop_session("369bde33")
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
__version__ = "1.0.0"
|
|
25
|
+
__author__ = "Clouditia"
|
|
26
|
+
|
|
27
|
+
from .client import GPUManager
|
|
28
|
+
from .exceptions import (
|
|
29
|
+
ClouditiaManagerError,
|
|
30
|
+
AuthenticationError,
|
|
31
|
+
SessionNotFoundError,
|
|
32
|
+
InsufficientResourcesError,
|
|
33
|
+
APIError
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
__all__ = [
|
|
37
|
+
"GPUManager",
|
|
38
|
+
"ClouditiaManagerError",
|
|
39
|
+
"AuthenticationError",
|
|
40
|
+
"SessionNotFoundError",
|
|
41
|
+
"InsufficientResourcesError",
|
|
42
|
+
"APIError"
|
|
43
|
+
]
|