Hey everyone! This release brings local LLM training and inference to AMD GPUs across Windows, WSL and Linux. Read our AMD Blog + Guide
Starting today, our AMD collaboration, custom Triton kernels, and math algorithms enables you to train and run 500+ models across AMD's Radeon, Instinct, Ryzen and data center GPUs, up to 2× faster with 70% less VRAM and no accuracy loss. Optimized ROCm builds also support GGUF & Safetensors inference.
23rd July Update
- Added RDNA2, Gorgon Halo support + fixed AMD installing not detecting GPUs on Strix Halo / other AMD GPUs
- Better RDNA4, HIP / ROCm failure auto fixing and catching
- 2x faster unified memory AMD safetensors loading + much faster gradient checkpointing for unified memory devices
- Added voice dictation / whisper.cpp preliminary support for fast text to speech
- Fixed rollback environments during installs eating 5GB of disk space - now auto cleans
Updating / installing Unsloth
To update Unsloth or install a fresh Unsloth, use the commands below:
macOS, Linux, WSL:
curl -fsSL https://unsloth.ai/install.sh | shWindows:
irm https://unsloth.ai/install.ps1 | iexTrain LLMs Locally on AMD
- Train, run RL, chat with and deploy models locally on AMD GPUs.
- More reliable AMD GPU detection and installation across Windows, WSL and Linux.
- Improved ROCm compatibility for AMD MI300X and MI325X GPUs.
- Remote access Unsloth via
unsloth studio --securethrough free HTTPS via Cloudflare
Run Larger Models on Your Hardware
- Use automatic GPU placement or choose exactly which GPUs and model layers to use.
- Move MoE expert layers into system memory to help larger models fit.
- Split models across multiple GPUs or use Tensor Parallelism.
- Save hardware settings separately for each model and quant.
Faster Chat Restarts and More Reliable Downloads
- Resume long chats without rebuilding the full conversation after an idle model frees its VRAM.
- Stalled Hugging Face XET downloads automatically retry over standard HTTP.
- Existing GGUF files are reused instead of being downloaded again whenever a model loads.
Better Search, Tools and Agents
- Web search can now read PDF papers, manuals and other PDF results.
- Parallel tool calls, reasoning output and tool retries work more reliably.
- A new opt-in MCP endpoint lets compatible AI clients inspect models and training history, start or stop training, load checkpoints, validate recipes and export GGUFs.
- Enable it with
UNSLOTH_STUDIO_ENABLE_MCP=1and set the required bearer token withUNSLOTH_STUDIO_MCP_TOKEN.
- Enable it with
Training and Export Fixes
- Text-only training with multimodal models no longer truncates long examples before packing.
- Fine-tuned Qwen3.5 and Qwen3.6 MTP models now export correctly to GGUF.
- Fixed a Windows permission error that could stop GGUF exports during the final write step.
In Case You Missed It
Our previous Studio release added Dynamic NVFP4 models, deeper personalization, seven new display languages, safer agents and Vulkan GPU acceleration.
Dynamic NVFP4
Unsloth Dynamic NVFP4 keeps accuracy-sensitive layers in FP8 or BF16 while running the rest in W4A4. On NVIDIA Blackwell GPUs, this enables up to 2.5x faster inference, while calibrated FP8 KV caches provide up to 2x longer context.
Read the Dynamic NVFP4 guide and explore our expanded NVFP4 collection, including Qwen3.6, Qwen3.5, Inkling, GLM-4.7 Flash and Gemma 4.
Personalize Your Studio
Choose between Standard, Classic and Minimal color palettes, each with light and dark modes. You can also customize colors, import fonts and adjust font size, contrast, reduced motion and more.
Studio also includes a Voice settings tab for dictation, custom dictionary settings and read-aloud.
New Languages
Unsloth Studio is now available in French, German, Spanish, Hindi, Arabic, Russian and Korean, alongside Chinese (Simplified), Japanese and Portuguese (Brazil). Browser-language auto-detection is now the default.
Safer Agents
A four-level tool-call permission selector-Ask, Approve for me, Off and Full access-provides finer control over agents. Agent workspace isolation and safer installer checks also reduce the risk of unintended changes.
What's Changed in Unsloth
- Bump install.sh / install.ps1 pin to unsloth>=2026.7.3 by @danielhanchen in #7155
- fix(dataprep): smart_chunk_text single-chunk path leaks internal tensor type when eos_token_id is None by @chuenchen309 in #7151
- Fix Settings layout overflow by @shimmyshimmer in #7167
- Keep nested dropdown menus on screen by @shimmyshimmer in #7168
- Fix DeepSeek reasoning test shim by @shimmyshimmer in #7169
- Harden desktop release token permissions by @wasimysaid in #7172
- Studio: clickable sidebar settings cog, long name truncation, Canvas menu opt-in by @shimmyshimmer in #7171
- CI: opt tool-calling smoke tests out of the chat tool approval gate by @danielhanchen in #7162
- Fix Inkling reasoning-effort coercion for duck-typed engine stand-ins by @danielhanchen in #7158
- fix config cards clipping content at narrow window widths by @NilayYadav in #7146
- Studio: use one shared Hugging Face token across Settings and training by @NilayYadav in #7152
- Studio: don't drop parallel tool calls after an internal no-op by @oobabooga in #7157
- Studio: extract text from PDF web results by @oobabooga in #7154
- don't kill live llama-servers when a new Studio instance starts by @NilayYadav in #7182
- fix(save): unsloth_push_to_hub_gguf(save_method="lora") raises NameError by @chuenchen309 in #7193
- Feat/model picker per model config by @Sneakr in #6647
- fix(studio): recover stalled Hub downloads over HTTP by @rodboev in #6858
- fix(mlx): relax Metal context-store timeout by default by @Lyxot in #7141
- Studio: don't re-download updated GGUFs on load by @oobabooga in #7209
- Fix Studio reasoning channel rendering by @Lyxot in #7121
- Fix Studio safetensors tool reprompt reasoning leakage by @Lyxot in #7134
- Studio: don't apply nest_asyncio on plain CLI starts (breaks asyncio on Python 3.14+) by @NilayYadav in #7186
- Propagate fp8 block_size before the early return in get_lora_parameters_bias by @vineethsaivs in #7189
- feat(studio): expose an opt-in MCP control plane by @RitwijParmar in #7191
- fix(tokenizer): check for tokenizer.model after saving it, not before by @chuenchen309 in #7194
- Stabilize Studio regression tests by @shimmyshimmer in #7192
- fix(dataprep): skip .jsonl lines that are valid JSON but not objects by @chuenchen309 in #7195
- fix(studio): equal padding in the dataset source segmented control by @shimmyshimmer in #7230
- fix canvas staying open after starting a New Chat by @NilayYadav in #7229
- Allow API key for Ollama connections by @shimmyshimmer in #7173
- Studio: keep the Bypass permissions pill label when composer pills collapse by @shimmyshimmer in #7231
- fix(studio): honor MLX adapter state in compare mode by @Lyxot in #7196
- Refresh the fastapi C2-loop scan baseline entry for the current release by @danielhanchen in #7223
- Studio: enforce 60s minimum on idle auto-unload TTL (0 stays off) by @NilayYadav in #7185
- Replace standalone Studio wording with Unsloth by @shimmyshimmer in #7221
- Studio: hide the RAG embedder and llama.cpp probe from the hub cached inventory by @shimmyshimmer in #7018
- fix(registry): don't register deepseek models at import time by @chuenchen309 in #7227
- studio: show the active run's saved config in the Training Progress popover by @hakanbaysal in #7217
- test(version-compat): keep GRPO fake-run logits finite on CPU by @danielhanchen in #7247
- Studio: GPU memory configuration for GGUF models by @oobabooga in #6414
- Give opencode real timeout headroom in Local Agent Guides CI by @danielhanchen in #7235
- Installer: allow torch 2.11.x on the CUDA install path (fresh install + studio) by @danielhanchen in #6959
- fix(chat_templates): bind loop_messages when default_system_message is None by @chuenchen309 in #7199
- Installer: preserve the previous torch release across every flavor and vendor on re-runs by @danielhanchen in #7250
- Studio: fix stale GGUF load-marker ordering test after llama_extra_args relocation by @danielhanchen in #7252
- Route OpenCode yolo aliases to native auto mode by @Imagineer99 in #7187
- Pin the Hermes remote installer and harden consent by @Imagineer99 in #7179
- Translate PWD for WSL-launched Windows agents by @Imagineer99 in #7111
- persist llama.cpp KV cache across idle auto-unload (slot save/restore) by @NilayYadav in #7204
- Fix text-only VLM CPT packing truncation by @alkinun in #7211
- feat(studio): add UNSLOTH_LLAMA_CPP_BACKEND env var to force CPU fallback #7213 by @VectorCipher in #7228
- Experimental: correct varlen sample packing for hybrid linear-attention models by @danielhanchen in #7249
- install: let UNSLOTH_TORCH_INDEX_FAMILY / _URL override CUDA wheel detection by @danielhanchen in #6692
- Studio: Data settings tab, uploaded files manager, quant pinning, and chat image preview fix by @shimmyshimmer in #7029
- Studio: fix per-GPU VRAM reporting on Windows ROCm by @danielhanchen in #7238
- Studio: do not show Run for embedding-only non-GGUF models in the Model Hub by @danielhanchen in #7245
- Studio: make Stop and stall deadlines interrupt a wedged stream portably by @danielhanchen in #7236
- Studio: clarify tool permission controls by @shimmyshimmer in #7181
- Update README with latest features and Unsloth Start by @Imagineer99 in #7258
- Studio: lock the last enabled GPU switch instead of silently ignoring it by @oobabooga in #7259
- Fix
unsloth starton Windows: agent install, PATH resolution, and local model selection by @danielhanchen in #7257 - Fix On Device model picker startup ordering by @Imagineer99 in #6994
- Studio: validate Hugging Face tokens before use by @oobabooga in #7261
- Studio (Windows): keep prompt caching on full GPU offload by @danielhanchen in #7260
New Contributors
- @chuenchen309 made their first contribution in #7151
- @VectorCipher made their first contribution in #7228
Full Changelog: v0.1.49-beta...v0.1.50-beta
What's Changed in Unsloth-Zoo
- mlx: fixes for bnb dequant, report_to, early stopping, and NEFTune by @oobabooga in unslothai/unsloth-zoo#851
- MLX: clear error when mlx-lm/mlx-vlm is too old for a QK-norm arch (gemma4/qwen3_5) by @danielhanchen in unslothai/unsloth-zoo#845
- MLX: fix gemma-4-e2b (gemma4) audio-tower conv double transpose on load by @danielhanchen in unslothai/unsloth-zoo#879
- Add Mixtral MoE experts patch for Split LoRA (fix 4bit QLoRA forward crash) by @danielhanchen in unslothai/unsloth-zoo#881
- Forward declared tools to the DiffusionGemma visual server by @oobabooga in unslothai/unsloth-zoo#864
- Add mixtral_moe to temporary_patches import test list by @danielhanchen in unslothai/unsloth-zoo#884
- feat(mlx): add DDP training support by @Lyxot in unslothai/unsloth-zoo#841
- feat(mlx): support distributed inference loading by @Lyxot in unslothai/unsloth-zoo#854
- fix(mlx): preserve inference norm dtypes by @Lyxot in unslothai/unsloth-zoo#844
- fix(mlx): normalize legacy tokenizer sidecars for VLM loads by @Lyxot in unslothai/unsloth-zoo#846
- fix(mlx): support text label parity datasets by @Lyxot in unslothai/unsloth-zoo#793
- MLX: fix gated-delta (Qwen3.5) training and add fused backward kernels by @Lyxot in unslothai/unsloth-zoo#754
- (GRPO) Fix SAPO on version TRL > 0.27.2 and add Luspo from TRL >= 0.28.0 by @marcandrelarochelle in unslothai/unsloth-zoo#869
- (GRPO) Add importance sampling modes (TRL >= 0.26.0), Switch to vllm_importance_sampling_clip (support for TRL >= 1.6.0) and Fix VESPO not using the importance sampling ratio by @marcandrelarochelle in unslothai/unsloth-zoo#870
- saving: fold per-expert gpt-oss 4bit expert LoRA into merged_16bit by @danielhanchen in unslothai/unsloth-zoo#885
- Fix gpt_oss mask factory signature introspection on transformers 5.x by @danielhanchen in unslothai/unsloth-zoo#880
- Fix CPU test drift on transformers 5.5.0 and the MLX bitsandbytes stub by @danielhanchen in unslothai/unsloth-zoo#886
- Guard MLX distributed eval against zero-token batches by @danielhanchen in unslothai/unsloth-zoo#888
- Fix chat template marker auto-detection for Zephyr's context-dependent tokenization by @danielhanchen in unslothai/unsloth-zoo#899
- Persist torch.compile artifacts across processes with Mega-cache by @danielhanchen in unslothai/unsloth-zoo#901
- Fix ModuleNotFoundError crash in fla_vendor's is_flash_linear_attention_available probe by @amareshhebbar in unslothai/unsloth-zoo#897
- Fix false DownloadStallError for non-standard sharded weight filenames by @olsh in unslothai/unsloth-zoo#900
- Fix false DownloadStallError for diffusers components with non-standard sharded weight filenames by @danielhanchen in unslothai/unsloth-zoo#902
- tokenizer_utils: match IGNORED_TOKENIZER_NAMES case-insensitively in fix_untrained_tokens by @oobabooga in unslothai/unsloth-zoo#823
- Fix GGUF export crash for fine-tuned MTP models (Qwen3.5) by @oobabooga in unslothai/unsloth-zoo#904
- fix: ROCm compatibility — guard SM-arch paths, FlashInfer, and mem_get_info by @zhihuidu-amd in unslothai/unsloth-zoo#910
- Fix Windows GGUF export PermissionError [Errno 13]: anchor converter --outfile to input_folder by @LeoBorcherding in unslothai/unsloth-zoo#907
- Fix silent expert-weight transposition in MoE preprocess_weight by @BardiaKoopah in unslothai/unsloth-zoo#913
- Replace standalone Studio wording with Unsloth by @shimmyshimmer in unslothai/unsloth-zoo#914
- Fix Gemma 4 audio training crash by @BardiaKoopah in unslothai/unsloth-zoo#917
- Fix Gemma 4 MLX GGUF tensor namespace restoration by @Lyxot in unslothai/unsloth-zoo#905
23rd July Update Unsloth changelog
- Bump install.sh / install.ps1 pin to unsloth>=2026.7.4 by @danielhanchen in #7263
- Studio: don't let a malformed HF token empty the model picker's Recommended list by @oobabooga in #7266
- Fix local CLI streamed generation error handling by @Lyxot in #7135
- Studio: make tab navigation feel immediate by @oobabooga in #7271
- Feat/model picker per model config v2 by @Sneakr in #7207
- Fix Studio desktop reliability by @wasimysaid in #7255
- Fix resume training crash recovery and MLX checkpoints by @NilayYadav in #6796
- Studio: fix loading split GGUFs from the local HF cache by @oobabooga in #7273
- Show iconless models in Hub feed above likes threshold by @shimmyshimmer in #7284
- Installer: report the installed Unsloth version by @oobabooga in #7265
- Studio: show HF token tick only after validation by @Imagineer99 in #7268
- Installer: enable ROCm torch on RDNA2 (gfx1030-1036) on Windows by @danielhanchen in #7277
- show the mobile sidebar trigger above the chat header by @NilayYadav in #7267
- collapse composer pills to icons on narrow screens by @NilayYadav in #7269
- Add project pinning, Projects list view, and project chat-session fixes by @shimmyshimmer in #7291
- fix(rocm): prepend system ROCm libs on native Linux to avoid bundled HIP crash by @InfoSage05 in #7233
- studio: extend the _grouped_mm null-kernel guard to Linux ROCm RDNA4 (gfx1201) by @danielhanchen in #7292
- Recognize Radeon 8065S (Gorgon Halo / Ryzen AI Max 400) as gfx1151 by @danielhanchen in #7290
- fix(install.ps1): use ordinal IndexOf when stripping index URL credentials by @Solaris-star in #7286
- install.sh: route Strix to the AMD arch index on rocm7.2 (#7264) + PCI detection hint by @danielhanchen in #7293
- Studio: move sidebar search into the header by @shimmyshimmer in #7304
- Studio: reuse MLX prompt cache across turns instead of re-prefilling by @NilayYadav in #7311
- Unsloth start improvements: download progress, server reuse, and safe model switching by @oobabooga in #7313
- Baseline two benign unsloth-zoo test-file findings in scan_packages by @danielhanchen in #7325
- studio: show system-wide VRAM in the multi-GPU System tab view on ROCm by @hakanbaysal in #7216
- studio: classify embedding models from the HF cache and honor offline mode by @hakanbaysal in #7218
- Unsloth start: add local subagents for Claude Code, Codex, OpenCode and Pi by @danielhanchen in #7326
- fix(install): route Strix to AMD gfx index on ROCm 7.14 by @Souravrajvi0 in #7300
- Faster safetensors weight loading on unified-memory (integrated) GPUs by @danielhanchen in #5988
- Studio: lighten chat text weight on Linux to match macOS rendering by @oobabooga in #7308
- Studio: reorder sidebar, rename Hub to Models by @shimmyshimmer in #7327
- Studio: mask AMD GPU pins via ROCR so an unsupported iGPU can't crash llama-server by @guerrieroriccardo in #7272
- fix(install): infer Strix gfx when ROCm runtime is absent by @Souravrajvi0 in #7305
- Studio: calibrate Linux chat typography against macOS by @oobabooga in #7337
- Studio: prevent login error text clipping by @oobabooga in #7343
- Studio: fix stuck composer prompt on first send and unreachable --secure Cloudflare links by @NilayYadav in #7340
- installer: fix false "no GPU detected" on AMD hosts (dead KFD check) + clearer ROCm-less warning by @LeoBorcherding in #7314
- Studio: reject whitespace-only passwords by @NilayYadav in #7341
- Studio: UI font size scales all text consistently without moving layout by @shimmyshimmer in #7355
- Studio: guard project chat rename against IME composition keys by @danielhanchen in #7246
- fix(dataprep): don't emit a degenerate chunk for empty text by @chuenchen309 in #7183
- Studio: fix Connections settings tab overflow in the settings dialog by @danielhanchen in #7241
- Studio: drive UI font size through a typography scale instead of the root font size by @shimmyshimmer in #7359
- Installer: restore interrupted updates and clean stale rollback environments by @oobabooga in #7342
- Studio: add configurable model download location by @oobabooga in #7274
- Studio: add local speech-to-text dictation engine by @shimmyshimmer in #7095
- unsloth start/run: tool-call flags, positional model, and grouped help by @danielhanchen in #7328
- Security audit: refresh scan baselines for current dependency set by @danielhanchen in #7362
- Studio: always show the executed Python script in chat with a download option by @danielhanchen in #7240
- feat(studio): Mac-aware training controls for MLX (optimizers, LoftQ, packing) by @Lyxot in #7358
- Studio: viewport-gated highlight for the executed Python script (follow-up to #7240) by @danielhanchen in #7363
New Contributors
- @Solaris-star made their first contribution in #7286
- @Souravrajvi0 made their first contribution in #7300
- @guerrieroriccardo made their first contribution in #7272
Full Changelog: v0.1.50-beta...v0.1.501-beta