git: 95b8eea61d9f - main - misc/py-vllm: update 0.19.0 → 0.20.2
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 11 May 2026 07:15:37 UTC
The branch main has been updated by yuri:
URL: https://cgit.FreeBSD.org/ports/commit/?id=95b8eea61d9fe9a9ecda30412e057b7c43107dff
commit 95b8eea61d9fe9a9ecda30412e057b7c43107dff
Author: Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-05-11 07:12:21 +0000
Commit: Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-05-11 07:15:18 +0000
misc/py-vllm: update 0.19.0 → 0.20.2
---
misc/py-vllm/Makefile | 29 ++++++-----
misc/py-vllm/distinfo | 6 +--
.../py-vllm/files/patch-cmake_cpu__extension.cmake | 41 +++++++++++++--
misc/py-vllm/files/patch-pyproject.toml | 13 ++---
.../files/patch-vllm_platforms_____init____.py | 4 +-
misc/py-vllm/files/patch-vllm_platforms_cpu.py | 36 ++-----------
.../files/patch-vllm_utils_cpu__resource__utils.py | 59 ++++++++++++++++++++++
.../files/patch-vllm_v1_worker_cpu__worker.py | 12 -----
8 files changed, 127 insertions(+), 73 deletions(-)
diff --git a/misc/py-vllm/Makefile b/misc/py-vllm/Makefile
index 17823c07e468..b871817bc39c 100644
--- a/misc/py-vllm/Makefile
+++ b/misc/py-vllm/Makefile
@@ -1,6 +1,5 @@
PORTNAME= vllm
-DISTVERSION= 0.19.0
-PORTREVISION= 1
+DISTVERSION= 0.20.2
CATEGORIES= misc python # machine-learning
MASTER_SITES= PYPI \
https://github.com/uxlfoundation/oneDNN/archive/refs/tags/:onednn_src
@@ -17,38 +16,39 @@ LICENSE= APACHE20
LICENSE_FILE= ${WRKSRC}/LICENSE
BUILD_DEPENDS= ${LOCALBASE}/llvm19/bin/clang:devel/llvm19 \
- ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.0:devel/py-Jinja2@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.6:devel/py-Jinja2@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}ninja>=1.13:devel/py-ninja@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}packaging>=24.2:devel/py-packaging@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}pytorch>=2.10.0:misc/py-pytorch@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pytorch>=2.11.0:misc/py-pytorch@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}setuptools>=63.0:devel/py-setuptools@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}setuptools-scm>=8.0:devel/py-setuptools-scm@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
LIB_DEPENDS= libabsl_status.so:devel/abseil \
libprotobuf.so:devel/protobuf
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.13.3:www/py-aiohttp@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}anthropic>0:misc/py-anthropic@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}anthropic>=0.71.0:misc/py-anthropic@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}blake3>0:security/py-blake3@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}cachetools>0:devel/py-cachetools@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}cbor2>0:devel/py-cbor2@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}cloudpickle>0:devel/py-cloudpickle@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}compressed-tensors>=0.14.0.1:misc/py-compressed-tensors@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}compressed-tensors>=0.15.0.1:misc/py-compressed-tensors@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}depyf>=0.20.0:devel/py-depyf@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}diskcache>=5.6.3:devel/py-diskcache@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}einops>0:misc/py-einops@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}fastapi>0:www/py-fastapi@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}fastapi>=0.115.0:www/py-fastapi@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}filelock>=3.16.1:sysutils/py-filelock@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}gguf>=0.17.0:misc/py-gguf@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}ijson>0:devel/py-ijson@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.0:devel/py-Jinja2@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>=3.1.6:devel/py-Jinja2@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}lark>=1.2.2:devel/py-lark@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}llguidance>=1.3.0:textproc/py-llguidance@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}lm-format-enforcer>=0.11.3:misc/py-lm-format-enforcer@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}mcp>0:misc/py-mcp@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}mistral-common>=1.10.0:misc/py-mistral-common@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}mistral-common>=1.11.0:misc/py-mistral-common@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}model-hosting-container-standards>=0.1.13:misc/py-model-hosting-container-standards@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}msgspec>0:devel/py-msgspec@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}ninja>=1.13:devel/py-ninja@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}numba>=0.65.0:devel/py-numba@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}numpy>=1.25:math/py-numpy@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}openai>=2.0.0:misc/py-openai@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}openai-harmony>=0.0.3:misc/py-openai-harmony@${PY_FLAVOR} \
@@ -56,8 +56,8 @@ RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.13.3:www/py-aiohttp@${PY_FLAVOR}
${PYTHON_PKGNAMEPREFIX}opentelemetry-exporter-otlp>=1.27.0:devel/py-opentelemetry-exporter-otlp@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}opentelemetry-sdk>=1.27.0:devel/py-opentelemetry-sdk@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}opentelemetry-semantic-conventions-ai>=0.4.1:devel/py-opentelemetry-semantic-conventions-ai@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}opencv-python-headless>=4.11.0:graphics/py-opencv-python-headless@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}outlines-core>=0.2.11:textproc/py-outlines-core@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}opencv-python-headless>=4.13.0:graphics/py-opencv-python-headless@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}outlines-core>=0.2.14:textproc/py-outlines-core@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}partial-json-parser>0:textproc/py-partial-json-parser@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pillow>=10.0.0:graphics/py-pillow@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}prometheus-client>=0.18.0:net-mgmt/py-prometheus-client@${PY_FLAVOR} \
@@ -68,6 +68,7 @@ RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.13.3:www/py-aiohttp@${PY_FLAVOR}
${PYTHON_PKGNAMEPREFIX}pybase64>0:devel/py-pybase64@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pydantic2>=2.12.0:devel/py-pydantic2@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}python-json-logger>0:devel/py-python-json-logger@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pytorch>=2.11.0:misc/py-pytorch@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyyaml>0:devel/py-pyyaml@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pyzmq>=25.0.0:net/py-pyzmq@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}regex>0:textproc/py-regex@${PY_FLAVOR} \
@@ -75,13 +76,15 @@ RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}aiohttp>=3.13.3:www/py-aiohttp@${PY_FLAVOR}
${PYTHON_PKGNAMEPREFIX}sentencepiece>0:textproc/py-sentencepiece@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}setproctitle>0:devel/py-setproctitle@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}setuptools>=63.0:devel/py-setuptools@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}six>=1.16.0:devel/py-six@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}tiktoken>=0.6.0:textproc/py-tiktoken@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}tokenizers>=0.21.1:textproc/py-tokenizers@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}torchaudio>=0:audio/py-torchaudio@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}torchvision>=0:misc/py-torchvision@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}tqdm>=4.0:misc/py-tqdm@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}uvloop>=0.20.0:devel/py-uvloop@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}transformers>=4.56.0:misc/py-transformers@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}pytorch>=2.10.0:misc/py-pytorch@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.10:devel/py-typing-extensions@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}uvloop>=0.20.0:devel/py-uvloop@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}watchfiles>0:devel/py-watchfiles@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}xgrammar>=0.1.32:misc/py-xgrammar@${PY_FLAVOR}
TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}datasets>=4.8.2:misc/py-datasets@${PY_FLAVOR} \
diff --git a/misc/py-vllm/distinfo b/misc/py-vllm/distinfo
index 579dac429ed1..79c6d36a7f18 100644
--- a/misc/py-vllm/distinfo
+++ b/misc/py-vllm/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1775582925
-SHA256 (vllm-0.19.0.tar.gz) = 81e59cf87175e7a62eb8d9acf5989484bbd17089d5eface353f89067bda282d9
-SIZE (vllm-0.19.0.tar.gz) = 31071745
+TIMESTAMP = 1778478277
+SHA256 (vllm-0.20.2.tar.gz) = 58809377798c5335c6e2fe30092abda54d9200b5b8a717b3735a63f5daa0e383
+SIZE (vllm-0.20.2.tar.gz) = 33526607
SHA256 (v3.10.tar.gz) = ba5834a1fdbb6d1c1b1c065dfd789438e7aa42c03fc52d92c02af85d78d1c75c
SIZE (v3.10.tar.gz) = 13507701
diff --git a/misc/py-vllm/files/patch-cmake_cpu__extension.cmake b/misc/py-vllm/files/patch-cmake_cpu__extension.cmake
index 9b7998f407f8..6a7d97be5543 100644
--- a/misc/py-vllm/files/patch-cmake_cpu__extension.cmake
+++ b/misc/py-vllm/files/patch-cmake_cpu__extension.cmake
@@ -1,4 +1,4 @@
---- cmake/cpu_extension.cmake.orig 2026-04-03 01:57:10 UTC
+--- cmake/cpu_extension.cmake.orig 2026-05-10 07:34:36 UTC
+++ cmake/cpu_extension.cmake
@@ -20,6 +20,11 @@ set (ENABLE_NUMA TRUE)
@@ -12,7 +12,40 @@
#
# Check the compile flags
#
-@@ -33,12 +38,25 @@ if (NOT MACOSX_FOUND)
+@@ -31,16 +36,23 @@ else()
+ "-fopenmp"
+ "-DVLLM_CPU_EXTENSION")
+
+- # locate PyTorch's libgomp (e.g. site-packages/torch.libs/libgomp-947d5fa1.so.1.0.0)
+- # and create a local shim dir with it
+- vllm_prepare_torch_gomp_shim(VLLM_TORCH_GOMP_SHIM_DIR)
++ if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
++ find_library(OPEN_MP
++ NAMES omp
++ REQUIRED
++ )
++ else()
++ # locate PyTorch's libgomp (e.g. site-packages/torch.libs/libgomp-947d5fa1.so.1.0.0)
++ # and create a local shim dir with it
++ vllm_prepare_torch_gomp_shim(VLLM_TORCH_GOMP_SHIM_DIR)
+
+- find_library(OPEN_MP
+- NAMES gomp
+- PATHS ${VLLM_TORCH_GOMP_SHIM_DIR}
+- NO_DEFAULT_PATH
+- REQUIRED
+- )
++ find_library(OPEN_MP
++ NAMES gomp
++ PATHS ${VLLM_TORCH_GOMP_SHIM_DIR}
++ NO_DEFAULT_PATH
++ REQUIRED
++ )
++ endif()
+ # Set LD_LIBRARY_PATH to include the shim dir at build time to use the same libgomp as PyTorch
+ if (OPEN_MP)
+ set(ENV{LD_LIBRARY_PATH} "${VLLM_TORCH_GOMP_SHIM_DIR}:$ENV{LD_LIBRARY_PATH}")
+@@ -48,12 +60,25 @@ if (NOT MACOSX_FOUND)
endif()
if (NOT MACOSX_FOUND)
@@ -43,7 +76,7 @@
endif()
-@@ -91,9 +109,10 @@ if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64" OR E
+@@ -106,9 +131,10 @@ if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64" OR E
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64" OR ENABLE_X86_ISA)
set(ENABLE_X86_ISA ON)
@@ -57,7 +90,7 @@
endif()
list(APPEND CXX_COMPILE_FLAGS "-mf16c")
list(APPEND CXX_COMPILE_FLAGS_AVX512 ${CXX_COMPILE_FLAGS})
-@@ -407,9 +426,15 @@ if (ENABLE_X86_ISA)
+@@ -446,9 +472,15 @@ if (ENABLE_X86_ISA)
message(STATUS "CPU extension (AVX512F) source files: ${VLLM_EXT_SRC_AVX512}")
message(STATUS "CPU extension (AVX2) source files: ${VLLM_EXT_SRC_AVX2}")
diff --git a/misc/py-vllm/files/patch-pyproject.toml b/misc/py-vllm/files/patch-pyproject.toml
index 5a3bc19a43b2..75946e974d3b 100644
--- a/misc/py-vllm/files/patch-pyproject.toml
+++ b/misc/py-vllm/files/patch-pyproject.toml
@@ -1,20 +1,21 @@
---- pyproject.toml.orig 2026-04-06 20:40:36 UTC
+--- pyproject.toml.orig 2026-05-10 07:34:36 UTC
+++ pyproject.toml
-@@ -1,12 +1,9 @@ requires = [
+@@ -1,12 +1,10 @@ requires = [
[build-system]
- # Should be mirrored in requirements/build.txt
+ # Should be mirrored in requirements/build/cuda.txt
requires = [
- "cmake>=3.26.1",
- "ninja",
"packaging>=24.2",
- "setuptools>=77.0.3,<81.0.0",
-+ "setuptools>=63.0",
++ "setuptools",
"setuptools-scm>=8.0",
-- "torch == 2.10.0",
+- "torch == 2.11.0",
++ "torch",
"wheel",
"jinja2",
]
-@@ -15,8 +12,7 @@ authors = [{name = "vLLM Team"}]
+@@ -15,8 +13,7 @@ authors = [{name = "vLLM Team"}]
[project]
name = "vllm"
authors = [{name = "vLLM Team"}]
diff --git a/misc/py-vllm/files/patch-vllm_platforms_____init____.py b/misc/py-vllm/files/patch-vllm_platforms_____init____.py
index ab6f660d7de3..252857e47061 100644
--- a/misc/py-vllm/files/patch-vllm_platforms_____init____.py
+++ b/misc/py-vllm/files/patch-vllm_platforms_____init____.py
@@ -1,4 +1,4 @@
---- vllm/platforms/__init__.py.orig 2026-04-07 17:26:12 UTC
+--- vllm/platforms/__init__.py.orig 2026-05-09 20:28:19 UTC
+++ vllm/platforms/__init__.py
@@ -58,6 +58,11 @@ def cuda_platform_plugin() -> str | None:
@@ -25,5 +25,5 @@
- "Confirmed CPU platform is available because the machine is MacOS."
+ "Confirmed CPU platform is available because the machine is MacOS or FreeBSD."
)
-
except Exception as e:
+ logger.debug("CPU platform is not available because: %s", str(e))
diff --git a/misc/py-vllm/files/patch-vllm_platforms_cpu.py b/misc/py-vllm/files/patch-vllm_platforms_cpu.py
index ae1db6392125..5896c05ecfe8 100644
--- a/misc/py-vllm/files/patch-vllm_platforms_cpu.py
+++ b/misc/py-vllm/files/patch-vllm_platforms_cpu.py
@@ -1,42 +1,12 @@
---- vllm/platforms/cpu.py.orig 2026-04-03 01:57:10 UTC
+--- vllm/platforms/cpu.py.orig 2026-05-11 06:13:24 UTC
+++ vllm/platforms/cpu.py
-@@ -74,7 +74,8 @@ class CpuPlatform(Platform):
+@@ -44,7 +44,8 @@ class CpuPlatform(Platform):
device_name: str = "cpu"
device_type: str = "cpu"
dispatch_key: str = "CPU"
- dist_backend: str = "gloo"
+ # FreeBSD lacks gloo TCP transport (epoll-based); use fake backend.
+ dist_backend: str = "fake" if sys.platform.startswith("freebsd") else "gloo"
- device_control_env_var = "CPU_VISIBLE_MEMORY_NODES"
+ device_control_env_var = DEVICE_CONTROL_ENV_VAR
@property
-@@ -378,7 +379,28 @@ class CpuPlatform(Platform):
-
- @classmethod
- def get_allowed_cpu_core_node_list(cls) -> tuple[list[int], list[LogicalCPUInfo]]:
-- assert platform.system() == "Linux"
-+ assert platform.system() in ("Linux", "FreeBSD")
-+
-+ if platform.system() == "FreeBSD":
-+ # FreeBSD lacks lscpu -J; treat all CPUs as a single NUMA node.
-+ allowed_cpu_id_set = (
-+ os.sched_getaffinity(0)
-+ if hasattr(os, "sched_getaffinity")
-+ else set(range(os.cpu_count() or 1))
-+ )
-+ logical_cpu_list = [
-+ LogicalCPUInfo(id=cpu_id, physical_core=cpu_id, numa_node=0)
-+ for cpu_id in sorted(allowed_cpu_id_set)
-+ ]
-+ allowed_numa_nodes_list = [0]
-+ env_key = CpuPlatform.device_control_env_var
-+ if env_key in os.environ and os.environ[env_key] != "":
-+ visible_nodes = [int(s) for s in os.environ[env_key].split(",")]
-+ allowed_numa_nodes_list = [
-+ x for x in sorted(list(set(visible_nodes)))
-+ if x in allowed_numa_nodes_list
-+ ]
-+ return allowed_numa_nodes_list, logical_cpu_list
-
- # Init LogicalCPUInfo from lscpu
- lscpu_output = subprocess.check_output(
diff --git a/misc/py-vllm/files/patch-vllm_utils_cpu__resource__utils.py b/misc/py-vllm/files/patch-vllm_utils_cpu__resource__utils.py
new file mode 100644
index 000000000000..52c86ad4153c
--- /dev/null
+++ b/misc/py-vllm/files/patch-vllm_utils_cpu__resource__utils.py
@@ -0,0 +1,59 @@
+--- vllm/utils/cpu_resource_utils.py.orig 2026-05-11 06:13:38 UTC
++++ vllm/utils/cpu_resource_utils.py
+@@ -51,14 +51,19 @@ def get_memory_affinity(pid: int = 0) -> list[int]:
+
+
+ def get_memory_affinity(pid: int = 0) -> list[int]:
++ if platform.system() != "Linux":
++ return []
+ pid = os.getpid() if pid == 0 else pid
+ path = f"/proc/{pid}/status"
+- with open(path) as f:
+- for line in f:
+- if line.startswith("Mems_allowed_list:"):
+- # Extract the string part (e.g., "0-1,3")
+- raw_list = line.split(":")[1].strip()
+- return parse_id_list(raw_list)
++ try:
++ with open(path) as f:
++ for line in f:
++ if line.startswith("Mems_allowed_list:"):
++ # Extract the string part (e.g., "0-1,3")
++ raw_list = line.split(":")[1].strip()
++ return parse_id_list(raw_list)
++ except FileNotFoundError:
++ pass
+ return []
+
+
+@@ -78,8 +83,8 @@ def get_memory_node_info(node_id: int = 0) -> MemoryNo
+
+
+ def get_memory_node_info(node_id: int = 0) -> MemoryNodeInfo:
+- if platform.system() == "Darwin":
+- # MacOS has no memory node
++ if platform.system() in ("Darwin", "FreeBSD"):
++ # MacOS/FreeBSD has no memory node
+ return MemoryNodeInfo(
+ total_memory=psutil.virtual_memory().total,
+ available_memory=psutil.virtual_memory().available,
+@@ -132,7 +137,7 @@ def get_visible_memory_node() -> list[int]:
+
+
+ def get_visible_memory_node() -> list[int]:
+- if platform.system() == "Darwin":
++ if platform.system() in ("Darwin", "FreeBSD"):
+ return [0]
+
+ allowed_memory_node_list = get_memory_affinity()
+@@ -163,8 +168,8 @@ def _get_cpu_list() -> list[LogicalCPUInfo]:
+
+
+ def _get_cpu_list() -> list[LogicalCPUInfo]:
+- if platform.system() == "Darwin":
+- # For MacOS, no user-level CPU affinity and SMT, return all CPUs
++ if platform.system() in ("Darwin", "FreeBSD"):
++ # For MacOS/FreeBSD, no user-level CPU affinity and SMT, return all CPUs
+ return _synthesize_cpu_list()
+
+ lscpu_output = subprocess.check_output(
diff --git a/misc/py-vllm/files/patch-vllm_v1_worker_cpu__worker.py b/misc/py-vllm/files/patch-vllm_v1_worker_cpu__worker.py
deleted file mode 100644
index e762ac4eafb9..000000000000
--- a/misc/py-vllm/files/patch-vllm_v1_worker_cpu__worker.py
+++ /dev/null
@@ -1,12 +0,0 @@
---- vllm/v1/worker/cpu_worker.py.orig 2026-04-07 17:26:12 UTC
-+++ vllm/v1/worker/cpu_worker.py
-@@ -91,6 +91,9 @@ class CPUWorker(Worker):
- self.local_omp_cpuid = self._get_autobind_cpu_ids(lambda cpus: cpus)
- else:
- self.local_omp_cpuid = "nobind"
-+ elif omp_cpuids == "auto":
-+ # Non-Linux OS: NUMA-based auto-binding not supported, fall back to nobind
-+ self.local_omp_cpuid = "nobind"
- elif omp_cpuids == "nobind":
- self.local_omp_cpuid = "nobind"
- else: