Merge nightly into feature/transformers-v5-support

This commit is contained in:
Roland Tannous 2026-02-23 07:40:28 +00:00
commit 036d85c9e4
9 changed files with 212 additions and 4 deletions

View file

@ -24,6 +24,11 @@ echo "╔═══════════════════════
echo "║ Unsloth Studio Setup Script ║"
echo "╚══════════════════════════════════════╝"
# ── Clean up stale Unsloth compiled caches ──
rm -rf "$SCRIPT_DIR/unsloth_compiled_cache"
rm -rf "$SCRIPT_DIR/studio/backend/unsloth_compiled_cache"
rm -rf "$SCRIPT_DIR/studio/tmp/unsloth_compiled_cache"
# ── Detect Colab (like unsloth does) ──
IS_COLAB=false
keynames=$'\n'$(printenv | cut -d= -f1)

View file

@ -0,0 +1,50 @@
# Model defaults for unsloth/GLM-4.7-Flash
# Based on GLM_Flash_A100(80GB).py
# Also applies to: unsloth/GLM-4.7-Flash-unsloth-bnb-4bit, unsloth/GLM-4.7-Flash-bnb-4bit, THUDM/GLM-4.7-Flash
training:
max_seq_length: 2048
# num_epochs: 4
num_epochs: 0
learning_rate: 2e-4
batch_size: 4
gradient_accumulation_steps: 2
warmup_steps: 5
max_steps: 60
save_steps: 60
weight_decay: 0.001
random_seed: 3407
packing: false
train_on_completions: true
gradient_checkpointing: "unsloth"
optim: "adamw_8bit"
lr_scheduler_type: "linear"
lora:
lora_r: 8
lora_alpha: 16
lora_dropout: 0.0
target_modules:
- "q_proj"
- "k_proj"
- "v_proj"
- "o_proj"
- "gate_proj"
- "up_proj"
- "down_proj"
- "out_proj"
use_rslora: false
use_loftq: false
logging:
enable_wandb: false
wandb_project: "llm-finetuning"
enable_tensorboard: false
tensorboard_dir: "runs"
log_frequency: 10
inference:
temperature: 0.7
top_p: 0.8
top_k: 20

View file

@ -0,0 +1,51 @@
# Model defaults for imdatta0/tiny_qwen3_moe_2.8B_0.7B
# Based on TinyQwen3_MoE.py
# Dummy model of qwen3moe architecture created to fit in T4
# MoE model - includes gate_up_proj for MoE layers
training:
max_seq_length: 2048
# num_epochs: 4
num_epochs: 0
learning_rate: 2e-4
batch_size: 1
gradient_accumulation_steps: 1
warmup_steps: 5
max_steps: 50
save_steps: 50
weight_decay: 0.001
random_seed: 3407
packing: false
train_on_completions: true
gradient_checkpointing: "unsloth"
optim: "adamw_8bit"
lr_scheduler_type: "linear"
lora:
lora_r: 32
lora_alpha: 64
lora_dropout: 0.0
target_modules:
- "q_proj"
- "k_proj"
- "v_proj"
- "o_proj"
- "gate_proj"
- "up_proj"
- "down_proj"
- "gate_up_proj"
use_rslora: false
use_loftq: false
logging:
enable_wandb: false
wandb_project: "llm-finetuning"
enable_tensorboard: false
tensorboard_dir: "runs"
log_frequency: 10
inference:
temperature: 0.6
top_k: 20
top_p: 0.95

View file

@ -0,0 +1,51 @@
# Model defaults for unsloth/Qwen3-30B-A3B-Instruct-2507
# Based on Qwen3_MoE.py
# Also applies to: Qwen/Qwen3-30B-A3B-Instruct-2507, unsloth/Qwen3-30B-A3B-Instruct-2507-bnb-4bit
# MoE model - includes gate_up_proj for MoE layers
training:
max_seq_length: 2048
# num_epochs: 4
num_epochs: 0
learning_rate: 2e-4
batch_size: 1
gradient_accumulation_steps: 1
warmup_steps: 5
max_steps: 50
save_steps: 50
weight_decay: 0.001
random_seed: 3407
packing: false
train_on_completions: true
gradient_checkpointing: "unsloth"
optim: "adamw_8bit"
lr_scheduler_type: "linear"
lora:
lora_r: 32
lora_alpha: 64
lora_dropout: 0.0
target_modules:
- "q_proj"
- "k_proj"
- "v_proj"
- "o_proj"
- "gate_proj"
- "up_proj"
- "down_proj"
- "gate_up_proj"
use_rslora: false
use_loftq: false
logging:
enable_wandb: false
wandb_project: "llm-finetuning"
enable_tensorboard: false
tensorboard_dir: "runs"
log_frequency: 10
inference:
temperature: 0.6
top_k: 20
top_p: 0.95

View file

@ -184,6 +184,10 @@ class InferenceBackend:
# Clear GPU memory cache
clear_gpu_cache()
# Remove stale compiled cache so the next model gets a fresh one
from utils.cache_cleanup import clear_unsloth_compiled_cache
clear_unsloth_compiled_cache()
logger.info(f"Model '{model_name}' successfully unloaded.")
return True
except Exception as e:

View file

@ -128,6 +128,10 @@ class UnslothTrainer:
print("\nClearing GPU memory before training...")
clear_gpu_cache()
# Remove stale compiled cache so the new model gets a fresh one
from utils.cache_cleanup import clear_unsloth_compiled_cache
clear_unsloth_compiled_cache()
# Detect if this is a vision model AND dataset is multimodal
# A vision-capable model with a text-only dataset should use FastLanguageModel
self.is_vlm = is_vision_model(model_name) and is_dataset_multimodal

View file

@ -3,7 +3,6 @@ Main FastAPI application for Unsloth UI Backend
"""
import os
import secrets
import shutil
from contextlib import asynccontextmanager
from fastapi import FastAPI
@ -19,12 +18,15 @@ from auth import storage
from utils.hardware import detect_hardware, get_device, DeviceType
import utils.hardware.hardware as _hw_module
UNSLOTH_CACHE_DIR = Path(__file__).parent / "unsloth_compiled_cache"
from utils.cache_cleanup import clear_unsloth_compiled_cache
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Startup: detect hardware, print setup token if needed. Shutdown: clean up compiled cache."""
# Clean up any stale compiled cache from previous runs
clear_unsloth_compiled_cache()
# Remove stale .venv_overlay from previous sessions — it will be
# rebuilt at runtime if a model needs transformers 5.x
overlay_dir = Path(__file__).resolve().parent.parent.parent / ".venv_overlay"
@ -58,7 +60,7 @@ async def lifespan(app: FastAPI):
yield
# Cleanup
_hw_module.DEVICE = None
shutil.rmtree(UNSLOTH_CACHE_DIR, ignore_errors=True)
clear_unsloth_compiled_cache()
# Create FastAPI app

View file

@ -0,0 +1,30 @@
"""
Utility for cleaning up the Unsloth compiled cache directory.
The unsloth_compiled_cache is created by unsloth_zoo/compiler.py during
FastModel.from_pretrained() and contains model-type-specific compiled Python
files. It should be cleared between model loads to avoid stale artefacts.
"""
import shutil
import logging
from pathlib import Path
logger = logging.getLogger(__name__)
# Possible locations where unsloth_compiled_cache may appear
_BACKEND_DIR = Path(__file__).resolve().parent.parent # studio/backend
_PROJECT_ROOT = _BACKEND_DIR.parent.parent # repo root
_CACHE_DIRS = [
_BACKEND_DIR / "unsloth_compiled_cache",
_PROJECT_ROOT / "unsloth_compiled_cache",
_PROJECT_ROOT / "studio" / "tmp" / "unsloth_compiled_cache",
]
def clear_unsloth_compiled_cache() -> None:
"""Remove every known unsloth_compiled_cache directory (idempotent)."""
for cache_dir in _CACHE_DIRS:
if cache_dir.exists():
logger.info(f"Removing unsloth compiled cache: {cache_dir}")
shutil.rmtree(cache_dir, ignore_errors=True)

View file

@ -383,7 +383,13 @@ TEMPLATE_TO_MODEL_MAPPER = {
"unsloth/yi-34b-chat-bnb-4bit",
"01-ai/Yi-6B-Chat",
"01-ai/Yi-34B-Chat",
)
),
"glm": (
"unsloth/GLM-4.7-Flash-unsloth-bnb-4bit",
"unsloth/GLM-4.7-Flash",
"THUDM/GLM-4.7-Flash",
"unsloth/GLM-4.7-Flash-bnb-4bit",
),
}
MODEL_TO_TEMPLATE_MAPPER = {}
@ -506,4 +512,9 @@ TEMPLATE_TO_RESPONSES_MAPPER = {
"instruction": "<|im_start|>user\n",
"response": "<|im_start|>assistant\n",
},
"glm": {
"instruction": "[gMASK]<sop><|user|>",
"response": "<|assistant|><think>",
},
}