NVIDIA / NVIDIA/cuopt

[NUMERICAL_ISSUES] Documented 3-variable convex QP returns NumericalError in cuDSS symbolic analysis

Open
#1,861 1 comment 0 reactions 1 assignee View on GitHub

@rg20 is already working on this.

Since Sep 14, 2026.

awaiting response
Dominant language
Cuda
Stars
1k
Forks
233
Avg merge
4d 4h
Merged PRs (30d)
95

Description

Describe the numerical issue

The documented three-variable continuous convex portfolio QP returns NumericalError on a pip/uv-installed cuOpt 26.2.0 environment. The runtime prints a cuDSS CSR creation failure during symbolic analysis and all variable values remain zero.

This is the same model shape shown in the maintained QP example: a PSD quadratic objective, three bounded continuous variables, one budget equality, and one minimum-return inequality.

Steps / minimal reproduction

from cuopt.linear_programming.problem import CONTINUOUS, MINIMIZE, Problem
from cuopt.linear_programming.solver_settings import SolverSettings

problem = Problem("documented_portfolio_qp")
x = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_a")
y = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_b")
z = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_c")

problem.setObjective(
    0.04*x*x + 0.02*y*y + 0.01*z*z
    + 0.02*x*y + 0.01*x*z + 0.016*y*z,
    sense=MINIMIZE,
)
problem.addConstraint(x + y + z == 1, name="budget")
problem.addConstraint(0.12*x + 0.08*y + 0.05*z >= 0.08, name="min_return")

settings = SolverSettings()
settings.set_parameter("time_limit", 60)
problem.solve(settings)
print(problem.Status.name, x.getValue(), y.getValue(), z.getValue())

Observed output:

FAILED: CUDSS call ended unsuccessfully with status = 3, details: "cudssMatrixCreateCsr"
Error in symbolic analysis
Barrier Solve status A numerical error was encountered.
NumericalError 0.0 0.0 0.0

Expected vs actual behavior

Expected: the feasible convex QP returns Optimal or another documented usable primal status with nonzero weights satisfying the constraints.

Actual: NumericalError; cuDSS CSR creation fails during symbolic analysis; values remain all zero. Status gating is essential because the zero vector is not a feasible solution.

Environment details

  • Environment location: bare-metal remote Linux GPU host
  • Install: cuopt-cu12 wheel installed with uv
  • OS: Ubuntu 22.04, Linux 5.15
  • Python: 3.12.14
  • GPU: NVIDIA A100-PCIE-40GB
  • Driver: 580.173.02
  • CUDA bindings: 12.9.7
  • cuopt-cu12: 26.2.0
  • nvidia-cudss-cu12: 0.8.0.10
  • NumPy: 2.2.6

Additional context

The same runtime solves LP and MILP examples successfully. This blocks a continuous-QP subproblem in an otherwise supported active-set decomposition. A useful resolution would include a supported cuOpt/cuDSS package matrix and this documented QP as an installation smoke test.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.