Merge branch 'main' into pip
This commit is contained in:
commit
1fd5853741
5 changed files with 71 additions and 13 deletions
|
|
@ -607,7 +607,7 @@ shell.Run cmd, 0, False
|
|||
# Migrated env: force-reinstall unsloth+unsloth-zoo to ensure clean state
|
||||
# in the new venv location, while preserving existing torch/CUDA
|
||||
Write-Host "==> Upgrading unsloth in migrated environment..."
|
||||
uv pip install --python $VenvPython --reinstall-package unsloth --reinstall-package unsloth-zoo "unsloth>=2026.3.11" unsloth-zoo
|
||||
uv pip install --python $VenvPython --reinstall-package unsloth --reinstall-package unsloth-zoo "unsloth>=2026.3.12" unsloth-zoo
|
||||
if ($StudioLocalInstall) {
|
||||
Write-Host "==> Overlaying local repo (editable)..."
|
||||
uv pip install --python $VenvPython -e $RepoRoot --no-deps
|
||||
|
|
@ -622,7 +622,7 @@ shell.Run cmd, 0, False
|
|||
|
||||
Write-Host "==> Installing unsloth (this may take a few minutes)..."
|
||||
if ($StudioLocalInstall) {
|
||||
uv pip install --python $VenvPython --upgrade-package unsloth "unsloth>=2026.3.11" unsloth-zoo
|
||||
uv pip install --python $VenvPython --upgrade-package unsloth "unsloth>=2026.3.12" unsloth-zoo
|
||||
Write-Host "==> Overlaying local repo (editable)..."
|
||||
uv pip install --python $VenvPython -e $RepoRoot --no-deps
|
||||
} else {
|
||||
|
|
@ -632,7 +632,7 @@ shell.Run cmd, 0, False
|
|||
# Fallback: GPU detection failed to produce a URL -- let uv resolve torch
|
||||
Write-Host "==> Installing unsloth (this may take a few minutes)..."
|
||||
if ($StudioLocalInstall) {
|
||||
uv pip install --python $VenvPython unsloth-zoo "unsloth>=2026.3.11" --torch-backend=auto
|
||||
uv pip install --python $VenvPython unsloth-zoo "unsloth>=2026.3.12" --torch-backend=auto
|
||||
Write-Host "==> Overlaying local repo (editable)..."
|
||||
uv pip install --python $VenvPython -e $RepoRoot --no-deps
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -767,7 +767,7 @@ if [ "$_MIGRATED" = true ]; then
|
|||
echo "==> Upgrading unsloth in migrated environment..."
|
||||
uv pip install --python "$_VENV_PY" \
|
||||
--reinstall-package unsloth --reinstall-package unsloth-zoo \
|
||||
"unsloth>=2026.3.11" unsloth-zoo
|
||||
"unsloth>=2026.3.12" unsloth-zoo
|
||||
if [ "$STUDIO_LOCAL_INSTALL" = true ]; then
|
||||
echo "==> Overlaying local repo (editable)..."
|
||||
uv pip install --python "$_VENV_PY" -e "$_REPO_ROOT" --no-deps
|
||||
|
|
@ -781,7 +781,7 @@ elif [ -n "$TORCH_INDEX_URL" ]; then
|
|||
echo "==> Installing unsloth (this may take a few minutes)..."
|
||||
if [ "$STUDIO_LOCAL_INSTALL" = true ]; then
|
||||
uv pip install --python "$_VENV_PY" \
|
||||
--upgrade-package unsloth "unsloth>=2026.3.11" unsloth-zoo
|
||||
--upgrade-package unsloth "unsloth>=2026.3.12" unsloth-zoo
|
||||
echo "==> Overlaying local repo (editable)..."
|
||||
uv pip install --python "$_VENV_PY" -e "$_REPO_ROOT" --no-deps
|
||||
else
|
||||
|
|
@ -792,7 +792,7 @@ else
|
|||
# Fallback: GPU detection failed to produce a URL -- let uv resolve torch
|
||||
echo "==> Installing unsloth (this may take a few minutes)..."
|
||||
if [ "$STUDIO_LOCAL_INSTALL" = true ]; then
|
||||
uv pip install --python "$_VENV_PY" unsloth-zoo "unsloth>=2026.3.11" --torch-backend=auto
|
||||
uv pip install --python "$_VENV_PY" unsloth-zoo "unsloth>=2026.3.12" --torch-backend=auto
|
||||
echo "==> Overlaying local repo (editable)..."
|
||||
uv pip install --python "$_VENV_PY" -e "$_REPO_ROOT" --no-deps
|
||||
else
|
||||
|
|
|
|||
|
|
@ -18,6 +18,30 @@ if _backend_dir not in sys.path:
|
|||
import _platform_compat # noqa: F401
|
||||
|
||||
|
||||
def _is_colab() -> bool:
|
||||
"""Detect Google Colab by checking for COLAB_ prefixed env vars."""
|
||||
import os
|
||||
|
||||
return any(k.startswith("COLAB_") for k in os.environ)
|
||||
|
||||
|
||||
def _pip_install_backend_deps() -> None:
|
||||
"""Install Studio backend dependencies directly into the current Python.
|
||||
|
||||
Used on Colab when the Studio venv does not exist (install.sh was not
|
||||
run). Reads the requirements from studio.txt next to this file.
|
||||
"""
|
||||
import subprocess
|
||||
|
||||
req_file = Path(__file__).parent / "requirements" / "studio.txt"
|
||||
if not req_file.exists():
|
||||
return
|
||||
print("Installing Studio backend dependencies ...")
|
||||
subprocess.check_call(
|
||||
[sys.executable, "-m", "pip", "install", "-q", "-r", str(req_file)],
|
||||
)
|
||||
|
||||
|
||||
def _bootstrap_studio_venv() -> None:
|
||||
"""Expose the Studio venv's site-packages to the current interpreter.
|
||||
|
||||
|
|
@ -25,9 +49,16 @@ def _bootstrap_studio_venv() -> None:
|
|||
installing the full stack into system Python, we prepend the venv's
|
||||
site-packages so that packages like structlog, fastapi, etc. are
|
||||
importable from notebook cells and take priority over system copies.
|
||||
|
||||
If the venv does not exist and we are running on Colab, fall back to
|
||||
pip-installing the backend dependencies into the current environment
|
||||
so that imports like structlog and fastapi succeed.
|
||||
"""
|
||||
venv_lib = Path.home() / ".unsloth" / "studio" / "unsloth_studio" / "lib"
|
||||
if not venv_lib.exists():
|
||||
if _is_colab():
|
||||
_pip_install_backend_deps()
|
||||
return
|
||||
import warnings
|
||||
|
||||
warnings.warn(
|
||||
|
|
|
|||
|
|
@ -1746,8 +1746,9 @@ if (-not $NeedLlamaSourceBuild) {
|
|||
# ============================================
|
||||
Write-Host ""
|
||||
$doneLine = if ($env:SKIP_STUDIO_BASE -eq "1") { "Setup Complete!" } else { "Update Complete!" }
|
||||
$doneContent = " $doneLine"
|
||||
Write-Host "+===============================================+" -ForegroundColor Green
|
||||
Write-Host "| $doneLine |" -ForegroundColor Green
|
||||
Write-Host ("|" + $doneContent.PadRight(47) + "|") -ForegroundColor Green
|
||||
Write-Host "| |" -ForegroundColor Green
|
||||
Write-Host "| Launch with: |" -ForegroundColor Green
|
||||
Write-Host "| unsloth studio -H 0.0.0.0 -p 8888 |" -ForegroundColor Green
|
||||
|
|
|
|||
|
|
@ -292,15 +292,23 @@ VENV_T5_DIR="$STUDIO_HOME/.venv_t5"
|
|||
[ -d "$REPO_ROOT/.venv_t5" ] && rm -rf "$REPO_ROOT/.venv_t5"
|
||||
# Note: do NOT delete $STUDIO_HOME/.venv here — install.sh handles migration
|
||||
|
||||
_COLAB_NO_VENV=false
|
||||
if [ ! -x "$VENV_DIR/bin/python" ]; then
|
||||
echo "❌ ERROR: Virtual environment not found at $VENV_DIR"
|
||||
echo " Run install.sh first to create the environment:"
|
||||
echo " curl -fsSL https://unsloth.ai/install.sh | sh"
|
||||
exit 1
|
||||
if [ "$IS_COLAB" = true ]; then
|
||||
# On Colab there is no Studio venv -- install backend deps into system Python
|
||||
echo " Colab detected, installing Studio backend dependencies..."
|
||||
pip install -q -r "$SCRIPT_DIR/backend/requirements/studio.txt" 2>/dev/null || true
|
||||
_COLAB_NO_VENV=true
|
||||
else
|
||||
echo "❌ ERROR: Virtual environment not found at $VENV_DIR"
|
||||
echo " Run install.sh first to create the environment:"
|
||||
echo " curl -fsSL https://unsloth.ai/install.sh | sh"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
source "$VENV_DIR/bin/activate"
|
||||
fi
|
||||
|
||||
source "$VENV_DIR/bin/activate"
|
||||
|
||||
install_python_stack() {
|
||||
python "$SCRIPT_DIR/install_python_stack.py"
|
||||
}
|
||||
|
|
@ -324,6 +332,24 @@ fast_install() {
|
|||
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# On Colab without a venv, skip all venv-dependent sections (Python deps
|
||||
# update, llama.cpp build) -- the backend deps were already installed above.
|
||||
if [ "$_COLAB_NO_VENV" = true ]; then
|
||||
echo "✅ Studio backend dependencies installed into system Python"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════╗"
|
||||
echo "║ Setup Complete! ║"
|
||||
echo "╠══════════════════════════════════════╣"
|
||||
echo "║ Unsloth Studio is ready to start ║"
|
||||
echo "║ in your Colab notebook! ║"
|
||||
echo "║ ║"
|
||||
echo "║ from colab import start ║"
|
||||
echo "║ start() ║"
|
||||
echo "╚══════════════════════════════════════╝"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ── Check if Python deps need updating ──
|
||||
# Compare installed package version against PyPI latest.
|
||||
# Skip all Python dependency work if versions match (fast update path).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue