{"record":{"id":"ee1d39ffcab1c67a","repo":"sgl-project/sglang","slug":"gpu-ids-gpu-ids-must-be-non-negative-gpu-id","errorCode":null,"errorMessage":"--gpu-ids GPU ids must be non-negative: {gpu_id}","messagePattern":"--gpu-ids GPU ids must be non-negative: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/utils/common.py","lineNumber":105,"sourceCode":"    else:\n        values = list(gpu_ids)\n\n    tokens: list[str] = []\n    for value in values:\n        tokens.extend(part for part in str(value).replace(\",\", \" \").split() if part)\n    if not tokens:\n        return []\n\n    parsed: list[int] = []\n    for token in tokens:\n        try:\n            gpu_id = int(token)\n        except ValueError as exc:\n            raise ValueError(\n                f\"--gpu-ids contains a non-integer GPU id: {token}\"\n            ) from exc\n        if gpu_id < 0:\n            raise ValueError(f\"--gpu-ids GPU ids must be non-negative: {gpu_id}\")\n        parsed.append(gpu_id)\n\n    if len(set(parsed)) != len(parsed):\n        raise ValueError(f\"--gpu-ids contains duplicate GPU ids: {parsed}\")\n    return parsed\n\n\ndef parse_size(size: str) -> tuple[int | None, int | None]:\n    try:\n        parts = size.lower().replace(\" \", \"\").split(\"x\")\n        if len(parts) != 2:\n            raise ValueError\n        return int(parts[0]), int(parts[1])\n    except ValueError:\n        return None, None\n\n\ndef parse_tcp_host_port(value: str | None, field_name: str) -> tuple[str, int]:","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/utils/common.py#L87-L123","documentation":"Thrown by normalize_gpu_ids when a parsed GPU id is negative. GPU ordinals are non-negative, so a token like -1 fails validation immediately after int() succeeds.","triggerScenarios":"Passing --gpu-ids \"-1\" or \"0,-3\" — int() parses fine but the value fails the gpu_id < 0 check in normalize_gpu_ids (called from config __post_init__).","commonSituations":"Attempting to express 'exclude GPU 1' with negative notation, or a misconfigured environment variable that contains a leading minus sign.","solutions":["Use only non-negative GPU ordinals (device indices as seen by CUDA), e.g. --gpu-ids 0,1","To exclude GPUs, enumerate the ones you want rather than using negative ids","If exclusion is genuinely needed, set CUDA_VISIBLE_DEVICES upstream and use the remapped indices"],"exampleFix":"# before\n--gpu-ids 0,-1\n# after\nCUDA_VISIBLE_DEVICES=0 --gpu-ids 0","handlingStrategy":"validation","validationCode":"ids = [int(t) for t in gpu_ids_str.split(\",\")]\nassert all(i >= 0 for i in ids), f\"negative gpu id in {ids}\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never use negative notation for GPU exclusion; enumerate wanted GPUs explicitly"],"tags":["gpu","cli-arguments","validation"],"backgroundTag":"invalid-cli-argument","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}