[misc][installation] build from source without compilation (#8818)

This commit is contained in:
youkaichao 2024-09-26 13:19:04 -07:00 committed by GitHub
parent 68988d4e0d
commit 70de39f6b4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 85 additions and 3 deletions

View File

@ -58,13 +58,41 @@ You can install vLLM using pip:
$ # export VLLM_COMMIT=... $ # export VLLM_COMMIT=...
$ # pip install https://vllm-wheels.s3.us-west-2.amazonaws.com/${VLLM_COMMIT}/vllm-${VLLM_VERSION}-cp38-abi3-manylinux1_x86_64.whl $ # pip install https://vllm-wheels.s3.us-west-2.amazonaws.com/${VLLM_COMMIT}/vllm-${VLLM_VERSION}-cp38-abi3-manylinux1_x86_64.whl
Build from source (without compilation)
---------------------------------------
If you want to develop vLLM, and you only need to change the Python code, you can build vLLM without compilation.
The first step is to follow the previous instructions to install the latest vLLM wheel:
.. code-block:: console
$ export VLLM_VERSION=0.6.1.post1
$ pip install https://vllm-wheels.s3.us-west-2.amazonaws.com/nightly/vllm-${VLLM_VERSION}-cp38-abi3-manylinux1_x86_64.whl
After verifying that the installation is successful, we have a script for you to copy and link directories, so that you can edit the Python code directly:
.. code-block:: console
$ git clone https://github.com/vllm-project/vllm.git
$ cd vllm
$ python python_only_dev.py
It will:
- Find the installed vLLM in the current environment.
- Copy built files to the current directory.
- Rename the installed vLLM
- Symbolically link the current directory to the installed vLLM.
This way, you can edit the Python code in the current directory, and the changes will be reflected in the installed vLLM.
.. _build_from_source: .. _build_from_source:
Build from source Build from source (with compilation)
----------------- ------------------------------------
You can also build and install vLLM from source: If you need to touch the C++ or CUDA code, you need to build vLLM from source:
.. code-block:: console .. code-block:: console

54
python_only_dev.py Normal file
View File

@ -0,0 +1,54 @@
# enable python only development
# copy compiled files to the current directory directly
import os
import shutil
import subprocess
import sys
# cannot directly `import vllm` , because it will try to
# import from the current directory
output = subprocess.run([sys.executable, "-m", "pip", "show", "vllm"],
capture_output=True)
assert output.returncode == 0, "vllm is not installed"
text = output.stdout.decode("utf-8")
package_path = None
for line in text.split("\n"):
if line.startswith("Location: "):
package_path = line.split(": ")[1]
break
assert package_path is not None, "could not find package path"
cwd = os.getcwd()
assert cwd != package_path, "should not import from the current directory"
files_to_copy = [
"vllm/_C.abi3.so",
"vllm/_core_C.abi3.so",
"vllm/_moe_C.abi3.so",
"vllm/vllm_flash_attn/vllm_flash_attn_c.abi3.so",
"vllm/vllm_flash_attn/flash_attn_interface.py",
"vllm/vllm_flash_attn/__init__.py",
# "vllm/_version.py", # not available in nightly wheels yet
]
for file in files_to_copy:
src = os.path.join(package_path, file)
dst = file
print(f"Copying {src} to {dst}")
shutil.copyfile(src, dst)
pre_built_vllm_path = os.path.join(package_path, "vllm")
tmp_path = os.path.join(package_path, "vllm_pre_built")
current_vllm_path = os.path.join(cwd, "vllm")
print(f"Renaming {pre_built_vllm_path} to {tmp_path}")
os.rename(pre_built_vllm_path, tmp_path)
print(f"linking {current_vllm_path} to {pre_built_vllm_path}")
os.symlink(current_vllm_path, pre_built_vllm_path)