SuperAPI AI 工具集

cuopt-server-api-python

部署与运维

查看项目

更新于 10-16 07:24

技能介绍

用途:当需要部署 cuOpt REST 服务器或编写调用它的客户端时使用,包括选择部署目标、把问题映射到 HTTP 端点、在 Python API 与 REST 字段名之间转换,以及排查被拒绝的请求载荷。

前提:需要带 CUDA 驱动的 NVIDIA GPU(Docker 需 --gpus all);已安装 cuopt-server,或使用带 NVIDIA Container Toolkit 的 Docker。Python 客户端需要 requests。服务器本身不要求 API key 或认证令牌。

支持的问题类型:Routing、LP、MILP 支持;QP 不支持(REST 不暴露二次目标,需用 Python 或 C API)。

启动服务器: 开发模式:python -m cuopt_server.cuopt_service --ip 0.0.0.0 --port 8000 Docker:docker run --gpus all -d -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:latest-cu13 镜像标签需与驱动的 CUDA 主版本匹配(latest-cu12 或 latest-cu13),优先使用这些而非特定 CUDA+Python 标签。生产环境应固定版本,使用完整发布标签或不可变 digest,latest-* 标签可变。

验证:请求 GET /cuopt/health(如 http://localhost:8000/cuopt/health),返回 HTTP 200 表示健康。

调用流程:POST /cuopt/request 获得 reqId;轮询 /cuopt/solution/{reqId} 直到结果就绪;解析响应。reqId 视为不可信输入,插入轮询 URL 前需校验(如 re.fullmatch(r"[A-Za-z0-9_-]{1,64}", req_id)),并为每个请求设置显式超时。

字段命名(REST 与 Python API 不同):order_locations→task_locations;set_order_time_windows()→task_time_windows;service_times 相同。使用 travel_time_matrix_data 而非 transit_time_matrix_data。capacities 每维度一个内层列表,用 [[50, 50]] 而非 [[50], [50]]。

排查:422 多为字段名不符 schema,可查 /cuopt.yaml;fleet_data 的 422 常因 capacities 嵌套错误;连接被拒检查服务状态与绑定;Docker 容器退出多为容器看不到 GPU;轮询无结果时同时增大 solver_config.time_limit 与轮询次数。失败请求需记录 reqId 与完整响应体。

限制:无认证与 TLS,凡能访问端口者均可提交任务,应置于网关后并仅作可信网络端点;结果需轮询获取,无推送/Webhook;每服务器进程一次只解一个请求,并发需多副本。

可运行资产位于 assets/ 下:vrp_simple、vrp_basic、pdp_basic、lp_basic、milp_basic,使用 Python requests 并接受 --server(默认 http://localhost:8000)。更多细节见 assets/README.md。