ci(core): factor llama.cpp build out of consolidated matrix into its own job
The "llama.cpp install via unsloth_zoo.llama_cpp" step ran inside every cell of the consolidated `Core` matrix (HF=4.57.6+TRL<1, HF=latest+ TRL=latest, HF=default+TRL=default) at ~275 s wallclock per cell. The artefact it produces (a fresh ggml-org/llama.cpp build) has nothing to do with the (transformers, TRL) combo, so 2/3 of those minutes were duplicated work -- ~9 min of CPU per PR push, on every push. Factor the step into a sibling job `llama-cpp-smoke` that runs once. Each Core cell now ends after the matrix-relevant work (deps + Bucket-A + unsloth_zoo pytest + compile sweep + MoE patches). The new job pins the same env contract (UNSLOTH_IS_PRESENT, UNSLOTH_COMPILE_DISABLE, PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python, PYTHONPATH=studio) and mirrors the matrix install minus pieces unrelated to llama_cpp: studio.txt's FastAPI stack, bitsandbytes, triton, mammoth/unpdf, datasets, pytest, sqlalchemy/cryptography. Keeps torch from the same CPU index, transformers/trl from pyproject defaults (so unsloth_zoo's temporary_patches.* per-architecture submodules import cleanly), and the requests / tqdm / psutil that llama_cpp.py reaches for at module top. Net per-PR effect: Old: 3 x 12 min = 36 min CPU on llama.cpp build (one cmake per cell) New: 3 x 7 min + 1 x 7 min = 28 min CPU That's ~8 min of free CPU back per PR, and each Core cell finishes ~5 min sooner so downstream-gated checks unblock faster. The actual smoke step body is unchanged -- same `_zoo_aggressive_cuda_ spoof.apply()` import-time harness, same `install_llama_cpp` round- trip, same `llama-cli --help` and `llama-quantize --help` text checks. Per-step `continue-on-error` is still absent; a real build failure fails the PR.
This commit is contained in:
parent
e1345d5f1b
commit
091a80bb10
1 changed files with 87 additions and 17 deletions
104
.github/workflows/consolidated-tests-ci.yml
vendored
104
.github/workflows/consolidated-tests-ci.yml
vendored
|
|
@ -1958,6 +1958,93 @@ jobs:
|
|||
python -m pytest -q --tb=short -s tests/_moe_coverage_shim.py
|
||||
rm -f tests/_moe_coverage_shim.py
|
||||
|
||||
- name: Summary
|
||||
if: always()
|
||||
run: |
|
||||
echo "::group::Versions"
|
||||
python -c "import sys, platform; print(sys.version); print(platform.platform())"
|
||||
python -c "import torch; print('torch', torch.__version__, 'cuda?', torch.cuda.is_available())"
|
||||
python -c "import transformers; print('transformers', transformers.__version__)"
|
||||
# `pip show` instead of `import unsloth_zoo` — its __init__ raises
|
||||
# without an accelerator and the spoof harness only kicks in under
|
||||
# pytest. Cheap and accurate.
|
||||
pip show unsloth_zoo
|
||||
echo "::endgroup::"
|
||||
echo "Consolidated job done. Coverage:"
|
||||
echo " - 16 unsloth Bucket-A tests under tests/saving/ + tests/utils/"
|
||||
echo " - unsloth_zoo @ ${UNSLOTH_ZOO_REF} pytest tests/ (5 GPU cases deselected)"
|
||||
echo " - unsloth_zoo.compiler.test_apply_fused_lm_head"
|
||||
|
||||
llama-cpp-smoke:
|
||||
# Standalone llama.cpp build + smoke. Earlier this lived inside every
|
||||
# consolidated matrix cell and re-cmake'd llama.cpp ~5 min per cell --
|
||||
# 3 cells x 275 s = ~14 min of duplicated CPU on every PR for an
|
||||
# artefact that has nothing to do with the (transformers, TRL) combo.
|
||||
# `install_llama_cpp` clones ggml-org/llama.cpp at a pinned commit and
|
||||
# builds the LLAMA_CPP_TARGETS list; the result is independent of the
|
||||
# HF stack version. Run once, gate the PR.
|
||||
name: llama.cpp build + smoke
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 25
|
||||
env:
|
||||
UNSLOTH_ZOO_REF: ${{ inputs.unsloth_zoo_ref || 'main' }}
|
||||
# Same env contract the matrix cells use: protobuf python parser
|
||||
# (transformers' bundled *_pb2.py needs it), studio on PYTHONPATH,
|
||||
# compile-disable + UNSLOTH_IS_PRESENT so unsloth_zoo's __init__
|
||||
# bootstrap accepts a pure-import.
|
||||
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION: python
|
||||
PYTHONPATH: ${{ github.workspace }}/studio
|
||||
UNSLOTH_COMPILE_DISABLE: '1'
|
||||
UNSLOTH_IS_PRESENT: '1'
|
||||
steps:
|
||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
|
||||
|
||||
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install runtime deps for unsloth_zoo.llama_cpp
|
||||
# unsloth_zoo's `__init__` imports `temporary_patches`, which
|
||||
# in turn pulls per-architecture submodules (gemma3n, gemma4,
|
||||
# qwen3_*_moe, glm4_moe, deepseek_v3_moe, pixtral, ministral,
|
||||
# mxfp4, bitsandbytes, flex_attention_bwd) -- many of those
|
||||
# transitively touch transformers and peft / accelerate. Mirror
|
||||
# the matrix job's install minus the heavy bits that have no
|
||||
# bearing on `install_llama_cpp` itself: studio.txt's FastAPI
|
||||
# stack, bitsandbytes (CUDA-only build dependency), triton,
|
||||
# mammoth/unpdf (PDF tools), datasets, sqlalchemy/cryptography,
|
||||
# pytest (we run no tests). The remaining pin shape matches
|
||||
# studio-backend-ci.yml's "Repo tests (CPU)" baseline.
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
python -m pip install --upgrade pip
|
||||
# Match the matrix job's torch path so unsloth_zoo's
|
||||
# `import torch` resolves to the same CPU build.
|
||||
pip install --index-url https://download.pytorch.org/whl/cpu \
|
||||
'torch>=2.4,<2.11' 'torchvision<0.26'
|
||||
pip install \
|
||||
'numpy<3' protobuf sentencepiece \
|
||||
requests tqdm psutil packaging safetensors \
|
||||
'peft>=0.18,<0.20' 'accelerate>=0.34,<2'
|
||||
# transformers + trl come from pyproject.toml's pinned line
|
||||
# so this job stays in sync with whatever the consolidated
|
||||
# `__from_pyproject__` matrix cell is using.
|
||||
pip install transformers trl
|
||||
pip install -e . --no-deps
|
||||
|
||||
- name: Clone unsloth_zoo @ ${{ env.UNSLOTH_ZOO_REF }}
|
||||
# Same shallow clone as the matrix job; we install editable so
|
||||
# `unsloth_zoo.llama_cpp` resolves to the cloned tree (and any
|
||||
# main-branch fixes flow into the smoke without a release).
|
||||
run: |
|
||||
set -euxo pipefail
|
||||
git clone --depth=1 --branch="$UNSLOTH_ZOO_REF" \
|
||||
https://github.com/unslothai/unsloth-zoo \
|
||||
"$RUNNER_TEMP/unsloth-zoo"
|
||||
pip install -e "$RUNNER_TEMP/unsloth-zoo" --no-deps
|
||||
pip show unsloth_zoo
|
||||
|
||||
- name: llama.cpp install via unsloth_zoo.llama_cpp + `llama-cli --help` smoke
|
||||
# Exercise the canonical `unsloth_zoo.llama_cpp.install_llama_cpp`
|
||||
# flow that GGUF export uses at runtime: clone ggml-org/llama.cpp
|
||||
|
|
@ -2054,20 +2141,3 @@ jobs:
|
|||
f"and llama-quantize at {quantizer}."
|
||||
)
|
||||
PY
|
||||
|
||||
- name: Summary
|
||||
if: always()
|
||||
run: |
|
||||
echo "::group::Versions"
|
||||
python -c "import sys, platform; print(sys.version); print(platform.platform())"
|
||||
python -c "import torch; print('torch', torch.__version__, 'cuda?', torch.cuda.is_available())"
|
||||
python -c "import transformers; print('transformers', transformers.__version__)"
|
||||
# `pip show` instead of `import unsloth_zoo` — its __init__ raises
|
||||
# without an accelerator and the spoof harness only kicks in under
|
||||
# pytest. Cheap and accurate.
|
||||
pip show unsloth_zoo
|
||||
echo "::endgroup::"
|
||||
echo "Consolidated job done. Coverage:"
|
||||
echo " - 16 unsloth Bucket-A tests under tests/saving/ + tests/utils/"
|
||||
echo " - unsloth_zoo @ ${UNSLOTH_ZOO_REF} pytest tests/ (5 GPU cases deselected)"
|
||||
echo " - unsloth_zoo.compiler.test_apply_fused_lm_head"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue