gpu-dev 0.7.3__tar.gz → 0.7.4__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.
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/PKG-INFO +1 -1
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/interactive.py +72 -49
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/gpu_dev.egg-info/PKG-INFO +1 -1
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/pyproject.toml +1 -1
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/__init__.py +1 -1
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/.github/workflows/no-gitlinks.yml +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/.github/workflows/publish.yml +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/.gitignore +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/CLAUDE.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/README.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/admin/README.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/admin/generate_stats.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/admin/requirements.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/README.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/ZERO_CONFIG_SETUP.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/auth.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/cli.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/config.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/disks.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/name_generator.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/reservations.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/gpu_dev_cli/ssh_proxy.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/gpu-dev-cli/minimal-iam-policy.json +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/cli-tools/scripts/clear_stale_disk_locks.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/docs/SDK_REPRO.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/docs/USER_GUIDE.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/docs/devgpu-features.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/docs/docker-mark-blue.svg +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/docs/icons8-cursor-ai.svg +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/gpu_dev.egg-info/SOURCES.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/gpu_dev.egg-info/dependency_links.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/gpu_dev.egg-info/entry_points.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/gpu_dev.egg-info/requires.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/gpu_dev.egg-info/top_level.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/architecture.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/cli-demo.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/devgpu-features.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/docker-mark-blue.svg +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/feedback.png +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/gpu-fleet.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/icons8-cursor-ai.svg +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/index.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/k8s-under-the-hood.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/multinode.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/osdc-future-plans.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/problem.png +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/sandbox.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/sdk-demo.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/thesis.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/title-vid.mp4 +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/weneedgpus.png +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/presentation/wow.html +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/README.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/examples/batch_multi_gpu.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/examples/interactive_debug.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/examples/parallel_experiments.ipynb +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/examples/quickstart.ipynb +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/examples/run_tests.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/examples/submit_job.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_async/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_backend/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_backend/aws.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_backend/protocol.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_sync/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_sync/client.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_sync/sandbox.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_transport/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/_transport/ssh.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/common/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/common/config.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/common/enums.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/common/errors.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/common/models.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/src/gpu_dev/py.typed +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/tests/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/sdk/python/tests/test_models.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/setup.cfg +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-deck/backend.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-deck/main.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-deck/terraform.tfvars.example +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/.claude/skills/deploy.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/.terraform.lock.hcl +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/README.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/alb.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ami-baker.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/availability.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/backend.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/build-node.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/check_b200.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/cluster-autoscaler.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/cmd_proxy.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/.dockerignore +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/Dockerfile +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/backup-dotfiles +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/bash_profile +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/bashrc +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/bashrc_ext +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/build-with-efa.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/dotfiles-shutdown-handler +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/list-dotfile-versions +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/motd_script +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/nproc_wrapper +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/profile +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/restore-dotfiles +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/restore-dotfiles-version +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/setup-dotfiles-persistence +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/shell_env +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/ssh_config +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/zprofile +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/zshrc +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker/zshrc_ext +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker-build.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker-example/Dockerfile +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/docker-example/hello.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ecr.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/efs.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/eks.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/expiry.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/git-cache.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/gpu-dev-pod-irsa.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/kubernetes.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/availability_updater/index.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/availability_updater/requirements.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/migration/tag_largest_snapshots.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_expiry/index.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_expiry/requirements.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_processor/buildkit_job.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_processor/index.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_processor/requirements.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/__init__.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/alb_utils.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/dns_utils.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/k8s_client.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/k8s_resource_tracker.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/requirements.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/snapshot_utils.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/list_b200.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/main.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/mig-config.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/mig-parted-config.yaml +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/backfill_snapshot_contents.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/backfill_snapshot_contents.py.bak +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/check_snapshots.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/migrate_disks_to_named.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/run_backfill.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/monitoring.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/node-termination-handler.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/outputs.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/pyproject.toml +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/pytorch-prebuild.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/queue.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/route53.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/s3-disk-contents.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/scripts/CLEANUP_GUIDE.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/scripts/detect_empty_volumes.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/scripts/ec2_avail_probe.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/scripts/inspect_user_data.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ssh-proxy/Dockerfile +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ssh-proxy/proxy.py +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ssh-proxy/requirements.txt +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ssh-proxy-service.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/ssh-proxy.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/subnet-0fe3a2c45570091ad +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/switch-to.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/templates/al2023-cpu-user-data.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/templates/al2023-user-data.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/templates/ami-baker-user-data.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/templates/user-data-self-managed.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/templates/user-data.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/variables.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/warm-pool.tf +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/tests/submit/README.md +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/tests/submit/fail/run.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/tests/submit/multinode/run.sh +0 -0
- {gpu_dev-0.7.3 → gpu_dev-0.7.4}/tests/submit/success/run.sh +0 -0
|
@@ -159,37 +159,51 @@ def select_gpu_type_interactive(
|
|
|
159
159
|
parts.append(f"{a}×{cgt.rsplit('-', 1)[-1].upper()}")
|
|
160
160
|
return parts, tot_a, tot_c
|
|
161
161
|
|
|
162
|
-
# ── The selectable list IS the table
|
|
163
|
-
#
|
|
164
|
-
#
|
|
165
|
-
#
|
|
166
|
-
|
|
162
|
+
# ── The selectable list IS the table (boxed + colored) ────────────────────
|
|
163
|
+
# Box-drawing borders are non-selectable Separators; each GPU is a Choice whose
|
|
164
|
+
# title is FormattedText so cells are individually colored. questionary indents
|
|
165
|
+
# Separators and Choices identically, so the borders line up with the rows.
|
|
166
|
+
# Arrow keys move through the table; the » pointer marks the row, Enter picks it.
|
|
167
|
+
# Emoji are kept OUT of cells (double-width → would ragged the right border);
|
|
168
|
+
# status is conveyed with color instead.
|
|
169
|
+
G, R, Y, BL, CY, MG, DIM = (
|
|
170
|
+
"fg:ansigreen", "fg:ansired", "fg:ansiyellow",
|
|
171
|
+
"fg:ansiblue", "fg:ansicyan bold", "fg:ansimagenta", "fg:#808080")
|
|
172
|
+
|
|
173
|
+
def _status(info):
|
|
167
174
|
avail = int(info.get("available", 0))
|
|
168
|
-
|
|
175
|
+
est = info.get("estimated_wait_minutes", 0)
|
|
169
176
|
ql = int(info.get("queue_length", 0))
|
|
177
|
+
if avail > 0:
|
|
178
|
+
text, style = "available now", G
|
|
179
|
+
elif est:
|
|
180
|
+
text, style = _format_wait(avail, est)[0], Y
|
|
181
|
+
else:
|
|
182
|
+
text, style = "queued", Y
|
|
170
183
|
if ql > 0:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return [typ, str(avail), str(int(info.get("max_reservable", 0))),
|
|
174
|
-
str(int(info.get("total", 0)))], f"{emoji} {wd}"
|
|
184
|
+
text += f" · {ql} queued"
|
|
185
|
+
return text, style
|
|
175
186
|
|
|
176
|
-
#
|
|
177
|
-
|
|
187
|
+
# rows: (cells[type, avail, maxres, total, status], styles|None, value, kind)
|
|
188
|
+
rows = []
|
|
178
189
|
for gt, info in full_gpus.items():
|
|
179
190
|
if info.get("maintenance", False):
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
191
|
+
reason = (info.get("maintenance_reason", "") or "maintenance")[:18]
|
|
192
|
+
rows.append(([gt.upper(), "-", "-", str(int(info.get("total", 0))),
|
|
193
|
+
f"MAINT: {reason}"], None, gt, "maint"))
|
|
183
194
|
continue
|
|
184
|
-
|
|
185
|
-
|
|
195
|
+
a = int(info.get("available", 0))
|
|
196
|
+
st_text, st_style = _status(info)
|
|
197
|
+
cells = [gt.upper(), str(a), str(int(info.get("max_reservable", 0))),
|
|
198
|
+
str(int(info.get("total", 0))), st_text]
|
|
199
|
+
styles = [CY, G if a > 0 else R, G, BL, st_style]
|
|
200
|
+
rows.append((cells, styles, gt, "gpu"))
|
|
186
201
|
parts, mig_a, mig_c = _mig_breakdown(gt)
|
|
187
202
|
if parts:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
f"{' '.join(parts)} · pick {gt.upper()} ↑", None, "mig"))
|
|
203
|
+
rows.append(([" └─ MIG", str(mig_a), "-", str(mig_c), " ".join(parts)],
|
|
204
|
+
None, None, "mig"))
|
|
191
205
|
|
|
192
|
-
|
|
206
|
+
spot_rows = []
|
|
193
207
|
if spot_gpus:
|
|
194
208
|
_pn = {"b300": 8, "b200": 8, "h200": 8, "h100": 8, "a100": 8, "t4": 4, "l4": 4}
|
|
195
209
|
_od = {"b300": 95, "b200": 95, "h200": 55, "h100": 98, "a100": 32, "t4": 4.5, "l4": 7}
|
|
@@ -205,40 +219,48 @@ def select_gpu_type_interactive(
|
|
|
205
219
|
try:
|
|
206
220
|
disc = f"~{int((1 - float(sp) / _od.get(gt, 50)) * 100)}% off"
|
|
207
221
|
except (ValueError, TypeError):
|
|
208
|
-
disc = "spot
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
222
|
+
disc = "spot n/a"
|
|
223
|
+
st_text = ("node up · " if avail > 0 else "spins up · ") + disc
|
|
224
|
+
cells = [f"{gt.upper()} *", str(avail), f"{_pn.get(gt, 8)}/node", "-", st_text]
|
|
225
|
+
styles = [MG, G if avail > 0 else DIM, G, DIM, G if avail > 0 else Y]
|
|
226
|
+
spot_rows.append((cells, styles, f"spot:{gt}", "spot"))
|
|
227
|
+
|
|
228
|
+
headers = ["GPU Type", "Avail", "MaxRes", "Total", "Status"]
|
|
229
|
+
all_cells = [headers] + [r[0] for r in rows] + [s[0] for s in spot_rows]
|
|
230
|
+
W = [max(len(str(rc[i])) for rc in all_cells) for i in range(5)]
|
|
231
|
+
|
|
232
|
+
def _bar(left, mid, right):
|
|
233
|
+
return left + mid.join("─" * (w + 2) for w in W) + right
|
|
213
234
|
|
|
214
|
-
#
|
|
215
|
-
|
|
216
|
-
_all_cells = [headers] + [r[0] for r in data_rows] + [s[0] for s in spot_data]
|
|
217
|
-
widths = [max(len(str(row[i])) for row in _all_cells) for i in range(4)]
|
|
235
|
+
def _line(cells): # plain string row (header / mig / maint), inside the box
|
|
236
|
+
return "│" + "│".join(f" {str(c):<{W[i]}} " for i, c in enumerate(cells)) + "│"
|
|
218
237
|
|
|
219
|
-
def
|
|
220
|
-
|
|
221
|
-
|
|
238
|
+
def _ft(cells, styles): # colored row -> FormattedText for a Choice
|
|
239
|
+
toks = [("class:separator", "│")]
|
|
240
|
+
for i, c in enumerate(cells):
|
|
241
|
+
toks.append((styles[i], f" {str(c):<{W[i]}} "))
|
|
242
|
+
toks.append(("class:separator", "│"))
|
|
243
|
+
return toks
|
|
222
244
|
|
|
223
245
|
console.print()
|
|
224
|
-
choices = [questionary.Separator(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
choices.append(questionary.Choice(title=title, value=value, disabled="maintenance"))
|
|
246
|
+
choices = [questionary.Separator(_bar("┌", "┬", "┐")),
|
|
247
|
+
questionary.Separator(_line(headers)),
|
|
248
|
+
questionary.Separator(_bar("├", "┼", "┤"))]
|
|
249
|
+
if not rows:
|
|
250
|
+
choices.append(questionary.Separator(_line(["(none)", "", "", "", ""])))
|
|
251
|
+
for cells, styles, value, kind in rows:
|
|
252
|
+
if kind in ("mig", "maint"):
|
|
253
|
+
choices.append(questionary.Separator(_line(cells)))
|
|
233
254
|
else:
|
|
234
|
-
choices.append(questionary.Choice(title=
|
|
255
|
+
choices.append(questionary.Choice(title=_ft(cells, styles), value=value))
|
|
235
256
|
|
|
236
|
-
if
|
|
237
|
-
choices.append(questionary.Separator("
|
|
238
|
-
for cells,
|
|
239
|
-
choices.append(questionary.Choice(title=
|
|
257
|
+
if spot_rows:
|
|
258
|
+
choices.append(questionary.Separator(_bar("├", "┼", "┤")))
|
|
259
|
+
for cells, styles, value, _k in spot_rows:
|
|
260
|
+
choices.append(questionary.Choice(title=_ft(cells, styles), value=value))
|
|
240
261
|
|
|
241
|
-
choices.append(questionary.Separator("
|
|
262
|
+
choices.append(questionary.Separator(_bar("└", "┴", "┘")))
|
|
263
|
+
choices.append(questionary.Separator(" "))
|
|
242
264
|
if _hide_spot:
|
|
243
265
|
choices.append(questionary.Choice(
|
|
244
266
|
title="⚡ Show spot options (us-east-1, ~70% cheaper, may be preempted)",
|
|
@@ -251,7 +273,8 @@ def select_gpu_type_interactive(
|
|
|
251
273
|
while True:
|
|
252
274
|
try:
|
|
253
275
|
answer = questionary.select(
|
|
254
|
-
"Select GPU type (
|
|
276
|
+
"Select GPU type — ↑/↓ then Enter (MIG: pick its parent GPU):",
|
|
277
|
+
choices=choices, style=custom_style
|
|
255
278
|
).ask()
|
|
256
279
|
|
|
257
280
|
if answer == "_refresh":
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "gpu-dev"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.4"
|
|
8
8
|
description = "CLI + Python SDK for PyTorch GPU developer server reservations"
|
|
9
9
|
authors = [{name = "PyTorch Team"}]
|
|
10
10
|
readme = "cli-tools/gpu-dev-cli/README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/availability_updater/index.py
RENAMED
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/migration/tag_largest_snapshots.py
RENAMED
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_expiry/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/reservation_processor/index.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/lambda/shared/k8s_resource_tracker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/backfill_snapshot_contents.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/migrations/migrate_disks_to_named.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gpu_dev-0.7.3 → gpu_dev-0.7.4}/terraform-gpu-devservers/templates/user-data-self-managed.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|