From 45e3a02cc5cbaa7871a5588a84a27191a0ff2eb0 Mon Sep 17 00:00:00 2001 From: Roland Tannous Date: Tue, 7 Apr 2026 07:16:26 +0000 Subject: [PATCH] run venv_t5 migration outside deps fast-path gate in both setup scripts --- studio/setup.ps1 | 39 ++++++++++++++++++++++++--------------- studio/setup.sh | 34 +++++++++++++++++++++++----------- 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/studio/setup.ps1 b/studio/setup.ps1 index fa853cdadf..c3a8cd71ca 100644 --- a/studio/setup.ps1 +++ b/studio/setup.ps1 @@ -1579,23 +1579,37 @@ if ($stackExit -ne 0) { exit 1 } -# ── Pre-install transformers 5.x into .venv_t5_530/ and .venv_t5_550/ ── -# Models like GLM-4.7-Flash, Qwen3 MoE need transformers>=5.3.0. -# Gemma 4 models need transformers>=5.5.0. -# Pre-install into separate directories to avoid runtime pip overhead. -# The training subprocess prepends the appropriate dir to sys.path. -Write-Host "" +} else { + step "python" "dependencies up to date" + # Restore ErrorActionPreference (was lowered for pip/python section) + $ErrorActionPreference = $prevEAP +} -# Clean up legacy single .venv_t5 directory +# ── Pre-install transformers 5.x into .venv_t5_530/ and .venv_t5_550/ ── +# Runs outside the deps fast-path gate so that upgrades from the legacy +# single .venv_t5 are always migrated to the tiered layout. +$VenvT5_530Dir = Join-Path $env:USERPROFILE ".unsloth\studio\.venv_t5_530" +$VenvT5_550Dir = Join-Path $env:USERPROFILE ".unsloth\studio\.venv_t5_550" $VenvT5Legacy = Join-Path $env:USERPROFILE ".unsloth\studio\.venv_t5" -if (Test-Path $VenvT5Legacy) { Remove-Item -Recurse -Force $VenvT5Legacy } + +$_NeedT5Install = $false +if (Test-Path $VenvT5Legacy) { + Remove-Item -Recurse -Force $VenvT5Legacy + $_NeedT5Install = $true +} +if (-not (Test-Path $VenvT5_530Dir)) { $_NeedT5Install = $true } +if (-not (Test-Path $VenvT5_550Dir)) { $_NeedT5Install = $true } +# Also reinstall when python deps were updated +if (-not $SkipPythonDeps) { $_NeedT5Install = $true } + +if ($_NeedT5Install) { +Write-Host "" $prevEAP_t5 = $ErrorActionPreference $ErrorActionPreference = "Continue" # --- .venv_t5_530 (transformers 5.3.0) --- substep "pre-installing transformers 5.3.0 for newer model support..." -$VenvT5_530Dir = Join-Path $env:USERPROFILE ".unsloth\studio\.venv_t5_530" if (Test-Path $VenvT5_530Dir) { Remove-Item -Recurse -Force $VenvT5_530Dir } New-Item -ItemType Directory -Path $VenvT5_530Dir -Force | Out-Null foreach ($pkg in @("transformers==5.3.0", "huggingface_hub==1.8.0", "hf_xet==1.4.2")) { @@ -1629,7 +1643,6 @@ step "transformers" "5.3.0 pre-installed" # --- .venv_t5_550 (transformers 5.5.0) --- substep "pre-installing transformers 5.5.0 for Gemma 4 support..." -$VenvT5_550Dir = Join-Path $env:USERPROFILE ".unsloth\studio\.venv_t5_550" if (Test-Path $VenvT5_550Dir) { Remove-Item -Recurse -Force $VenvT5_550Dir } New-Item -ItemType Directory -Path $VenvT5_550Dir -Force | Out-Null foreach ($pkg in @("transformers==5.5.0", "huggingface_hub==1.8.0", "hf_xet==1.4.2")) { @@ -1662,11 +1675,7 @@ if ($tiktokenInstallExit -ne 0) { $ErrorActionPreference = $prevEAP_t5 step "transformers" "5.5.0 pre-installed" -} else { - step "python" "dependencies up to date" - # Restore ErrorActionPreference (was lowered for pip/python section) - $ErrorActionPreference = $prevEAP -} +} # end $_NeedT5Install # ========================================================================== # PHASE 3.4: Prefer prebuilt llama.cpp bundles before source build diff --git a/studio/setup.sh b/studio/setup.sh index 3040569f54..eb89e583ca 100755 --- a/studio/setup.sh +++ b/studio/setup.sh @@ -504,16 +504,31 @@ fi if [ "$_SKIP_PYTHON_DEPS" = false ]; then install_python_stack +else + step "python" "dependencies up to date" + verbose_substep "python deps check: installed=$_PKG_NAME@${INSTALLED_VER:-unknown} latest=${LATEST_VER:-unknown}" +fi - # ── 6b. Pre-install transformers 5.x into .venv_t5_530/ and .venv_t5_550/ ── - # Models like GLM-4.7-Flash, Qwen3 MoE need transformers>=5.3.0. - # Gemma 4 models need transformers>=5.5.0. - # Pre-install into separate directories to avoid runtime pip overhead. - # The training subprocess prepends the appropriate dir to sys.path. - - # Clean up legacy single .venv_t5 directory - [ -d "$STUDIO_HOME/.venv_t5" ] && rm -rf "$STUDIO_HOME/.venv_t5" +# ── 6b. Pre-install transformers 5.x into .venv_t5_530/ and .venv_t5_550/ ── +# Models like GLM-4.7-Flash, Qwen3 MoE need transformers>=5.3.0. +# Gemma 4 models need transformers>=5.5.0. +# Pre-install into separate directories to avoid runtime pip overhead. +# The training subprocess prepends the appropriate dir to sys.path. +# +# Runs outside the _SKIP_PYTHON_DEPS gate so that upgrades from legacy +# single .venv_t5 are always migrated to the tiered layout. +_NEED_T5_INSTALL=false +if [ -d "$STUDIO_HOME/.venv_t5" ]; then + # Legacy layout — migrate + rm -rf "$STUDIO_HOME/.venv_t5" + _NEED_T5_INSTALL=true +fi +[ ! -d "$VENV_T5_530_DIR" ] && _NEED_T5_INSTALL=true +[ ! -d "$VENV_T5_550_DIR" ] && _NEED_T5_INSTALL=true +# Also reinstall when python deps were updated (packages may need rebuild) +[ "$_SKIP_PYTHON_DEPS" = false ] && _NEED_T5_INSTALL=true +if [ "$_NEED_T5_INSTALL" = true ]; then [ -d "$VENV_T5_530_DIR" ] && rm -rf "$VENV_T5_530_DIR" mkdir -p "$VENV_T5_530_DIR" run_quiet "install transformers 5.3.0" fast_install --target "$VENV_T5_530_DIR" --no-deps "transformers==5.3.0" @@ -529,9 +544,6 @@ if [ "$_SKIP_PYTHON_DEPS" = false ]; then run_quiet "install hf_xet for t5_550" fast_install --target "$VENV_T5_550_DIR" --no-deps "hf_xet==1.4.2" run_quiet "install tiktoken for t5_550" fast_install --target "$VENV_T5_550_DIR" "tiktoken" step "transformers" "5.5.0 pre-installed" -else - step "python" "dependencies up to date" - verbose_substep "python deps check: installed=$_PKG_NAME@${INSTALLED_VER:-unknown} latest=${LATEST_VER:-unknown}" fi fi