@@ -5,97 +5,104 @@ set -euo pipefail
55
66git config --global --add safe.directory " $( pwd) "
77
8- export GEMS_VENDOR=" ${GEMS_VENDOR:- hygon} "
9- export DTK_HOME=" ${DTK_HOME:-/ opt/ dtk} "
10- export ROCM_PATH=" ${ROCM_PATH:- ${DTK_HOME} } "
11- export HIP_PATH=" ${HIP_PATH:- ${DTK_HOME} / hip} "
12- export HSA_PATH=" ${HSA_PATH:- ${DTK_HOME} / hsa} "
13- export HIP_CLANG_PATH=" ${HIP_CLANG_PATH:- ${DTK_HOME} / llvm/ bin} "
14- export DEVICE_LIB_PATH=" ${DEVICE_LIB_PATH:- ${DTK_HOME} / amdgcn/ bitcode} "
15-
16- DTK_PATH=" ${DTK_HOME} /bin:${HIP_PATH} /bin:${HIP_CLANG_PATH} "
17- DTK_LIBRARY_PATH=" /opt/hyhal/lib/criu:/opt/hyhal/lib/rocprofiler:/opt/hyhal/lib:${HIP_PATH} /lib:${DTK_HOME} /lib:${DTK_HOME} /llvm/lib:${DTK_HOME} /dcc/lib:${DTK_HOME} /aillvm/lib:${HSA_PATH} /lib"
18- export PATH=" ${DTK_PATH} :${PATH} "
19- export LD_LIBRARY_PATH=" ${DTK_LIBRARY_PATH}${LD_LIBRARY_PATH: +: ${LD_LIBRARY_PATH} } "
20-
21- if [[ -n " ${GITHUB_ENV:- } " ]]; then
22- for name in \
23- GEMS_VENDOR \
24- DTK_HOME \
25- ROCM_PATH \
26- HIP_PATH \
27- HSA_PATH \
28- HIP_CLANG_PATH \
29- DEVICE_LIB_PATH \
30- PATH \
31- LD_LIBRARY_PATH; do
32- echo " ${name} =${! name} " >> " ${GITHUB_ENV} "
33- done
34- fi
8+ : " ${GEMS_VENDOR:? GEMS_VENDOR is not set} "
9+ : " ${VLLM_PLUGINS:? VLLM_PLUGINS is not set} "
10+ : " ${DTK_HOME:? DTK_HOME is not set} "
11+ : " ${ROCM_PATH:? ROCM_PATH is not set} "
12+ : " ${HIP_PATH:? HIP_PATH is not set} "
13+ : " ${HSA_PATH:? HSA_PATH is not set} "
14+ : " ${HIP_CLANG_PATH:? HIP_CLANG_PATH is not set} "
15+ : " ${DEVICE_LIB_PATH:? DEVICE_LIB_PATH is not set} "
16+ : " ${LD_LIBRARY_PATH:? LD_LIBRARY_PATH is not set} "
3517
36- echo " DTK_HOME=${DTK_HOME} "
37- echo " LD_LIBRARY_PATH=${LD_LIBRARY_PATH} "
38- test -e " ${HIP_PATH} /lib/libgalaxyhip.so.5"
39- test -e " ${DTK_HOME} /llvm/lib/libomp.so"
18+ USE_IMAGE_PLUGIN=" ${HYGON_USE_IMAGE_PLUGIN:- 1} "
4019
41- TEST_DEPS=(
42- pytest
43- pytest-cov
44- pytest-timeout
45- pytest-json-report
46- scikit-build-core==0.11
47- pybind11
48- ninja
49- cmake
50- numpy
51- requests
52- openai
53- decorator
54- pyyaml
55- sqlalchemy
56- )
57-
58- FLAGGEMS_REF=" 8d23621eb1381ae96b315a9287ce3cc555433824"
59- FLAGGEMS_SOURCE=" ${FLAGGEMS_PATH:-/ workspace/ FlagGems} "
60-
61- if command -v uv > /dev/null 2>&1 ; then
62- uv pip install --system --upgrade pip
63- uv pip install --system --no-build-isolation -e . --no-deps
64- uv pip install --system " ${TEST_DEPS[@]} "
65- else
66- python -m pip install --upgrade pip
67- python -m pip install --no-build-isolation -e . --no-deps
68- python -m pip install " ${TEST_DEPS[@]} "
69- fi
20+ if [[ " ${USE_IMAGE_PLUGIN} " == " 1" ]]; then
21+ IMAGE_PLUGIN_ROOT=" ${VLLM_FL_IMAGE_PLUGIN_ROOT:-/ opt/ vllm-src/ vllm-plugin-FL} "
22+ test -d " ${IMAGE_PLUGIN_ROOT} /vllm_fl"
7023
71- test -d " ${FLAGGEMS_SOURCE} /src/flag_gems"
72- git config --global --add safe.directory " ${FLAGGEMS_SOURCE} "
24+ # The Hygon CI image already contains the validated plugin commit. Keep the
25+ # checkout available for tests and configs, but load vllm_fl from the image.
26+ HYGON_SITE_DIR=" ${RUNNER_TEMP:-/ tmp} /hygon-python-site"
27+ mkdir -p " ${HYGON_SITE_DIR} "
28+ cat > " ${HYGON_SITE_DIR} /sitecustomize.py" << 'PY '
29+ import importlib.abc
30+ import importlib.util
31+ import os
32+ import sys
33+ from pathlib import Path
7334
74- FLAGGEMS_HEAD=" $( git -C " ${FLAGGEMS_SOURCE} " rev-parse HEAD) "
75- if [[ " ${FLAGGEMS_HEAD} " != " ${FLAGGEMS_REF} " ]]; then
76- echo " Unexpected FlagGems commit: ${FLAGGEMS_HEAD} ; expected ${FLAGGEMS_REF} ."
77- exit 1
78- fi
7935
80- if ! grep -q ' kwargs.pop("num_ldmatrixes", None)' \
81- " ${FLAGGEMS_SOURCE} /src/flag_gems/runtime/configloader.py" ; then
82- echo " FlagGems num_ldmatrixes compatibility patch is missing."
83- exit 1
84- fi
36+ class _ImageVllmFLFinder(importlib.abc.MetaPathFinder):
37+ def __init__(self, root):
38+ self.package_dir = Path(root) / "vllm_fl"
39+
40+ def find_spec(self, fullname, path=None, target=None):
41+ if fullname != "vllm_fl":
42+ return None
43+ init_file = self.package_dir / "__init__.py"
44+ if not init_file.exists():
45+ return None
46+ return importlib.util.spec_from_file_location(
47+ fullname,
48+ init_file,
49+ submodule_search_locations=[str(self.package_dir)],
50+ )
51+
8552
86- FLAGGEMS_DIR=" $( mktemp -d) /FlagGems"
87- cp -a " ${FLAGGEMS_SOURCE} " " ${FLAGGEMS_DIR} "
53+ _root = os.environ.get("VLLM_FL_IMAGE_PLUGIN_ROOT")
54+ if _root:
55+ sys.meta_path.insert(0, _ImageVllmFLFinder(_root))
56+ PY
57+
58+ export VLLM_FL_IMAGE_PLUGIN_ROOT=" ${IMAGE_PLUGIN_ROOT} "
59+ export PYTHONPATH=" ${HYGON_SITE_DIR}${PYTHONPATH: +: ${PYTHONPATH} } "
8860
89- if command -v uv > /dev/null 2>&1 ; then
90- uv pip install --system --no-build-isolation -e " ${FLAGGEMS_DIR} " --no-deps
61+ if [[ -n " ${GITHUB_ENV:- } " ]]; then
62+ {
63+ echo " VLLM_FL_IMAGE_PLUGIN_ROOT=${VLLM_FL_IMAGE_PLUGIN_ROOT} "
64+ echo " PYTHONPATH=${PYTHONPATH} "
65+ } >> " ${GITHUB_ENV} "
66+ fi
9167else
92- python -m pip install --no-build-isolation -e " ${FLAGGEMS_DIR} " --no-deps
68+ unset VLLM_FL_IMAGE_PLUGIN_ROOT
9369fi
9470
71+ export HYGON_USE_IMAGE_PLUGIN=" ${USE_IMAGE_PLUGIN} "
72+
73+ echo " DTK_HOME=${DTK_HOME} "
74+ echo " LD_LIBRARY_PATH=${LD_LIBRARY_PATH} "
75+ echo " HYGON_USE_IMAGE_PLUGIN=${HYGON_USE_IMAGE_PLUGIN} "
76+ if [[ " ${USE_IMAGE_PLUGIN} " == " 1" ]]; then
77+ echo " VLLM_FL_IMAGE_PLUGIN_ROOT=${VLLM_FL_IMAGE_PLUGIN_ROOT} "
78+ echo " PYTHONPATH=${PYTHONPATH} "
79+ fi
80+ test -e " ${HIP_PATH} /lib/libgalaxyhip.so.5"
81+ test -e " ${DTK_HOME} /llvm/lib/libomp.so"
82+
9583python - << 'PY '
84+ import os
85+ from pathlib import Path
86+
9687import flag_gems
9788import torch
89+ import vllm
90+ import vllm_fl
91+
92+ if os.environ.get("HYGON_USE_IMAGE_PLUGIN", "1") == "1":
93+ image_plugin_root = Path(os.environ["VLLM_FL_IMAGE_PLUGIN_ROOT"]).resolve()
94+ expected_package = image_plugin_root / "vllm_fl"
95+ plugin_file = Path(vllm_fl.__file__).resolve()
96+ if (
97+ plugin_file != expected_package / "__init__.py"
98+ and expected_package not in plugin_file.parents
99+ ):
100+ raise RuntimeError(
101+ f"Unexpected vllm_fl path: {plugin_file}; expected under {expected_package}"
102+ )
98103
104+ print(f"vLLM import ok: {vllm.__version__}")
105+ print(f"vLLM-FL import ok: {vllm_fl.__file__}")
99106print(f"FlagGems import ok: {getattr(flag_gems, '__version__', 'unknown')}")
100107print(f"Torch import ok: {torch.__version__}")
101108print(f"Accelerator available: {torch.cuda.is_available()}")
0 commit comments