con un clic
nightlygpu
Diagnose GPU contention failures in nightly E2E runs
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Diagnose GPU contention failures in nightly E2E runs
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Generate weekly nightly E2E trend report with failure patterns and success rates
Analyze nightly E2E job failures across llm-d repos. Smart router to sub-skills based on failure type.
Diagnose deployment failures in nightly E2E runs (helmfile, helm, install.sh)
Diagnose infrastructure and authentication failures in nightly E2E runs (GCP, AWS, runner issues)
Diagnose pod readiness timeout failures in nightly E2E runs
Full root cause analysis for nightly E2E failures that don't fit simple categories
| name | nightly:gpu |
| description | Diagnose GPU contention failures in nightly E2E runs |
Diagnose failures caused by insufficient GPU availability in nightly E2E runs.
export LOG_DIR=/tmp/llm-d/nightly-rca
mkdir -p $LOG_DIR
Check GPU availability step fails with:
::error::Insufficient GPUs: need N, have M available
RUN_ID=<run-id>
REPO=llm-d/llm-d
# Download run logs to find GPU status table
unset GITHUB_TOKEN && gh api "repos/$REPO/actions/runs/$RUN_ID/logs" \
> $LOG_DIR/run-$RUN_ID.zip 2>/dev/null
cd $LOG_DIR && unzip -o "run-$RUN_ID.zip" -d "run-$RUN_ID" 2>/dev/null; cd -
# Extract GPU status from logs
grep -rE "Total cluster GPUs|Currently allocated|Available|Required|Recommended" \
$LOG_DIR/run-$RUN_ID/ 2>/dev/null
If you have cluster access:
# OCP cluster
export KUBECONFIG=<path>
# GPU allocation by namespace
kubectl get pods --all-namespaces -o json | jq -r '
[.items[] |
select(.status.phase == "Running" or .status.phase == "Pending") |
select(.spec.containers[]?.resources.requests["nvidia.com/gpu"] != null) |
{
namespace: .metadata.namespace,
name: .metadata.name,
gpus: (.spec.containers[].resources.requests["nvidia.com/gpu"] // "0" | tonumber)
}] | group_by(.namespace) | .[] |
{
namespace: .[0].namespace,
total_gpus: ([.[].gpus] | add),
pods: ([.[].name])
}' > $LOG_DIR/gpu-allocation.json
Multiple nightly runs may overlap and compete for GPUs. Cross-reference the schedule:
| Time (UTC) | OCP | GPU Req |
|---|---|---|
| 00:00 | inference-sched | 2 |
| 00:30 | pd-disagg | 2 |
| 01:00 | precise-prefix | 2 |
| 01:30 | sim-accel | 0 |
| 02:00 | tiered-prefix | 1 |
| 02:30 | wide-ep-lws | 2 |
If a prior run's cleanup didn't finish before the next run's GPU check, the prior run's pods still hold GPUs.
Previous nightly runs that failed cleanup can leave GPU-holding pods behind:
# Find nightly namespaces that shouldn't exist
kubectl get ns | grep -E "nightly|llm-d-nightly"
# Find GPU pods in nightly namespaces
kubectl get pods -A -o json | jq -r '
.items[] | select(
(.metadata.namespace | test("nightly")) and
(.spec.containers[]?.resources.requests["nvidia.com/gpu"] != null)
) | "\(.metadata.namespace)/\(.metadata.name) — \(.spec.containers[0].resources.requests["nvidia.com/gpu"]) GPUs"'
If the cluster is shared and GPUs are temporarily busy:
# Rerun with GPU wait (30 min)
unset GITHUB_TOKEN && gh workflow run "nightly-e2e-<guide>.yaml" \
--repo llm-d/llm-d \
-f gpu_wait_timeout=30
# Delete leaked nightly namespaces (CAREFUL: verify these are stale)
for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name" | grep "nightly"); do
echo "Checking $ns..."
AGE=$(kubectl get ns "$ns" -o jsonpath='{.metadata.creationTimestamp}')
echo " Created: $AGE"
kubectl get pods -n "$ns" --no-headers | wc -l
done
# Only delete if confirmed stale:
# kubectl delete ns <stale-nightly-ns> --timeout=120s
If GPU contention is recurring:
gpu_wait_timeout to callersallow_gpu_preemption (GKE/CKS only)nightly — Parent routernightly:pods — Pod readiness (often follows GPU issues)