From f912d1bb975cb7f76b39aed091448cb17a78d664 Mon Sep 17 00:00:00 2001 From: Dan Saunders Date: Thu, 2 Oct 2025 10:57:09 -0400 Subject: [PATCH] fix --- .github/workflows/tests.yml | 6 ++--- cicd/Dockerfile.jinja | 6 ++--- scripts/cutcrossentropy_install.py | 28 ++++------------------ scripts/unsloth_install.py | 37 ++++++++++++++++++++++-------- 4 files changed, 39 insertions(+), 38 deletions(-) mode change 100644 => 100755 scripts/unsloth_install.py diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e3bcec5e5..92b78fb22 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -87,7 +87,7 @@ jobs: uv pip install --system --no-build-isolation -e ".[dev]" --constraints torch-constraints.txt set -o pipefail python scripts/unsloth_install.py | bash - python scripts/cutcrossentropy_install.py --uv | bash + python scripts/cutcrossentropy_install.py | bash - name: Make sure PyTorch version wasn't clobbered run: | @@ -159,10 +159,10 @@ jobs: uv pip install --system build python -m build --sdist uv pip install --system dist/*.tar.gz - python scripts/unsloth_install.py | sh - python scripts/cutcrossentropy_install.py --uv | sh printf "torch==${{ matrix.pytorch_version }}\n" > torch-constraints.txt uv pip install --system ".[dev]" --constraints torch-constraints.txt + python scripts/unsloth_install.py | sh + python scripts/cutcrossentropy_install.py | sh - name: Make sure PyTorch version wasn't clobbered run: | diff --git a/cicd/Dockerfile.jinja b/cicd/Dockerfile.jinja index 0243aaa2a..9b8cba09a 100644 --- a/cicd/Dockerfile.jinja +++ b/cicd/Dockerfile.jinja @@ -33,20 +33,20 @@ RUN if [ "$NIGHTLY_BUILD" = "true" ] ; then \ sed -i 's#"datasets[^"]*"#"datasets @ git+https://github.com/huggingface/datasets.git@main"#' pyproject.toml; \ fi -RUN uv pip install packaging==23.2 setuptools==75.8.0 +RUN uv pip install --system packaging==23.2 setuptools==75.8.0 RUN if [ "$AXOLOTL_EXTRAS" != "" ] ; then \ uv sync --frozen --extra ring-flash-attn --extra optimizers --extra ray $(printf ' --extra %s' "${AXOLOTL_EXTRAS//,/ }") $AXOLOTL_ARGS; \ else \ uv sync --frozen --extra ring-flash-attn --extra optimizers --extra ray $AXOLOTL_ARGS; \ fi -RUN uv pip install --no-build-isolation flash-attn $AXOLOTL_ARGS +RUN uv pip install --system --no-build-isolation flash-attn $AXOLOTL_ARGS RUN python scripts/unsloth_install.py | sh RUN python scripts/cutcrossentropy_install.py | sh # So we can test the Docker image -RUN uv pip install -e ".[dev]" +RUN uv pip install --system -e ".[dev]" # fix so that git fetch/pull from remote works RUN git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" && \ diff --git a/scripts/cutcrossentropy_install.py b/scripts/cutcrossentropy_install.py index e67c3b182..847a1b1b6 100755 --- a/scripts/cutcrossentropy_install.py +++ b/scripts/cutcrossentropy_install.py @@ -1,40 +1,22 @@ -"""Emit the install command for the Axolotl cut-cross-entropy fork.""" +"""Print the pip command to install Axolotl's cut_cross_entropy fork.""" from __future__ import annotations -import shutil import sys try: import torch -except ImportError as exc: # pragma: no cover - defensive +except ImportError as exc: # pragma: no cover raise ImportError("Install torch via `pip install torch`") from exc from packaging.version import Version as V -USE_UV_FLAG = "--uv" in sys.argv[1:] -USE_PIP_FLAG = "--pip" in sys.argv[1:] - -if USE_UV_FLAG and USE_PIP_FLAG: - raise SystemExit("Specify only one of --uv or --pip") - -if USE_PIP_FLAG: - use_uv = False -elif USE_UV_FLAG: - use_uv = True -else: - use_uv = shutil.which("uv") is not None - -if V(torch.__version__) < V("2.4.0"): +if V(torch.__version__.split("+")[0]) < V("2.6.0"): print("") sys.exit(0) -# No need to uninstall in CI runs; the environment is fresh. Just emit the install command. -installer = "uv pip install --system" if use_uv else "pip install" -command = ( - f"{installer} " +print( + "python -m pip install " '"cut-cross-entropy[transformers] ' '@ git+https://github.com/axolotl-ai-cloud/ml-cross-entropy.git@147ea28"' ) - -print(command) diff --git a/scripts/unsloth_install.py b/scripts/unsloth_install.py old mode 100644 new mode 100755 index 0bfc1af21..97d670bca --- a/scripts/unsloth_install.py +++ b/scripts/unsloth_install.py @@ -1,7 +1,8 @@ -"""Emit the uv commands needed to install Unsloth without touching torch.""" +"""Emit the install commands for Unsloth without altering torch.""" from __future__ import annotations +import shutil import sys from shlex import quote @@ -14,16 +15,34 @@ from packaging.version import Version as V MIN_TORCH = V("2.6.0") -python_version = V(torch.__version__.split("+")[0]) -if python_version < MIN_TORCH: +if V(torch.__version__.split("+")[0]) < MIN_TORCH: raise RuntimeError( f"Torch {torch.__version__} detected, but Unsloth requires >= {MIN_TORCH}." ) -python_path = quote(sys.executable) -commands = ( - f"uv pip install --python {python_path} --no-deps unsloth-zoo==2025.9.12 && " - f'uv pip install --python {python_path} --no-deps "unsloth[huggingface]==2025.9.9"' -) +USE_UV_FLAG = "--uv" in sys.argv[1:] +USE_PIP_FLAG = "--pip" in sys.argv[1:] -print(commands) +if USE_UV_FLAG and USE_PIP_FLAG: + raise SystemExit("Specify only one of --uv or --pip") + +if USE_PIP_FLAG: + use_uv = False +elif USE_UV_FLAG: + use_uv = True +else: + use_uv = shutil.which("uv") is not None + +python_exe = quote(sys.executable or shutil.which("python3") or "python") + +if use_uv: + installer = "uv pip install --system --no-deps" +else: + installer = f"{python_exe} -m pip install --no-deps" + +commands = [ + f"{installer} unsloth-zoo==2025.9.12", + f'{installer} "unsloth[huggingface]==2025.9.9"', +] + +print(" && ".join(commands))