lyceum-cli 1.0.29__py3-none-any.whl → 1.0.31__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.
@@ -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,42 @@ 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 (deduplicate by display name)
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
+ gpu_name = format_gpu_name(profile)
407
+ # Only keep one entry per display name (e.g., "T4")
408
+ if gpu_name not in excluded_gpus:
409
+ excluded_gpus[gpu_name] = vram
410
+
411
+ if excluded_gpus and total_mem_gb:
412
+ console.print()
413
+ console.print("[dim]Excluded GPUs (insufficient VRAM):[/dim]")
414
+ for gpu_name, vram in sorted(excluded_gpus.items(), key=lambda x: x[1]):
415
+ console.print(f"[dim] • {gpu_name}: {vram} GB available, ~{total_mem_gb:.1f} GB required[/dim]")
416
+
365
417
  # Show run command hint if we have a best GPU and file path
366
418
  if best_gpu and file_path:
367
419
  machine_flag = best_gpu.get("gpu_type", "gpu")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lyceum-cli
3
- Version: 1.0.29
3
+ Version: 1.0.31
4
4
  Summary: Command-line interface for Lyceum Cloud Execution API
5
5
  Home-page: https://lyceum.technology
6
6
  Author: Lyceum Team
@@ -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=fzYW6k8exMbGnYpZTDKpALRrlKAO5RrppLUq6z2UWoo,37059
11
+ lyceum/external/compute/execution/gpu_selection.py,sha256=B6x8enjdH07eUR4s1eobxGmekLyJ8-IbadxFjOAjApw,39109
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.29.dist-info/METADATA,sha256=3ltYxfRInW369XotoAGtTzZ7j8uj5i0vPDpu6hI8rJM,1482
33
- lyceum_cli-1.0.29.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
34
- lyceum_cli-1.0.29.dist-info/entry_points.txt,sha256=Oq-9wDkxVd6MHgNiUTYwXI9SGhvR3VkD7Mvk0xhiUZo,43
35
- lyceum_cli-1.0.29.dist-info/top_level.txt,sha256=CR7FEMloAXgLsHUR6ti3mWNcpgje27HRHSfq8doIils,41
36
- lyceum_cli-1.0.29.dist-info/RECORD,,
32
+ lyceum_cli-1.0.31.dist-info/METADATA,sha256=bGp9mqLakov3SeduGI7Fo_V5jdsHyEzh5UsisZgBhK8,1482
33
+ lyceum_cli-1.0.31.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
34
+ lyceum_cli-1.0.31.dist-info/entry_points.txt,sha256=Oq-9wDkxVd6MHgNiUTYwXI9SGhvR3VkD7Mvk0xhiUZo,43
35
+ lyceum_cli-1.0.31.dist-info/top_level.txt,sha256=CR7FEMloAXgLsHUR6ti3mWNcpgje27HRHSfq8doIils,41
36
+ lyceum_cli-1.0.31.dist-info/RECORD,,