{"record":{"id":"df4829303da5f5bc","repo":"sgl-project/sglang","slug":"cuda-vmm-multimodal-transport-selected-posix-fd-b","errorCode":null,"errorMessage":"CUDA VMM multimodal transport selected POSIX_FD, but this pool requires FABRIC","messagePattern":"CUDA VMM multimodal transport selected POSIX_FD, but this pool requires FABRIC","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"critical","filePath":"python/sglang/srt/utils/cuda_vmm_transport_utils.py","lineNumber":217,"sourceCode":"        self._closed = False\n\n        self._allocation: VmmReservation | None = None\n        self.allocation_size = 0\n        self.shareable_handle = None\n        self.memory_pool = None\n        self._fd_broker: _PosixFdBroker | None = None\n        self.posix_socket_path: str | None = None\n        self._recycle_stream = None\n        self._recycle_thread = None\n\n        drv = _get_cuda_driver()\n        fabric = drv.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_FABRIC\n        posix_fd = (\n            drv.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR\n        )\n        self.handle_type = get_device_allocation_handle_type(self.device_index)\n        if self.handle_type == posix_fd and not allow_posix_fallback:\n            raise RuntimeError(\n                \"CUDA VMM multimodal transport selected POSIX_FD, but this \"\n                \"pool requires FABRIC\"\n            )\n        self.use_fabric = self.handle_type == fabric\n        try:\n            self._allocate(memory_size)\n        except RuntimeError as error:\n            if not allow_posix_fallback or self.handle_type != fabric:\n                raise\n            logger.warning(\n                \"CUDA FABRIC VMM allocation is unavailable; falling back to \"\n                \"a POSIX FD handle: %s\",\n                error,\n            )\n            self.handle_type = posix_fd\n            self.use_fabric = False\n            self._allocate(memory_size)\n        try:","sourceCodeStart":199,"sourceCodeEnd":235,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/utils/cuda_vmm_transport_utils.py#L199-L235","documentation":"The device only supports the POSIX FD allocation handle type, but this VMM pool requires FABRIC handles (GPUDirect/fabric-attached memory) and allow_posix_fallback is False. The pool refuses to start rather than silently degrading.","triggerScenarios":"Running the multimodal VMM transport on hardware/driver combos where CU_MEM_HANDLE_TYPE_FABRIC is unavailable while the code path demands FABRIC interconnect (multi-node NVLink/fabric setups), with the fallback flag disabled.","commonSituations":"Single-node non-fabric GPUs, older drivers without fabric handle support, or a new deployment copied from a fabric cluster config.","solutions":["Enable allow_posix_fallback if the topology is safe for FD-based sharing","Use hardware/driver that supports fabric handles for this pool","Or select a different multimodal transport that does not require FABRIC"],"exampleFix":"# before\npool = CudaVmmTransportPool(..., allow_posix_fallback=False)\n# after\npool = CudaVmmTransportPool(..., allow_posix_fallback=True)  # single-node / FD sharing OK","handlingStrategy":"fallback","validationCode":"from cuda import cuda as drv\n# probe handle support before constructing the pool\nhandle = get_device_allocation_handle_type(gpu_id)","typeGuard":null,"tryCatchPattern":"try:\n    pool = Pool(..., allow_posix_fallback=False)\nexcept RuntimeError as e:\n    if \"requires FABRIC\" in str(e):\n        pool = Pool(..., allow_posix_fallback=True)","preventionTips":["Probe device allocation handle types at startup","Match transport choice to GPU topology (fabric vs single-node)"],"tags":["cuda","vmm","fabric","gpu-topology","runtimeerror"],"backgroundTag":"unsupported-gpu-capability","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}