基于幻x2025 128G硬件的Unsloth Studio的大模型训推实战

本文摘要很多进入AI领域的同学,只听说大模型的训练、调优、推理等概念,从来没有动手实践过,也找不到简易的操作实战指导书,本文用常见的windows环境,以最容易理解的章节,带大家从0到1的完整跑通LLM的训、推活动,让大家对AI底层原理有一个全面的认识!

《基于幻x2025 128G硬件的Unsloth Studio的大模型训推实战》

副标:从 0 到 1 跑通 LoRA 微调 → 合并转 GGUF → 本地推理
实例贯穿:硬件 8060S (ROCm) · 模型 本地 Qwen3-0.6B · 数据 24 条本地 AI 指令 · 20 步 LoRA SFT(loss 从 ~4.4 降到 ~1.4) · 训练后推理对比

第 0 章 引言:为什么这篇值得你跟一遍

很多人以为"在 Windows 上用 AMD 显卡训练大模型"是不可能的事——官方文档也写着 Windows 原生 ROCm "不支持训练"。但那是裸驱动 + 手动环境的旧结论。

本教程用一台 华硕 ROG 幻 x2025(Strix Halo,128GB 统一内存) 实测证明:借助 Unsloth Studio 自带的打包环境,在 Windows 原生 ROCm 上跑通「训练 → 转 GGUF → 推理」完整闭环不仅可行,而且开箱即用。

你跟着走完,会收获:

  • 一套可复现的本地训推命令链;
  • 一个亲眼看到学习信号的 20 步 LoRA 微调(loss 从约 4.4 降到约 1.4,单卡 20 步;精确值随运行浮动);
  • 一次训练前 vs 训练后的推理对照,确认模型真的"学会了"。

全文用同一套实体串到底,不换模型、不换数据,让你看得清每一步发生了什么。


第 1 章 认识你的武器库(软硬件 + 版本号)

1.1 硬件:128GB 统一内存是核心优势

部件规格
机型ASUS ROG Flow Z13 2025 / 幻 x2025
CPU+GPUAMD Ryzen AI Max+ 395(Strix Halo)
GPURadeon 8060S 核显(架构 gfx1151, RDNA3.5)
内存128GB UMA 统一内存

重点讲一句:Strix Halo 是 UMA(统一内存架构)——显存就是内存,二者共用那 128GB。这意味着你不用在"显存不够"和"买贵卡"之间二选一,本机训练大模型的最大瓶颈(显存)被大幅放宽。建议到 AMD Adrenalin → Variable Graphics Memory 把可分显存调到 ≥64GB(torch 实测可见约 76.8GB)。

1.2 软件版本表(本机 2026-09-01 实测)

组件版本
Unsloth Studio桌面端(Tauri),已更新到最新
Studio 内置 Python3.12.10
ROCm7.13.0
torch2.11.0+rocm7.13.0
unsloth2026.8.22
transformers5.5.0
trl0.23.1
peft0.18.1
llama.cpp(ROCm gfx1151 构建)b10715

Unsloth Studio 后端是一个自带的 Python 虚拟环境,路径在:

C:\Users\hechu\.unsloth\studio\unsloth_studio\Scripts\python.exe

后面所有训练/转换命令都用它,不要混用系统 Python。

1.3 环境就绪检查:动手确认四件事都通

"装好了"不等于"跑得通"。开训之前,先用几条命令逐项验证本机环境真的可用。建议全部打勾再继续——任何一项不过,都按第 7.2 节速查表定位,别硬跑。

所谓"环境就绪",本质就是三要素已生效:规范名 DLL shim(E:\rocm_shim\amdhip64.dll)、amd_comgr.dll 入 PATH、ROCM_PATH/HIP_PATH/LLVM_BIN 指向 venv 内的 _rocm_sdk_core。下面逐一确认。

检查 1 · Studio Python + ROCm 是否认卡

用 Studio 自带的 Python 跑一句(不要混用系统 Python):

& "C:\Users\hechu\.unsloth\studio\unsloth_studio\Scripts\python.exe" -c "import torch; print('torch', torch.__version__); print('cuda', torch.cuda.is_available()); print('gpu', torch.cuda.get_device_name(0))"

预期输出:

torch 2.11.0+rocm7.13.0
cuda True
gpu AMD Radeon(TM) 8060S Graphics

cuda True 且显卡名正确,说明 ROCm 三要素已生效、GPU 已被 PyTorch 识别。若 cuda False 或报 hip_utils DLL 缺失,见下方"不就绪现象"。

检查 2 · 三要素路径是否就位

echo "ROCM_PATH = $env:ROCM_PATH"
echo "HIP_PATH  = $env:HIP_PATH"
echo "LLVM_BIN = $env:LLVM_BIN"
Test-Path E:\rocm_shim\amdhip64.dll

预期:ROCM_PATH/HIP_PATH 指向 _rocm_sdk_coreLLVM_BIN 指向其 lib\llvm\bin,且 E:\rocm_shim\amdhip64.dll 返回 True。这三项已固化进用户级系统环境变量;若为空或 False,回 7.2 节手动补。

检查 3 · 基座模型是否就位

Test-Path E:\models\qwen3-0.6b\model.safetensors

预期 True(约 1.19GB)。若 False,先按 3.2 节拉取基座。

检查 4 · Studio 服务(可选)

打开 Unsloth Studio 桌面端,确认模型列表可加载;或浏览器访问 http://localhost:8889/api/health 返回 healthy

四项全过 → 环境就绪,直接进入第 2 章主流程。
任一不过 → 对照第 7.2 常见坑速查表定位(最常见是 DLL shim 未固化,或 PATH 缺 amd_comgr)。

1.4 路径约定

用途路径
基座模型E:/models/qwen3-0.6b
训练产物(适配器)E:/models/qwen3-0.6b-lora-test
合并后 GGUFE:/models/qwen3-0.6b-merged-lora-f16.gguf

第 2 章 本次大模型训推实战主流程

这一章先把整条链路「一张图看明白」,再逐步拆解。后续第 3–7 章是每一环的展开细节,对照着看即可。

2.1 主流程图

下图是本次实战的完整主流程,从上到下(纵向)依次是 准备 → 训练 → 合并转换 → 推理验证 四大阶段、八个步骤:

本次大模型训推实战主流程

矢量源文件可在文末「文件索引」下载 训推主流程图-svg.zip(解压后得 训推主流程图.svg)。

2.2 八大步骤一览(含正常耗时)

#步骤工具 / 命令正常耗时(本机 8060S)产物
1环境就绪(一次性)Unsloth Studio + ROCm 三要素已固化 ~0;首次配置约 10–15 分钟点开 Studio 即带训练能力
2准备基座模型本地 E:/models/qwen3-0.6b已就位;首次下载 1.2GB 约 1–3 分钟基座权重
3准备训练数据qwen3_lora_demo_24.jsonl人工/脚本分钟级(已附赠)24 条 JSONL
4LoRA 训练unsloth_train_playbook.py --steps 20本次实测约 52 秒(首步 Triton 编译约 30s,之后 ~1.1s/步)loss ~4.4→~1.4(总体下行,偶有抖动)
5保存适配器脚本自动落盘秒级adapter_model.safetensors 39MB
6合并进基座transformers + peft 合并(见 5.1)参考 ~20–40 秒(0.6B 权重写盘)qwen3-0.6b-merged-lora/
7转 GGUFconvert_hf_to_gguf.py参考 ~1–2 分钟(写出 1.2GB)qwen3-0.6b-merged-lora-f16.gguf
8推理验证llama-server.exe + curl/Studio服务加载 ~15–25 秒;单轮对话数秒训练前/后对照结论
注:耗时均在本机 幻 x2025 / 8060S / 128GB UMA 上测得或估算,会随模型规模、数据量、显存分配而缩放;步骤 4 为本次实战的精确实测值,步骤 6、7 为同机同模型的典型区间,供你排期参考。

2.3 逐步详解

步骤 1 · 环境就绪(一次性)

确认 Unsloth Studio 已安装并处于最新版,且「环境三要素」(规范名 DLL shim、amd_comgr.dll 入 PATH、ROCM_PATH/HIP_PATH/LLVM_BIN)已生效——如何确认就位见第 1.3 节的四项检查这是后续一切能跑通的底座,只需做一次。 检查全过后点开 Studio 图标即具备训练能力,命令里通常只需补一个 UNSLOTH_AGENT_SANDBOX=1

步骤 2 · 准备基座模型

用本地 Qwen3-0.6B(E:/models/qwen3-0.6b)。选它练手的原因见第 3 章 3.2 节。若本地没有,从镜像(hf-mirror.com)拉取约 1.2GB,网速正常 1–3 分钟。

步骤 3 · 准备训练数据

24 条 AI 概念问答(instruction/output 格式),附赠文件 qwen3_lora_demo_24.jsonl。为什么小数据也能看到学习信号,见第 3 章 3.1 节。

步骤 4 · LoRA 训练(核心,耗时实测)

启动一键脚本跑 20 步 SFT。日志会先打印 GPU 识别(8060S、~76.8GB 显存)与可训练参数 1.67%,首步因 Triton 内核 JIT 编译稍慢(约 30 秒),之后每步约 1.0–1.1 秒,整段约 52 秒收尾。loss 从约 4.4 降到约 1.4(总体下行、中间偶有回弹;精确值随运行浮动)——学习信号明确。完整命令与日志解读见第 4 章。

步骤 5 · 保存适配器

脚本在训练结束自动把 LoRA 增量写入 --out 目录:adapter_model.safetensors(约 39MB)+ adapter_config.json + 分词器 + README。这一步是「训练成果」,落盘即秒级。

步骤 6 · 合并进基座

transformers + peft 加载基座、合并 adaptermerge_and_unload() 把 LoRA 权重并回基座,存为纯 float16 的普通 HF 模型 E:/models/qwen3-0.6b-merged-lora。耗时主要是把合并后的权重写盘,0.6B 量级约 20–40 秒。注意:合并脚本必须先 import unsloth(详见第 5 章 5.1 节坑位),且不能用 FastLanguageModel 合并(详见同节)。

步骤 7 · 转 GGUF

llama.cpp 不能直接读 HF 权重,要把合并模型转成单文件 GGUF qwen3-0.6b-merged-lora-f16.gguf(约 1.2GB)。转换用本地 gguf-py,靠 PYTHONPATH 前置,约 1–2 分钟。命令见第 5 章 5.2 节。

步骤 8 · 推理验证(闭环证据)

启动 llama-server.exe 加载 GGUF(本机 ROCm-only 构建,必须用 server 而非 cli,详见第 6 章 6.1 节),等待 /health 返回 ok(~15–25 秒)后用 curl 或 Studio 图形界面聊天。同问「什么是 LoRA?」:基座答非所问、训练后答对——这就是 loss 下降对应的真实能力变化,整条链路闭环确凿。


第 3 章 准备训练(数据 + 模型)

3.1 数据:24 条本地 AI 指令

本教程用 24 条 AI 概念问答instruction/output 格式)作训练集,附赠文件 qwen3_lora_demo_24.jsonl。样例如下:

{"instruction": "什么是 LoRA?", "output": "LoRA(Low-Rank Adaptation)是一种参数高效微调方法。它冻结原始模型权重,只在权重旁插入低秩矩阵进行训练,从而用极少的可训练参数适配新任务,显存占用低、训练快。"}
{"instruction": "什么是量化?", "output": "量化是用更低精度(如 4bit、8bit)表示模型权重,从而显著降低显存占用和推理开销的技术。"}
为什么小数据也能看到学习信号?LoRA 只训极少参数(本例约 1.67%),24 条高质量问答足以让模型在"AI 术语定义"这个窄任务上过拟合式收敛——loss 曲线会非常直观地下降,正好用来验证整条链路。

3.2 模型:为何选 Qwen3-0.6B 练手

  • 体量小、加载快、单卡即可,20 步训练几十秒跑完;
  • 闭环清晰,便于观察"训练前/后"差异;
  • 底座已具备基础语言能力,微调后变化一目了然。

3.3 训练脚本参数速查

本教程用已验证的一键脚本 unsloth_train_playbook.py(自动套环境修复、按 dtype 对齐精度):

参数含义本教程取值
--model基座模型路径E:/models/qwen3-0.6b
--data训练数据 JSONLqwen3_lora_demo_24.jsonl
--out适配器输出目录E:/models/qwen3-0.6b-lora-test
--steps训练步数20
--rLoRA rank16
--dtype精度float16

第 4 章 训练实战(LoRA SFT)

4.1 启动命令

在任意工作目录执行(注意 UNSLOTH_AGENT_SANDBOX=1,它用于绕过本机 Agent 环境的删除守卫,避免 Unsloth 导入阶段被拦截):

UNSLOTH_AGENT_SANDBOX=1 \
  "C:\Users\hechu\.unsloth\studio\unsloth_studio\Scripts\python.exe" \
  unsloth_train_playbook.py \
  --data qwen3_lora_demo_24.jsonl --steps 20 --r 16 \
  --out E:/models/qwen3-0.6b-lora-test

4.2 训练进行中看什么

日志里这几行说明环境真的通了:

AMD Radeon(TM) 8060S Graphics. Num GPUs = 1. Max memory: 76.789 GB
Torch: 2.11.0+rocm7.13.0
Trainable params = 10,092,544 / 606,142,464 (1.67%)
  • GPU 识别成功:8060S、显存 ~76.8GB;
  • 可训练参数仅 1.67%:LoRA 高效微调的典型特征;
  • 首步稍慢:Triton 内核首次 JIT 编译需要几十秒,属正常现象,后续每步约 1.0–1.1 秒。

4.3 结果:学习信号明确

{'loss': 4.4020}  ← 第 1 步(9/2 实跑;精确值随运行浮动)
 ...
{'loss': 1.4000}  ← 第 20 步(最终)

loss 从约 4.4 降到约 1.4,20 步走总体下行(中间偶有回弹),说明模型确实在"学习"这批 AI 指令的分布。适配器已保存:

E:/models/qwen3-0.6b-lora-test/
├── adapter_model.safetensors   # 约 39MB 训练增量
├── adapter_config.json
├── tokenizer.*                 # 分词器
└── README.md

4.4 一个必记的坑

模型以 float16 加载时,TrainingArguments 必须 fp16=True, bf16=False,否则 Unsloth 会报精度不一致。脚本已按 --dtype 自动对齐,自己写代码时别漏。


第 5 章 合并 + 转 GGUF

适配器(safetensors)不能直接被 llama.cpp 推理。我们要把它合并回基座,再转成单文件 GGUF

5.1 合并 LoRA 进基座

import os
os.environ["UNSLOTH_AGENT_SANDBOX"] = "1"
import unsloth  # ← 必须先于 peft 导入,注册 unsloth 模型类、避免 torch._C._distributed_c10d 缺失
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

# ⚠️ 不要用 FastLanguageModel.from_pretrained 合并:本机当前 Unsloth 构建下它会把
# 基座偷偷量化成 4-bit(config 带 quantization_config、权重变 uint8),导致下游 GGUF 转换失败。
# 用原生 transformers 加载并强制 float16,才能产出纯 float16 权重。
base = AutoModelForCausalLM.from_pretrained(
    "E:/models/qwen3-0.6b", torch_dtype=torch.float16).to("cuda")
tok = AutoTokenizer.from_pretrained("E:/models/qwen3-0.6b")

model = PeftModel.from_pretrained(base, "E:/models/qwen3-0.6b-lora-test")
model = model.merge_and_unload()
model.save_pretrained("E:/models/qwen3-0.6b-merged-lora")
tok.save_pretrained("E:/models/qwen3-0.6b-merged-lora")
坑提醒:① 直接 import peft 会报 torch._C._distributed_c10d 缺失,先 import unsloth 即可避开。② 不要用 FastLanguageModel 合并——本机构建下它会把基座偷偷量化为 4-bit,造成下游 GGUF 转换报 "bitsandbytes 不支持 / absmax 张量无法映射"。改用上方原生 transformers 方案,产出纯 float16 权重。

5.2 转 GGUF

cd "C:\Users\hechu\.unsloth\llama.cpp"
PYTHONPATH="C:\Users\hechu\.unsloth\llama.cpp\gguf-py;C:\Users\hechu\.unsloth\llama.cpp" \
UNSLOTH_AGENT_SANDBOX=1 \
  "C:\Users\hechu\.unsloth\studio\unsloth_studio\Scripts\python.exe" \
  convert_hf_to_gguf.py "E:/models/qwen3-0.6b-merged-lora" \
  --outfile "E:/models/qwen3-0.6b-merged-lora-f16.gguf"
坑提醒:convert_hf_to_gguf.py 需要本地gguf-py,必须用 PYTHONPATH 前置它,否则会用到 site-packages 里较旧的 gguf 而报错。

产物:E:/models/qwen3-0.6b-merged-lora-f16.gguf(约 1.2GB,310 个张量)。


第 6 章 推理实战(让模型说话)

6.1 为什么用 llama-server 而非 llama-cli

本机 Unsloth 编译的 llama.cpp 是 ROCm-only 构建、没有 CPU 后端llama-cli.exe 直接跑会卡死无输出。改用 llama-server.exe(也正是 Studio 图形界面的推理引擎)。

6.2 启动推理服务

export ROCM_PATH="C:/Users/hechu/.unsloth/studio/unsloth_studio/Lib/site-packages/_rocm_sdk_core"
export HIP_PATH="$ROCM_PATH"
export LLVM_BIN="$ROCM_PATH/lib/llvm/bin"
export HIP_VISIBLE_DEVICES=0
export ROCR_VISIBLE_DEVICES=0
export PATH="E:/rocm_shim;$ROCM_PATH/bin;$ROCM_PATH/lib/llvm/bin;C:/Users/hechu/.unsloth/llama.cpp/build/bin/Release;$PATH"

"C:/Users/hechu/.unsloth/llama.cpp/build/bin/Release/llama-server.exe" \
  -m E:/models/qwen3-0.6b-merged-lora-f16.gguf -ngl 99 -t 8 --port 8081 --host 127.0.0.1

/health 返回 {"status":"ok"}(约 15–25 秒加载完成)即可对话。

6.3 两种对话方式

方式 A:命令行 curl

curl -s http://127.0.0.1:8081/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"merged","messages":[{"role":"user","content":"什么是 LoRA?"}],"max_tokens":160,"temperature":0.7}'

方式 B:Studio 图形界面

直接在 Unsloth Studio 的聊天界面加载单文件 E:/models/qwen3-0.6b-merged-lora-f16.gguf,无需起服务。

6.4 对照实验(教程高潮):训练真的生效了吗?

同问 "什么是 LoRA?",对比训练前后:

模型回答
基座 Qwen3-0.6B(未训练)答非所问 / 错误定义(例:把 LoRA 说成 "LoRA-Aware Transformers";0.6B 基座未做指令微调,遇领域问题会给出流畅但错误的幻觉回答,而非空输出)
合并 LoRA 后"LoRA(Low-Rank Adaptation)是一种参数高效微调方法,冻结原始模型权重,只在权重旁插入低秩矩阵进行训练…"

基座答非所问,训练后的模型答出了正确定义——这就是 loss 下降对应的真实能力变化,闭环得到确凿验证。


第 7 章 收尾与进阶

7.1 本次成果一览

  • ✅ 硬件 8060S (ROCm) 上跑通 LoRA 训练(loss 从约 4.4 降到约 1.4;精确值随运行浮动)
  • ✅ 适配器合并(原生 transformers+peft,纯 float16)并转成单文件 GGUF(1.2GB)
  • ✅ 推理对照证明训练生效(基座答非所问 vs LoRA 答对)
注:9/2 本机按本文复跑,loss 实测 4.402→1.400、训练全程约 52s、合并/GGUF/推理闭环均通过;同一脚本+数据下精确数值随运行浮动,方向(明显下降)稳定。

7.2 常见坑速查表

现象原因解法
hip_utils 报 DLL 找不到缺规范名 amdhip64.dllE:\rocm_shim shim(已固化)
Unsloth 导入被删文件拦截Agent 删除守卫清缓存锁UNSLOTH_AGENT_SANDBOX=1
bf16/fp16 精度报错模型与训练参数精度不一致float16 模型用 fp16=True
torch._C._distributed_c10d 缺失先 import peftimport unsloth
GGUF 转换报 DFLASH 缺失用了旧 ggufPYTHONPATH 前置本地 gguf-py
llama-cli 卡死ROCm-only 构建无 CPU 后端改用 llama-server.exe
合并后 GGUF 转换报 bitsandbytes 不支持 / absmax 张量无法映射FastLanguageModel 合并把基座偷偷量化成 4bit改用原生 transformers+peft 合并(见第 5.1 节修正版代码)
合并后 GGUF 转换报 bitsandbytes 不支持 / absmax 张量无法映射FastLanguageModel 合并把基座偷偷量化成 4bit改用原生 transformers+peft 合并(见第 5.1 节修正版代码)

7.3 下一步可以玩什么

  1. 换你自己的数据:把 ilearnai.online 的文章整理成 instruction/output JSONL,训一个"你的专属 AI";
  2. 训更大的模型:加 --load_in_4bit 训 7B 级别模型(统一内存优势显现);
  3. GGUF 量化:把 f16 GGUF 量化为 q4/q8,进一步省显存、提速。

附录:完整命令清单

# 1) 训练
UNSLOTH_AGENT_SANDBOX=1 \
  "C:\Users\hechu\.unsloth\studio\unsloth_studio\Scripts\python.exe" \
  unsloth_train_playbook.py --data qwen3_lora_demo_24.jsonl --steps 20 --r 16 \
  --out E:/models/qwen3-0.6b-lora-test

# 2) 合并(见第 5.1 的 Python 片段)

# 3) 转 GGUF
cd "C:\Users\hechu\.unsloth\llama.cpp"
PYTHONPATH="C:\Users\hechu\.unsloth\llama.cpp\gguf-py;C:\Users\hechu\.unsloth\llama.cpp" \
UNSLOTH_AGENT_SANDBOX=1 \
  "C:\Users\hechu\.unsloth\studio\unsloth_studio\Scripts\python.exe" \
  convert_hf_to_gguf.py "E:/models/qwen3-0.6b-merged-lora" \
  --outfile "E:/models/qwen3-0.6b-merged-lora-f16.gguf"

# 4) 推理(见第 6.2 的环境变量 + llama-server 命令)

文件索引

文件说明
本文本教程(即当前文章)
训推主流程图.png第 2 章主流程图的图片版(已嵌入正文)
训推主流程图-svg.zip主流程图矢量源文件(解压得 训推主流程图.svg
qwen3_lora_demo_24-jsonl.zip24 条 AI 指令训练数据(解压得 qwen3_lora_demo_24.jsonl
unsloth_train_playbook-py.zip一键训练脚本(解压得 unsloth_train_playbook.py
sample_dataset-jsonl.zip一键脚本内置示例数据(解压得 sample_dataset.jsonl
Qwen3-0.6B 基座模型官方下载:huggingface.co/Qwen/Qwen3-0.6B(约 1.2GB,需自行拉取)
qwen3-0.6b-merged-lora-f16.gguf约 1.2GB,按第 5 章命令本地生成(合并后 LoRA 单文件模型)

觉得内容不错?我要

打赏杯咖啡或蜜雪冰城吧
微信扫一扫
微信赞赏码
支付宝扫一扫
支付宝赞赏码
评论 暂无评论
请登录后参与评论