diff --git a/setup.py b/setup.py index cd17709b..1a6f2ffd 100755 --- a/setup.py +++ b/setup.py @@ -2,6 +2,7 @@ import ctypes import importlib.util +import json import logging import os import re @@ -269,9 +270,32 @@ class repackage_wheel(build_ext): """Extracts libraries and other files from an existing wheel.""" def get_base_commit_in_main_branch(self) -> str: - import subprocess + # Force to use the nightly wheel. This is mainly used for CI testing. + if envs.VLLM_TEST_USE_PRECOMPILED_NIGHTLY_WHEEL: + return "nightly" try: + # Get the latest commit hash of the upstream main branch. + resp_json = subprocess.check_output([ + "curl", "-s", + "https://api.github.com/repos/vllm-project/vllm/commits/main" + ]).decode("utf-8") + upstream_main_commit = json.loads(resp_json)["sha"] + + # Check if the local main branch is up-to-date. This is to ensure + # the base commit we found is the most recent commit on the main + # branch. + local_main_commit = subprocess.check_output( + ["git", "rev-parse", "main"]).decode("utf-8").strip() + if local_main_commit != upstream_main_commit: + raise ValueError( + f"Local main branch ({local_main_commit}) is not " + "up-to-date with upstream main branch " + f"({upstream_main_commit}). Please pull the latest " + "changes from upstream main branch first.") + + # Then get the commit hash of the current branch that is the same as + # the upstream main commit. current_branch = subprocess.check_output( ["git", "branch", "--show-current"]).decode("utf-8").strip() @@ -279,6 +303,8 @@ class repackage_wheel(build_ext): ["git", "merge-base", "main", current_branch]).decode("utf-8").strip() return base_commit + except ValueError as err: + raise ValueError(err) from None except Exception as err: logger.warning( "Failed to get the base commit in the main branch. " diff --git a/tests/standalone_tests/python_only_compile.sh b/tests/standalone_tests/python_only_compile.sh index f00895c0..ec1bcbcc 100644 --- a/tests/standalone_tests/python_only_compile.sh +++ b/tests/standalone_tests/python_only_compile.sh @@ -18,7 +18,7 @@ apt autoremove -y echo 'import os; os.system("touch /tmp/changed.file")' >> vllm/__init__.py -VLLM_USE_PRECOMPILED=1 pip3 install -vvv -e . +VLLM_TEST_USE_PRECOMPILED_NIGHTLY_WHEEL=1 VLLM_USE_PRECOMPILED=1 pip3 install -vvv -e . # Run the script python3 -c 'import vllm' diff --git a/vllm/envs.py b/vllm/envs.py index bf64cd70..f6c03896 100644 --- a/vllm/envs.py +++ b/vllm/envs.py @@ -60,12 +60,12 @@ if TYPE_CHECKING: MAX_JOBS: Optional[str] = None NVCC_THREADS: Optional[str] = None VLLM_USE_PRECOMPILED: bool = False + VLLM_TEST_USE_PRECOMPILED_NIGHTLY_WHEEL: bool = False VLLM_NO_DEPRECATION_WARNING: bool = False VLLM_KEEP_ALIVE_ON_ENGINE_DEATH: bool = False CMAKE_BUILD_TYPE: Optional[str] = None VERBOSE: bool = False VLLM_ALLOW_LONG_MAX_MODEL_LEN: bool = False - VLLM_TEST_FORCE_FP8_MARLIN: bool = False VLLM_RPC_TIMEOUT: int = 10000 # ms VLLM_PLUGINS: Optional[list[str]] = None VLLM_TORCH_PROFILER_DIR: Optional[str] = None @@ -148,6 +148,12 @@ environment_variables: dict[str, Callable[[], Any]] = { lambda: bool(os.environ.get("VLLM_USE_PRECOMPILED")) or bool( os.environ.get("VLLM_PRECOMPILED_WHEEL_LOCATION")), + # Whether to force using nightly wheel in python build. + # This is used for testing the nightly wheel in python build. + "VLLM_TEST_USE_PRECOMPILED_NIGHTLY_WHEEL": + lambda: bool(int(os.getenv("VLLM_TEST_USE_PRECOMPILED_NIGHTLY_WHEEL", "0")) + ), + # CMake build type # If not set, defaults to "Debug" or "RelWithDebInfo" # Available options: "Debug", "Release", "RelWithDebInfo"