cuopt-debugging

tarafından nvidia

cuOpt LP/MILP sorunlarını hata ayıklama, hatalar, yanlış sonuçlar, uygulanamaz çözümler, performans sorunları ve durum kodları dahil. Kullanıcı şunu söylediğinde kullan…

npx skills add https://github.com/nvidia/cuopt-examples --skill cuopt-debugging

cuOpt Debugging Skill

Diagnose and fix issues with cuOpt LP/MILP solutions, errors, and performance.

Before You Start: Required Questions

Ask these to understand the problem:

  1. What's the symptom?

    • Error message?
    • Wrong/unexpected results?
    • Empty solution?
    • Performance too slow?
  2. What's the status?

    • problem.Status.name — what value does it show?
  3. Can you share?

    • The error message (exact text)
    • The code that produces it
    • Problem size (variables, constraints)

Quick Diagnosis by Symptom

"Solution is empty/None but status looks OK"

Most common cause: Wrong status string case

# ❌ WRONG - "OPTIMAL" never matches, silently fails
if problem.Status.name == "OPTIMAL":
    print(problem.ObjValue)  # Never runs!

# ✅ CORRECT - use PascalCase
if problem.Status.name in ["Optimal", "FeasibleFound"]:
    print(problem.ObjValue)

Diagnostic code:

print(f"Actual status: '{problem.Status.name}'")
print(f"Matches 'Optimal': {problem.Status.name == 'Optimal'}")
print(f"Matches 'OPTIMAL': {problem.Status.name == 'OPTIMAL'}")

"Objective value is wrong/zero"

Check if variables are actually used:

for var in problem.getVariables():
    print(f"{var.VariableName} = {var.Value}")
print(f"Objective: {problem.ObjValue}")

# Or with direct variable references
for var in [x, y, z]:
    print(f"{var.VariableName}: {var.getValue()}")

Common causes:

  • Constraints too restrictive (all zeros is feasible)
  • Objective coefficients have wrong sign
  • Wrong variable in objective

"Infeasible" status

For LP/MILP:

if problem.Status.name in ["PrimalInfeasible", "Infeasible"]:
    print("Problem has no feasible solution")
    # Review constraints for conflicts
    for c in problem.getConstraints():
        print(f"{c.ConstraintName}")

Common causes:

  • Conflicting constraints (x <= 5 AND x >= 10)
  • Bounds too tight
  • Missing a "slack" variable for soft constraints

"Integer variable has fractional value"

# Check how variable was defined
int_var = problem.addVariable(
    lb=0, ub=10,
    vtype=INTEGER,  # Must be INTEGER, not CONTINUOUS
    name="count"
)

# Also check if status is actually optimal
if problem.Status.name == "FeasibleFound":
    print("Warning: not fully optimal, may have fractional intermediate values")

"Unbounded" status

Problem has no finite optimum:

if problem.Status.name in ["DualInfeasible", "Unbounded"]:
    print("Problem is unbounded - objective can improve infinitely")

Common causes:

  • Missing variable upper/lower bounds
  • Constraint direction wrong (>= instead of <=)
  • Missing constraints

"Maximum recursion depth exceeded" when building expressions

Building large objectives or constraints with many chained + operations can hit Python recursion limits. Use LinearExpression instead:

from cuopt.linear_programming.problem import LinearExpression

# Instead of: expr = c1*v1 + c2*v2 + ... + cn*vn (many terms)
vars_list = [v1, v2, v3, ...]
coeffs_list = [c1, c2, c3, ...]
expr = LinearExpression(vars_list, coeffs_list, constant=0.0)
problem.setObjective(expr, sense=MINIMIZE)

See the LP/MILP "Building large expressions" section and reference models in the project for examples.

OutOfMemoryError

Check problem size:

print(f"Variables: {len(problem.getVariables())}")
print(f"Constraints: {len(problem.getConstraints())}")

Mitigations:

  • Reduce problem size
  • Use sparse constraint matrix
  • Set time limit to get partial solution

Status Code Reference

LP Status Values

StatusMeaning
OptimalFound optimal solution
PrimalFeasibleFound feasible but may not be optimal
PrimalInfeasibleNo feasible solution exists
DualInfeasibleProblem is unbounded
TimeLimitStopped due to time limit
IterationLimitStopped due to iteration limit
NumericalErrorNumerical issues encountered
NoTerminationSolver didn't converge

MILP Status Values

StatusMeaning
OptimalFound optimal solution
FeasibleFoundFound feasible, within gap tolerance
InfeasibleNo feasible solution exists
UnboundedProblem is unbounded
TimeLimitStopped due to time limit
NoTerminationNo solution found yet

Performance Debugging

Slow LP/MILP Solve

settings = SolverSettings()
settings.set_parameter("log_to_console", 1)  # See progress
settings.set_parameter("time_limit", 60)      # Don't wait forever

# For MILP, accept good-enough solution
settings.set_parameter("mip_relative_gap", 0.05)  # 5% gap

Check Solve Time

problem.solve(settings)
print(f"Solve time: {problem.SolveTime:.2f} seconds")

Diagnostic Checklist

□ Status checked with correct case (PascalCase)?
□ All variables have correct vtype (INTEGER vs CONTINUOUS)?
□ Constraint directions correct (<= vs >= vs ==)?
□ Objective sense correct (MINIMIZE vs MAXIMIZE)?
□ Variable bounds specified where needed?

Diagnostic Code Snippets

See resources/diagnostic_snippets.md for copy-paste diagnostic code:

  • Status checking
  • Variable inspection
  • Constraint analysis
  • Memory and performance checks

Interpreting Dual Values & Reduced Costs

When an LP/QP solve returns dual values and you need the decision read — which constraint is the binding bottleneck, what relaxing it is worth, and which unused option is the closest near-miss — see resources/interpreting_duals.md. (Integer models / MILP — and quadratic constraints — return no usable duals; that reference covers the fallback.)

When to Escalate

File a GitHub issue if:

  • Reproducible bug with minimal example
  • Include: cuOpt version, CUDA version, error message, minimal repro code

nvidia tarafından daha fazla skill

compileiq-debug
nvidia
Bir şeyler yanlış olduğunda kullanın: Search() takılıyor, tüm değerlendirmeler INVALID_SCORE döndürüyor, puanlar iyileşmiyor, her yapılandırma aynı sayıyı döndürüyor, ptxas hataları…
create-github-pr
nvidia
gh CLI kullanarak GitHub pull request'leri oluşturun. Kullanıcı yeni bir PR oluşturmak, kodu incelemeye göndermek veya bir pull request açmak istediğinde kullanın. Tetikleyici anahtar kelimeler -…
nemoclaw-maintainer-cross-issue-sweep
nvidia
Diğer açık sorunları tarayarak, belirli bir PR'ın da düzeltebileceği veya yanlışlıkla bozabileceği sorunları bulur. Dosya:satır… ile bitişik düzeltme fırsatlarını ve çelişki risklerini çıktı olarak verir.
fhir-basics
nvidia
Ajanlara FHIR R4 API'lerinin nasıl çalıştığını, hangi kaynakların mevcut olduğunu, arama parametreleriyle nasıl sorgulanacağını ve tüm yanıt formatlarının nasıl doğru şekilde ayrıştırılacağını öğretir…
compileiq-validate-result
nvidia
Bir arama tamamlandıktan SONRA ve herhangi bir hızlandırma talep etmeden veya bir ACF göndermeden ÖNCE kullanın. dump_results CSV dosyasını yükler, en iyi K adayı (tek amaçlı) çıkarır…
changelog-audit
nvidia
Bir sürüm öncesinde Warp CHANGELOG.md dosyasını denetle: kayıp girdileri kurtar, kullanıcı etkisine göre sırala, girdi dilini iyileştir, satır kaydırma yap ve (sürüm dalı modunda) karşılaştırmayı artır…
maintain-dynamic-plugins
nvidia
NeMo Relay dinamik eklenti yükleyicilerini, manifestolarını, Rust yerel SDK'larını, gRPC işçi protokolünü, Python işçi SDK'sını, dokümantasyonu, testleri ve sürüm iş akışı kapsamını korur
dgx-diagnose
nvidia
Yaygın DGX Station GB300 sorunlarını teşhis edin — CUDA çökmeleri, yanlış GPU hedefleme, vLLM/SGLang konteyner hataları, MIG durumu sorunları, NVLink/Fabric Manager hataları,…