lyceum-cli 1.0.29__py3-none-any.whl → 1.0.30__py3-none-any.whl
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.
- lyceum/external/compute/execution/gpu_selection.py +51 -0
- {lyceum_cli-1.0.29.dist-info → lyceum_cli-1.0.30.dist-info}/METADATA +1 -1
- {lyceum_cli-1.0.29.dist-info → lyceum_cli-1.0.30.dist-info}/RECORD +6 -6
- {lyceum_cli-1.0.29.dist-info → lyceum_cli-1.0.30.dist-info}/WHEEL +0 -0
- {lyceum_cli-1.0.29.dist-info → lyceum_cli-1.0.30.dist-info}/entry_points.txt +0 -0
- {lyceum_cli-1.0.29.dist-info → lyceum_cli-1.0.30.dist-info}/top_level.txt +0 -0
|
@@ -44,6 +44,21 @@ GPU_DISPLAY_NAMES = {
|
|
|
44
44
|
"gpu.rtx6000pro": "RTX 6000 Pro",
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
# VRAM in GB for each GPU profile (for showing excluded GPUs)
|
|
48
|
+
GPU_VRAM_GB = {
|
|
49
|
+
"gpu": 16,
|
|
50
|
+
"gpu.t4": 16,
|
|
51
|
+
"gpu.t4.64gb": 16,
|
|
52
|
+
"gpu.a100": 40,
|
|
53
|
+
"gpu.a100.40gb": 40,
|
|
54
|
+
"gpu.a100.80gb": 80,
|
|
55
|
+
"gpu.h100": 80,
|
|
56
|
+
"gpu.h200": 141,
|
|
57
|
+
"gpu.l40s": 48,
|
|
58
|
+
"gpu.b200": 180,
|
|
59
|
+
"gpu.rtx6000pro": 48,
|
|
60
|
+
}
|
|
61
|
+
|
|
47
62
|
|
|
48
63
|
def format_gpu_name(profile: str) -> str:
|
|
49
64
|
"""Format GPU profile name for display."""
|
|
@@ -342,6 +357,7 @@ def display_results(data: dict, file_path: str | None = None) -> None:
|
|
|
342
357
|
|
|
343
358
|
# Sort by VRAM size for better display
|
|
344
359
|
sorted_configs = sorted(minimal_configs, key=lambda x: x.get("per_gpu_vram_gb", 0))
|
|
360
|
+
compatible_gpu_types = {cfg.get("gpu_type") for cfg in minimal_configs}
|
|
345
361
|
|
|
346
362
|
for i, cfg in enumerate(sorted_configs):
|
|
347
363
|
gpu_type = format_gpu_name(cfg.get("gpu_type", "?"))
|
|
@@ -362,6 +378,41 @@ def display_results(data: dict, file_path: str | None = None) -> None:
|
|
|
362
378
|
|
|
363
379
|
console.print(gpu_table)
|
|
364
380
|
|
|
381
|
+
# Show excluded GPUs (those not in minimal_configs)
|
|
382
|
+
# Get total memory required from extraction result
|
|
383
|
+
mem_reqs = mem_config.get("memory_requirements", {})
|
|
384
|
+
total_mem_gb = 0
|
|
385
|
+
if mem_reqs:
|
|
386
|
+
# Sum up memory components
|
|
387
|
+
total_mem_gb = (
|
|
388
|
+
mem_reqs.get("model_weights", 0) +
|
|
389
|
+
mem_reqs.get("gradients", 0) +
|
|
390
|
+
mem_reqs.get("optimizer_states", 0) +
|
|
391
|
+
mem_reqs.get("activations", 0)
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
if not total_mem_gb and sorted_configs:
|
|
395
|
+
# Estimate from minimal config utilization
|
|
396
|
+
first_cfg = sorted_configs[0]
|
|
397
|
+
vram = first_cfg.get("per_gpu_vram_gb", 0)
|
|
398
|
+
util = first_cfg.get("vram_utilization_percent", 0)
|
|
399
|
+
if vram and util:
|
|
400
|
+
total_mem_gb = vram * (util / 100)
|
|
401
|
+
|
|
402
|
+
# Find GPUs that were excluded
|
|
403
|
+
excluded_gpus = []
|
|
404
|
+
for profile, vram in GPU_VRAM_GB.items():
|
|
405
|
+
if profile not in compatible_gpu_types and profile in ("gpu", "gpu.t4"):
|
|
406
|
+
# Only show common GPUs that users expect to see
|
|
407
|
+
excluded_gpus.append((profile, vram))
|
|
408
|
+
|
|
409
|
+
if excluded_gpus and total_mem_gb:
|
|
410
|
+
console.print()
|
|
411
|
+
console.print("[dim]Excluded GPUs (insufficient VRAM):[/dim]")
|
|
412
|
+
for profile, vram in sorted(excluded_gpus, key=lambda x: x[1]):
|
|
413
|
+
gpu_name = format_gpu_name(profile)
|
|
414
|
+
console.print(f"[dim] • {gpu_name}: {vram} GB available, ~{total_mem_gb:.1f} GB required[/dim]")
|
|
415
|
+
|
|
365
416
|
# Show run command hint if we have a best GPU and file path
|
|
366
417
|
if best_gpu and file_path:
|
|
367
418
|
machine_flag = best_gpu.get("gpu_type", "gpu")
|
|
@@ -8,7 +8,7 @@ lyceum/external/compute/execution/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZ
|
|
|
8
8
|
lyceum/external/compute/execution/config.py,sha256=6JJgLJnDPTwevEaNdB1nEICih_qbBmws5u5_S9gj7k0,8866
|
|
9
9
|
lyceum/external/compute/execution/docker.py,sha256=0Y6lxJAm56Jrl0HxeNz1mX6DGs556i2iMN9_U1JQP0c,9635
|
|
10
10
|
lyceum/external/compute/execution/docker_compose.py,sha256=YsWPnw5nB1ZpqjU9X8o_klT78I5m46PapVwVEeWra_8,9189
|
|
11
|
-
lyceum/external/compute/execution/gpu_selection.py,sha256=
|
|
11
|
+
lyceum/external/compute/execution/gpu_selection.py,sha256=1rLFUAxqY6TiRcEfeduNnScGw0QbxSSMbgTAQ3QWMhQ,39020
|
|
12
12
|
lyceum/external/compute/execution/notebook.py,sha256=Gw9UhJ-UjYhpjdIYQ4IMYhVjhSkAFpOQ9aFYj1qOeww,7542
|
|
13
13
|
lyceum/external/compute/execution/python.py,sha256=8Y9ElWs9RdauQbhECKcBPSoT0XZeGhXZ_pkEpr3sGro,12878
|
|
14
14
|
lyceum/external/compute/execution/workloads.py,sha256=4fsRWbYGmsQMGPPIN1jUG8cG5NPG9yV26ANJ-DtaXqc,5844
|
|
@@ -29,8 +29,8 @@ lyceum/shared/streaming.py,sha256=wFb7w7fra63y8WWaIA8_E1Z6Sx_6G-0J53Zh010eZgk,93
|
|
|
29
29
|
lyceum_cloud_execution_api_client/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
30
30
|
lyceum_cloud_execution_api_client/api/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
31
31
|
lyceum_cloud_execution_api_client/models/__init__.py,sha256=AMlb9R9O9aNC9hvKz_8TFpEfOolYC3VtFS5JX17kYks,4888
|
|
32
|
-
lyceum_cli-1.0.
|
|
33
|
-
lyceum_cli-1.0.
|
|
34
|
-
lyceum_cli-1.0.
|
|
35
|
-
lyceum_cli-1.0.
|
|
36
|
-
lyceum_cli-1.0.
|
|
32
|
+
lyceum_cli-1.0.30.dist-info/METADATA,sha256=pdV-mL-39UWQJfpEd91DK88AWhgCO-KD2GV5tWaJtLs,1482
|
|
33
|
+
lyceum_cli-1.0.30.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
34
|
+
lyceum_cli-1.0.30.dist-info/entry_points.txt,sha256=Oq-9wDkxVd6MHgNiUTYwXI9SGhvR3VkD7Mvk0xhiUZo,43
|
|
35
|
+
lyceum_cli-1.0.30.dist-info/top_level.txt,sha256=CR7FEMloAXgLsHUR6ti3mWNcpgje27HRHSfq8doIils,41
|
|
36
|
+
lyceum_cli-1.0.30.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|