在 Windows 上用 Unsloth 微调 Qwen:从环境搭建到训练跑通的全过程

Windows上用Unsloth微调Qwen:零基础实战指南 大语言模型微调是AI工程落地的核心能力,其本质是通过参数高效适配(如LoRA)让基座模型掌握垂直领域知识。在Windows平台,传统PyTorch+CUDA环境搭建长期面临驱动冲突、编译失败、内存溢出等系统级障碍。Unsloth的出现重构了这一技术路径——它绕过torch.compile兼容性问题,封装自研注意力内核与梯度检查点机制,显著降低显存占用并提升训练速度。结合Qwen系列模型(如Qwen3.5-4B),用户仅需Python基础与独立GPU即可完成从数据准备、LoRA配置到GGUF量化导出的全流程。 阅读详情

这篇文章主要讲Windows下利用unsloth对大语言模型进行微调,这样可以针对特定的小行业,小场景做定制服务。

训练用到的python版本是3.10.6 64位,由于我本地系统盘小,所以我将python的临时下载目录设置到了E:/pip_cache里,空间够的朋友,可不用加。

创建虚拟环境

python -m venv E:/newtrain_env
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
#执行策略改为Y,然后确定
#然后激活环境
E:/newtrain_env/Scripts/activate.ps1

设置临时目录环境变量

#(仅对当前窗口有效,建议每次安装前执行)
mkdir "E:/pip_temp"
mkdir "E:/pip_cache"
$env:TMP = "E:/pip_temp"
$env:TEMP = "E:/pip_temp"

如何需求使用清华镜像源加速 可选

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

升级 Python 的核心安装工具链

python -m pip install --upgrade pip setuptools wheel --cache-dir "E:/pip_cache"

安装依赖库

需要先安装一些必要依赖库如triton-windows,xformers等。

pip install triton-windows==3.6.0.post25 --cache-dir "E:/pip_cache"
pip install bitsandbytes xformers accelerate datasets peft sentencepiece protobuf --cache-dir "E:/pip_cache"
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121 --cache-dir "E:/pip_cache"
pip install trl==0.24.0 --no-deps --cache-dir "E:/pip_cache"

安装unsloth 和 unsloth_zoo

pip install "unsloth @ git+https://github.com/unslothai/unsloth.git" --cache-dir "E:/pip_cache"
pip install "unsloth_zoo @ git+https://github.com/unslothai/unsloth-zoo.git" --no-deps --cache-dir "E:/pip_cache"

如何出现这个问题

from .rl import PatchFastRL
  File "E:/newtrain_env/lib/site-packages/unsloth_zoo/temporary_patches/deepseek_v3_moe.py", line 271, in patched_import
    module = original_import(name, globals, locals, fromlist, level)
  File "E:/newtrain_env/lib/site-packages/unsloth/models/rl.py", line 289, in <module>
    sanitize_logprob = RL_REPLACEMENTS["sanitize_logprob"]
KeyError: 'sanitize_logprob'

重新安装unsloth-zoo,采用–no-deps,不然会导致他升级torch一些依赖库导致版本冲突异常。

(newtrain_env) PS E:/newtrain_env> pip uninstall unsloth-zoo
(newtrain_env) PS E:/newtrain_env> pip install "unsloth_zoo @ git+https://github.com/unslothai/unsloth-zoo.git" --no-deps --cache-dir "E:/pip_cache"

本地可运行依赖库完整介绍

安装结束后,我本地依赖库版本信息,执行命令pip list可获得:

accelerate==1.12.0
aiohappyeyeballs==2.6.1
aiohttp==3.13.3
aiosignal==1.4.0
anyio==4.12.1
async-timeout==5.0.1
attrs==25.4.0
bitsandbytes==0.49.2
certifi==2026.2.25
charset-normalizer==3.4.4
colorama==0.4.6
cut-cross-entropy==25.1.1
datasets==4.3.0
dill==0.4.0
docstring_parser==0.17.0
exceptiongroup==1.3.1
filelock==3.20.0
frozenlist==1.8.0
fsspec==2025.12.0
h11==0.16.0
hf_transfer==0.1.9
httpcore==1.0.9
httpx==0.28.1
huggingface_hub==0.36.2
idna==3.11
Jinja2==3.1.6
joblib==1.5.3
MarkupSafe==3.0.2
mpmath==1.3.0
msgspec==0.20.0
multidict==6.7.1
multiprocess==0.70.16
networkx==3.4.2
numpy==2.2.6
packaging==26.0
pandas==2.3.3
peft==0.18.1
pillow==12.0.0
propcache==0.4.1
protobuf==7.34.0
psutil==7.2.2
pyarrow==23.0.1
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.3
regex==2026.2.28
requests==2.32.5
safetensors==0.7.0
scikit-learn==1.7.2
scipy==1.15.3
sentence-transformers==5.2.3
sentencepiece==0.2.1
six==1.17.0
sympy==1.13.1
threadpoolctl==3.6.0
tokenizers==0.22.2
torch==2.5.1+cu121
torchaudio==2.5.1+cu121
torchvision==0.20.1+cu121
tqdm==4.67.3
transformers==4.57.6
triton-windows==3.6.0.post25
trl==0.24.0
typeguard==4.5.1
typing_extensions==4.15.0
tyro==1.0.8
tzdata==2025.3
unsloth @ git+https://github.com/unslothai/unsloth.git@9b56d63337c01e9c778a8f6dff9349ce60bfda98
unsloth_zoo @ git+https://github.com/unslothai/unsloth-zoo.git@5b80d552999687023063562271b101484f1cc5f8
urllib3==2.6.3
xformers==0.0.35
xxhash==3.6.0
yarl==1.23.0

准备训练数据集

在训练之前,要先训练数据集准备好,训练集结构格式如下:

{"instruction": "你是一名资深的神经科医生。请根据提供的患者主诉,进行症状分析、病变定位并给出可能的诊断方向。", "input": "患者,男,65岁。突发右侧肢体无力伴言语蹇涩2小时,既往有高血压病史10年。", "output": "【症状分析】:患者表现为急性起病的局灶性神经功能缺损。右侧肢体无力(偏瘫)提示皮层或内囊受累;言语蹇涩(运动性失语)提示优势半球(通常为左侧)额叶Broca区受累。/n/n【定位诊断】:左侧大脑中动脉供血区(皮层或深部白质)。/n/n【定性诊断】:急性起病,老年男性,伴高血压危险因素,考虑缺血性脑卒中可能性大。/n/n【建议检查】:紧急头颅CT平扫排除出血,必要时行MRI(DWI)及血管评估。"}
{"instruction": "你是一名资深的神经科医生。请根据提供的患者主诉,进行症状分析、病变定位并给出可能的诊断方向。", "input": "患者,女,45岁。双下肢麻木、无力3天,伴排尿困难。1周前曾有“感冒”史。查体:双下肢肌力3级,胸4平面对称性痛觉减退,双侧Babinski征(+)。", "output": "【症状分析】:双下肢瘫痪伴感觉平面(T4)及尿潴留,提示脊髓横贯性损害。Babinski征(+)提示病变累及锥体束。/n/n【定位诊断】:胸髓(T4水平)。/n/n【定性诊断】:青年女性,急性/亚急性起病,有前驱感染史,表现为脊髓横贯损害,首选急性脊髓炎。/n/n【建议检查】:脊髓MRI(增强)、脑脊液检查(压力、细胞、蛋白、寡克隆带)、AQP4抗体检测。"}
{"instruction": "你是一名资深的神经科医生。请根据提供的患者主诉,进行症状分析、病变定位并给出可能的诊断方向。", "input": "患者,男,52岁。发作性右上肢抽搐伴意识丧失1次。家属描述患者先是右手不自主抖动,随后波及全身,持续约2分钟缓解,事后不能回忆。", "output": "【症状分析】:右上肢起始抽搐提示左侧运动皮层异常放电。继发全身抽搐及意识丧失属于局灶性发作演变为双侧强直-阵挛发作(GTCS)。/n/n【定位诊断】:左侧额叶(中央前回运动区)。/n/n【定性诊断】:成年新发癫痫发作,需警惕继发性因素(如肿瘤、血管畸形)。/n/n【建议检查】:头颅MRI(增强)、长程脑电图(EEG)、血生化排除电解质紊乱。"}

为什么要这样设计字段呢

  • Instruction(指令):定义角色为“神经科医生”。这会强制模型在 1.5B 的参数库里调用医学相关的权重,避免口语化。
  • Input(输入):放置病史和症状。这是模型分析的基础。
  • Output(输出):必须包含逻辑链。不要直接给诊断结论(如:脑梗死),要让模型输出“分析”和“定位”的过程。这种“思维链(CoT)”微调能极大地提高 1.5B 小模型的逻辑准确度。

形象的比喻

场景相当于指令 (Instruction)输入 (Input)输出 (Output)
随笔微调写随笔“请写一篇日志”(留空,随便你写什么)“【标题】:冬至来了…”
神经科微调做数学题“请计算这道题”“1 + 1 = ?”“等于 2”

训练

训练模型,至少6g以上的显存,不然跑不太动,这里我也只是以最小模型做测试,这里选择模型Qwen2.5-1.5B进行微调,代码参考如下

import os
# --- 1. 彻底禁用导致报错的编译与优化特性 ---
os.environ["UNSLOTH_USE_FUSED_CE"] = "0"       # 禁用融合损失,避开 triton 调用
os.environ["TORCH_COMPILE_DISABLE"] = "1"      # 强制禁用 torch 编译,解决 triton_key 报错
os.environ["HF_HOME"] = "E:/huggingface_cache"
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

from unsloth import FastLanguageModel
import torch
from datasets import load_dataset
from trl import SFTTrainer
from transformers import TrainingArguments

# 2. 配置 1.5B 模型 (非常适合 6GB 显存测试)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/Qwen2.5-1.5B-Instruct-bnb-4bit", 
    max_seq_length = 1024,      # 1.5B 模型我们可以把长度放宽到 1024
    load_in_4bit = True,
)

# 3. 添加 LoRA 适配器
model = FastLanguageModel.get_peft_model(
    model,
    r = 16, 
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 16,
    lora_dropout = 0,
    bias = "none",    
    use_gradient_checkpointing = "unsloth", 
    random_state = 3407,
)

# --- 4. 数据集处理 (Alpaca 格式) ---
alpaca_prompt = """Below is an instruction that describes a task. 
### Instruction:
{}
### Input:
{}
### Response:
{}"""

EOS_TOKEN = tokenizer.eos_token

def formatting_prompts_func(examples):
    instructions = examples["instruction"]
    inputs       = examples["input"]
    outputs      = examples["output"]
    texts = []
    for instruction, input, output in zip(instructions, inputs, outputs):
        text = alpaca_prompt.format(instruction, input, output) + EOS_TOKEN
        texts.append(text)
    return { "text" : texts, }

dataset = load_dataset("json", data_files = {"train": r"E:/train_data_creative.jsonl"}, split = "train")
dataset = dataset.map(formatting_prompts_func, batched = True)

# --- 5. 设置训练参数 (稳健配置) ---
trainer = SFTTrainer(
    model = model,
    tokenizer = tokenizer,
    train_dataset = dataset,
    dataset_text_field = "text",
    max_seq_length = 1024,
    args = TrainingArguments(
        per_device_train_batch_size = 2,      # 1.5B 模型可以尝试 batch_size=2
        gradient_accumulation_steps = 4,
        warmup_steps = 5,
        max_steps = 30,                       # 跑 30 步快速验证
        learning_rate = 2e-4,
        fp16 = True,
        logging_steps = 1,
        optim = "adamw_8bit", 
        weight_decay = 0.01,
        torch_compile = False,                # 禁用编译以防 Windows 报错
        gradient_checkpointing = True,
        output_dir = "E:/outputs",
    ),
)

# 6. 开始验证训练
print(">>> 正在启动 1.5B 模型测试训练...")
trainer.train()
print(">>> 训练成功完成!恭喜你打通了本地训练全流程!")

看到如下输出,就说明正在训练了

🦥 Unsloth Zoo will now patch everything to make training faster!
[unsloth_zoo.log|WARNING]Unsloth: Could not patch trl.trainer.grpo_trainer: Direct module loading failed for UnslothGRPOTrainer: Unexpected optimization option triton.enable_persistent_tma_matmul, known options are ['TYPE_CHECKING', 'enable_auto_functionalized_v2', 'debug', 'disable_progress', 'verbose_progress', 'fx_graph_cache', 'fx_graph_remote_cache', 'autotune_local_cache', 'autotune_remote_cache', 'force_disable_caches', 'sleep_sec_TESTING_ONLY', 'custom_op_default_layout_constraint', 'cpp_wrapper', 'abi_compatible', 'c_shim_version', 'dce', 'static_weight_shapes', 'size_asserts', 'nan_asserts', 'pick_loop_orders', 'inplace_buffers', 'allow_buffer_reuse', 'memory_planning', 'memory_pool', 'benchmark_harness', 'epilogue_fusion', 'epilogue_fusion_first', 'pattern_matcher', 'b2b_gemm_pass', 'post_grad_custom_pre_pass', 'post_grad_custom_post_pass', 'joint_custom_pre_pass', 'joint_custom_post_pass', 'pre_grad_custom_pass', '_pre_fusion_custom_pass', 'split_cat_fx_passes', 'efficient_conv_bn_eval_fx_passes', 'is_predispatch', 'group_fusion', 'batch_fusion', 'pre_grad_fusion_options', 'post_grad_fusion_options', 'reorder_for_locality', 'dynamic_scale_rblock', 'force_fuse_int_mm_with_mul', 'use_mixed_mm', 'fx_passes_numeric_check', 'mixed_mm_choice', 'reorder_for_compute_comm_overlap', 'reorder_for_compute_comm_overlap_passes', 'estimate_op_runtime', 'intra_node_bw', 'inter_node_bw', 'max_autotune', 'max_autotune_pointwise', 'max_autotune_gemm', 'force_same_precision', 'max_autotune_gemm_backends', 'max_autotune_conv_backends', 'max_autotune_gemm_search_space', 'autotune_fallback_to_aten', 'unbacked_symint_fallback', 'search_autotune_cache', 'save_args', 'autotune_in_subproc', 'max_autotune_subproc_result_timeout_seconds', 'max_autotune_subproc_graceful_timeout_seconds', 'max_autotune_subproc_terminate_timeout_seconds', 'autotune_multi_device', 'coordinate_descent_tuning', 'coordinate_descent_check_all_directions', 'coordinate_descent_search_radius', 'autoheuristic_collect', 'autoheuristic_use', 'autoheuristic_log_path', 'layout_opt_default', 'layout_optimization', 'force_layout_optimization', 'keep_output_stride', 'warn_mix_layout', 'realize_reads_threshold', 'realize_opcount_threshold', 'realize_acc_reads_threshold', 'fallback_random', 'implicit_fallbacks', 'aggressive_fusion', 'debug_fusion', 'benchmark_fusion', 'enabled_metric_tables', 'loop_ordering_after_fusion', 'benchmark_epilogue_fusion', 'max_epilogue_benchmarked_choices', 'max_fusion_size', 'max_pointwise_cat_inputs', 'unroll_reductions_threshold', 'comment_origin', 'conv_1x1_as_mm', 'split_reductions', 'benchmark_kernel', 'constant_and_index_propagation', 'always_keep_tensor_constants', 'assert_indirect_indexing', 'compute_all_bounds', 'combo_kernels', 'benchmark_combo_kernel', 'combo_kernels_autotune', 'combo_kernel_allow_mixed_sizes', 'combo_kernel_foreach_dynamic_shapes', 'joint_graph_constant_folding', 'debug_index_asserts', 'emulate_precision_casts', 'is_nightly_or_source', 'developer_warnings', 'optimize_scatter_upon_const_tensor', 'worker_start_method', '_fuse_ddp_communication', '_fuse_ddp_bucket_size', '_fuse_ddp_communication_passes', '_micro_pipeline_tp', 'compile_threads', 'global_cache_dir', 'kernel_name_max_ops', 'shape_padding', 'comprehensive_padding', 'pad_channels_last', 'disable_padding_cpu', 'padding_alignment_bytes', 'padding_stride_threshold', 'pad_outputs', 'bw_outputs_user_visible', 'force_shape_pad', 'permute_fusion', 'profiler_mark_wrapper_call', 'generate_intermediate_hooks', 'debug_ir_traceback', '_raise_error_for_testing', '_profile_var', 'profile_bandwidth', 'profile_bandwidth_regex', 'profile_bandwidth_output', 'profile_bandwidth_with_do_bench_using_profiling', 'disable_cpp_codegen', 'freezing', 'freezing_discard_parameters', 'allow_stack_allocation', 'use_minimal_arrayref_interface', 'decompose_mem_bound_mm', 'assume_aligned_inputs', 'unsafe_ignore_unsupported_triton_autotune_args', 'check_stack_no_cycles_TESTING_ONLY', 'cpp.threads', 'cpp.no_redundant_loops', 'cpp.dynamic_threads', 'cpp.simdlen', 'cpp.min_chunk_size', 'cpp.cxx', 'cpp.enable_kernel_profile', 'cpp.weight_prepack', 'cpp.inject_relu_bug_TESTING_ONLY', 'cpp.inject_log1p_bug_TESTING_ONLY', 'cpp.vec_isa_ok', 'cpp.descriptive_names', 'cpp.max_horizontal_fusion_size', 'cpp.fallback_scatter_reduce_sum', 'cpp.enable_unsafe_math_opt_flag', 'cpp.enable_floating_point_contract_flag', 'cpp.enable_tiling_heuristics', 'cpp.gemm_max_k_slices', 'cpp.gemm_cache_blocking', 'cpp.gemm_thread_factors', 'cpp.enable_loop_tail_vec', 'triton.cudagraphs', 'triton.cudagraph_trees', 'triton.cudagraph_skip_dynamic_graphs', 'triton.slow_path_cudagraph_asserts', 'triton.cudagraph_trees_history_recording', 'triton.cudagraph_support_input_mutation', 'triton.cudagraph_unexpected_rerecord_limit', 'triton.cudagraph_dynamic_shape_warn_limit', 'triton.force_cudagraph_sync', 'triton.force_cudagraphs_warmup', 'triton.fast_path_cudagraph_asserts', 'triton.skip_cudagraph_warmup', 'triton.debug_sync_graph', 'triton.debug_sync_kernel', 'triton.dense_indexing', 'triton.max_tiles', 'triton.prefer_nd_tiling', 'triton.autotune_pointwise', 'triton.autotune_cublasLt', 'triton.autotune_at_compile_time', 'triton.tiling_prevents_pointwise_fusion', 'triton.tiling_prevents_reduction_fusion', 'triton.unique_kernel_names', 'triton.descriptive_names', 'triton.persistent_reductions', 'triton.multi_kernel', 'triton.divisible_by_16', 'triton.min_split_scan_rblock', 'triton.store_cubin', 'triton.spill_threshold', 'triton.use_block_ptr', 'triton.inject_relu_bug_TESTING_ONLY', 'triton.codegen_upcast_to_fp32', 'aot_inductor.output_path', 'aot_inductor.debug_compile', 'aot_inductor.debug_dump_consts_bin', 'aot_inductor.debug_intermediate_value_printer', 'aot_inductor.filtered_kernel_names', 'aot_inductor.serialized_in_spec', 'aot_inductor.serialized_out_spec', 'aot_inductor.use_runtime_constant_folding', 'aot_inductor.force_mmap_weights', 'aot_inductor.package', 'cuda.arch', 'cuda.version', 'cuda.compile_opt_level', 'cuda.enable_cuda_lto', 'cuda.enable_ptxas_info', 'cuda.enable_debug_info', 'cuda.use_fast_math', 'cuda.cutlass_dir', 'cuda.cutlass_max_profiling_configs', 'cuda.cuda_cxx', 'cuda.cutlass_backend_min_gemm_size', 'cuda.generate_test_runner', 'cuda.cutlass_op_allowlist_regex', 'cuda.cutlass_op_denylist_regex', 'rocm.arch', 'rocm.ck_supported_arch', 'rocm.compile_opt_level', 'rocm.is_debug', 'rocm.save_temps', 'rocm.use_fast_math', 'rocm.flush_denormals', 'rocm.print_kernel_resource_usage', 'rocm.rocm_home', 'rocm.ck_dir', 'rocm.n_max_profiling_configs', 'rocm.use_preselected_instances', 'cpu_backend', 'cuda_backend', 'halide.cpu_target', 'halide.gpu_target', 'halide.scheduler_cuda', 'halide.scheduler_cpu', 'halide.asserts', 'halide.debug', 'halide.scan_kernels', 'trace.enabled', 'trace.debug_dir', 'trace.debug_log', 'trace.info_log', 'trace.fx_graph', 'trace.fx_graph_transformed', 'trace.ir_pre_fusion', 'trace.ir_post_fusion', 'trace.output_code', 'trace.graph_diagram', 'trace.draw_orig_fx_graph', 'trace.dot_graph_shape', 'trace.log_url_for_graph_xform', 'trace.compile_profile', 'trace.upload_tar', 'trace.log_autotuning_results', '_save_config_ignore', '_cache_config_ignore_prefix']
==((====))==  Unsloth 2026.2.1: Fast Qwen2 patching. Transformers: 4.57.6.
   //   /|    Num GPUs = 1. Max memory: 6.0 GB. Platform: Windows.
O^O/ /_/ /    Torch: 2.5.1+cu121. CUDA: 7.5. CUDA Toolkit: 12.1. Triton: 3.6.0
/        /    Bfloat16 = FALSE. FA [Xformers = None. FA2 = False]
 "-____-"     Free license: http://github.com/unslothai/unsloth
Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!
unsloth/qwen2.5-1.5b-instruct-bnb-4bit does not have a padding token! Will use pad_token = <|PAD_TOKEN|>.
Unsloth 2026.2.1 patched 28 layers with 28 QKV layers, 28 O layers and 28 MLP layers.
Generating train split: 390 examples [00:00, 31617.80 examples/s]
Map: 100%|███████████████████████████████████████████████████ ███████| 390/390 [00:00<00:00, 20143.32 examples/s]
Unsloth: Tokenizing ["text"]: 100%|███████████████████████████████████| 390/39Unsloth: Tokenizing ["text"]: 100%|███████████████████████████████████| 390/390 [00:00<00:00, 449.94 examples/s]
>>> 正在启动 1.5B 模型测试训练...
==((====))==  Unsloth - 2x faster free finetuning | Num GPUs used = 1
   //   /|    Num examples = 390 | Num Epochs = 1 | Total steps = 30
O^O/ /_/ /    Batch size per device = 2 | Gradient accumulation steps = 4
/        /    Data Parallel GPUs = 1 | Total batch size (2 x 4 x 1) = 8
 "-____-"     Trainable parameters = 18,464,768 of 1,562,179,072 (1.18% trained)
  0%|                                                                                    | 0/30 [00:00<?, ?it/s]Unsloth: Will smartly offload gradients to save VRAM!
  3%|██▍                                                                      | 1/30 [02:22<1:08:54, 142.57s/i{'loss': 3.1134, 'grad_norm': 0.26568782329559326, 'learning_rate': 0.0, 'epoch': 0.02}
  3%|██▍                                                                      | 1/30 

测试

然后耐心等微调模型训练结束之后,会在E:/outputs 文件夹里生成微调后的模型,然后可以与原来的模型做下测试。测试代码也一起提供,如下:

from unsloth import FastLanguageModel
import torch

# 准备相同的问题和模板
#alpaca_prompt = """### Instruction:/n{}/n/n### Input:/n{}/n/n### Response:/n{}"""
#question = "你是一个专业的神经科医生,请对如下症状(*)做下分析总结。"
#inputs_text = alpaca_prompt.format(question, "", "")

instruction = "你是一名资深的神经科医生。请根据提供的患者主诉,进行症状分析、病变定位并给出可能的诊断方向。"
test_input = "患者,男,60岁。突发左侧肢体麻木伴口角歪斜1小时,既往有糖尿病史。"
# 构造完整的推理输入
inputs_text = alpaca_prompt.format(instruction, test_input)

# --- 第一部分:用【新脑袋】测试 ---
print("/n" + "="*20 + "【新模型 (已微调)】" + "="*20)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "E:/outputs/checkpoint-30", 
    max_seq_length = 512,
    load_in_4bit = True,
)
FastLanguageModel.for_inference(model)
inputs = tokenizer([inputs_text], return_tensors = "pt").to("cuda")
outputs = model.generate(inputs, max_new_tokens = 1000)
print(tokenizer.batch_decode(outputs)[0].split("### Response:")[1])

# 释放显存,准备加载下一个
del model
torch.cuda.empty_cache()

# --- 第二部分:用【旧脑袋】对比 ---
print("/n" + "="*20 + "【原模型 (底座)】" + "="*20)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/Qwen2.5-1.5B-Instruct-bnb-4bit", 
    max_seq_length = 512,
    load_in_4bit = True,
)
FastLanguageModel.for_inference(model)
inputs = tokenizer([inputs_text], return_tensors = "pt").to("cuda")
outputs = model.generate(inputs, max_new_tokens = 1000)
print(tokenizer.batch_decode(outputs)[0].split("### Response:")[1])

写在最后

当整个流程跑通之后,你就可以针对自己的行业、自己的业务场景去做定制化微调。

不管是医疗问答、企业内部知识库,还是某个垂直领域的专业助手,都可以通过这种方式不断“调教”模型,让它更贴近实际需求。

模型不一定要多大,但只要它足够懂你的场景,就已经是一种非常高效的辅助工具了。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

👇👇扫码免费领取全部内容👇👇
在这里插入图片描述

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

在这里插入图片描述

4. 2026行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇
在这里插入图片描述

Unsloth本地微调Qwen3.6:消费级显卡高效训练大模型实战 大语言模型微调是实现个性化AI应用的关键环节,其核心在于在有限硬件资源下兼顾训练效率、显存占用与模型精度。传统QLoRA等方法常面临梯度不稳定、长上下文适配差及量化后精度损失等问题;而Unsloth通过动态图融合、智能梯度检查点与量化感知训练(QAT)等底层优化,在RTX 3090/4090等消费级GPU上显著降低显存压力并提升训练速度。结合GGUF格式的4-bit量化模型(如Qwen3.6-27B-UD-IQ3_XXS)与WSL2原生环境部署,可实现在12GB+显存设备上稳定微调27B级模型。该方案广泛适 阅读详情

相关推荐

Unsloth微调大模型:3GB显存跑通QLoRA实战指南

大模型微调长期受限于高显存、高算力、高技术门槛,而QLoRA作为低秩适配的轻量化训练范式,正成为个人开发者与业务工程师落地AI的关键路径。其核心原理是通过低秩矩阵分解冻结主干参数,在极小增量参数上更新梯度,大幅降低显存与计算开销;结合动态4位量化、Flash Attention优化与梯度检查点精简等工程手段,可将原本需32GB显存的任务压缩至3GB以内。这一技术显著提升了模型定制效率与试错敏捷性,广泛适用于客服话术优化、垂直领域知识注入、个人AI助手构建等场景。Unsloth正是将QLoRA与底层CUDA优

com_xpp的专栏 375

Windows下Qwen微调避坑指南:CUDA、Conda与Unsloth三重兼容方案

大语言模型微调依赖于底层计算框架、Python运行时和训练库的深度协同。在Windows平台,CUDA工具链版本、PyTorch二进制ABI兼容性、Conda环境隔离能力以及Unsloth对Qwen系列模型的适配逻辑共同构成关键技术栈。其中,CUDA 12.4与NVIDIA驱动536.67的组合可解决cuBLAS初始化失败问题;Conda创建的纯净环境能规避Windows特有的DLL冲突;而transformers 5.0.x与unsloth_zoo的双版本锁机制,则保障Qwen3.5等VLM模型的toke

子夜轻风 460

Kaggle+Unsloth+Qwen3:T4显卡微调大模型的破局组合

大模型微调长期受限于显存墙、精度墙与工程墙,而Qwen3凭借RoPE静态化、SwiGLU分离设计和FlashAttention-2原生支持,成为轻量化微调的理想基座;Unsloth则通过算子级重写实现4-bit量化、动态RMSNorm缩放与CUDA Graph内存调度,在Kaggle T4(16GB显存)上将Qwen3-4B微调显存压至5.7GB;该组合无需A100/H100,不依赖云服务器,开箱即用完成LoRA训练、人格化对齐与Ollama本地部署,特别适合数据量<5000条、目标为快速验证prompt工

weixin_33850890的博客 1109

LLM实战:LLM微调加速神器-Unsloth + Qwen1.5

本文主要是使用unsloth框架针对Qwen1.5的高效微调实验,提供了详细的对比代码以及不同维度的对比分析结果。

MENGERN的专栏 3004

w11快速搭建Unsloth环境与Qwen3模型微调

本文介绍了使用Unsloth框架对通义千问Qwen3-4B模型进行微调的完整流程。主要包括:1)创建conda环境并安装必要的依赖项;2)下载模型和准备数据集;3)进行LoRA微调训练;4)测试微调后的模型效果。其中重点展示了数据格式处理、训练参数配置以及交互式对话测试方法。文章指出,虽然基础对话功能已实现,但创造性输出仍需更专业的数据集支持。最后提到将后续解析代码原理,采用理论与实践交替的讲解方式。

agoodtimeo的博客 469

Unsloth本地微调实战:3060显卡跑通Qwen3.6-27B

大模型微调正从云端走向本地——其核心在于降低硬件门槛与工程复杂度。LoRA与QLoRA作为轻量级参数高效微调技术,结合GGUF量化格式和CUDA内核级优化,显著压缩显存占用并提升训练吞吐。Unsloth并非新算法框架,而是将这些成熟技术深度集成、硬件对齐的系统级训练引擎,尤其适配消费级GPU(如RTX 3060)进行大模型本地化微调。它支持PDF/CSV自动结构化清洗、多模态任务注册、动态KV缓存管理等生产就绪能力,让法务、农技、医疗等一线业务人员无需深度学习背景即可完成垂类模型定制。本文聚焦于在有限资源下

chenshixi3325的博客 323

实操来了!Unsloth:手把手教你微调Qwen3。

本文介绍了Qwen3大模型的微调优化方法,重点展示了如何利用Unsloth工具提升训练效率。主要内容包括:1)使用4bit量化加载模型,结合LoRA适配器减少参数更新量;2)混合推理数据(75%)和非推理数据(25%)进行训练,平衡模型能力;3) 通过SFTTrainer进行高效微调,支持多种保存格式(16bit/4bit/GGUF)。文章还提供了完整的代码实现,涵盖数据处理、模型训练、推理测试到模型保存的全流程,并分享了AI大模型学习资源。该方法显著降低了显存需求,提升了训练速度,适用于需要保持推理能力的

2401_85375151的博客 1811

Unsloth工具实战:在普通显卡上微调Qwen3.5大模型

这次我们来看一个能让你在普通显卡上微调 Qwen3.5 大模型的工具——Unsloth。对于想训练特定领域大模型(比如金融、法律、医疗问答机器人)的开发者来说,最大的门槛往往不是算法,而是硬件。动辄需要几十上百 GB 显存的微调任务,让很多个人开发者望而却步。 Unsloth 的核心价值就在这里:它通过一系列优化技术,显著降低了 Qwen3.5 系列模型微调时的显存占用和训练时间。根据官方数据,使用 Unsloth 进行 bf16 LoRA 微调,Qwen3.5-0.8B 仅需约 3GB 显存,4B 模型约

weixin_33908217的博客 303

【大模型实战】Unsloth微调Qwen3:高效训练的详细步骤解析

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

2401_84815887的博客 1376

Unsloth本地AI训练实战:高效微调Qwen3.6-27B教程

AI模型本地训练正从‘能跑通’迈向‘可工程化’,其核心瓶颈在于显存刚性约束与传统框架的云原生设计冲突。Unsloth通过CUDA内核重写、动态图融合、零拷贝张量管理等底层优化,实现训练速度翻倍与显存占用降低70%,让QLoRA微调在RTX 4090等消费级硬件上具备确定性。它不仅提供命令行API,更通过Unsloth Studio将数据加载、模板注入、量化配置、模型导出封装为可视化工作流,显著降低法律、金融等垂直领域私有模型落地门槛。本文聚焦Qwen3.6-27B在本地环境的全流程实践,涵盖4-bit量化加

weixin_33767813的博客 565

Unsloth本地大模型微调实战:RTX4090上高效训练Qwen3.6-27B

大模型微调是当前AI工程落地的核心环节,其本质是在有限硬件资源下完成参数更新与知识注入。传统PyTorch+Transformers流程因梯度检查点开销、AdamW优化器三倍显存膨胀及同步数据加载等瓶颈,在消费级GPU(如RTX 4090)上极易触发OOM并显著拖慢训练速度。Unsloth通过分块张量计算、零冗余优化器状态复用和异步内存映射三大底层技术突破,将显存占用降低约70%、训练速度提升约2倍,同时保持精度无损。该方案特别适用于开源模型(如Qwen、Llama、Gemma)在本地环境的LoRA/QLo

weixin_34080571的博客 417

LoRA微调学习

构造输入:将系统提示、用户指令和期望回答拼接成一个完整文本,并进行 tokenization,得到input_ids和。构造目标:设置labels,确保模型只在回答部分计算损失(对前面指令部分用 -100 忽略)。数据送入模型训练:通过前向传播、损失计算和反向传播,微调模型参数,使模型能够根据给定的指令生成正确的回答。在这个过程中,input_ids提供了输入的数值表示,告诉模型哪些 token 需要关注,而labels则为训练提供了目标监督信号。

xnuscd的博客 1509

手机相机Tuning专项调优(一):基础流程与图像主观评价标准建立实战解析

本篇为手机相机系统“Tuning专项调优”系列的开篇,深入剖析了当前手机相机Tuning的基本流程与图像主观评价标准的构建方法。结合实际工程经验与最新业界案例,详细介绍ISP调优和3A控制中涉及的主观评价标准,如锐度、色彩饱和度、噪声感知等,并提出一套可工程化落地的标准制定与评测实践体系,帮助工程师有效提升图像品质。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1936

我用unsloth将Qwen3大模型微调成了一个脑筋急转弯专家

参考: https://help.aliyun.com/zh/egs/user-guide/install-a-gpu-driver-on-a-gpu-accelerated-compute-optimized-linux-instance。微调会比较耗时,主要取决你的硬件配置以及脚本中你设定的max_steps参数,这个数值越大,它训练的时间就越久。数据集对于微调来说,是很重要的一环,数据集质量的好坏直接决定了你微调的效果。此次微调我用的是Qwen3-4B的版本,相对来说参数量不大,而且效果比较好。

机器学习社区 1196

linux v3h平台开发系列详解(GMSL摄像头篇):1.12 解串器MAX96712输出4 lane 变 2 lane的配置

本文详细介绍了在Linux v3h平台上,针对Max96712解串器进行MIPI 4lane到2lane配置。内容包括串行器解串器介绍、链路框架、硬件连接、以及软件寄存器如何配值和一些问题的解决方法。

xian18809311584的博客 1095

计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题

机器字长是指CPU一次能处理数据的位数通常与CPU的寄存器位数有关。指令字长是指机器指令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三者可以相等也可以不等视不同机器而定。答:OP(4位)A1(6位)A_1(6位)A1​(6位)A2(6位)A_2(6位)A2​(6位)设二地址指令格式为该指令系统的基本格式,4位操作码共有16种编码,其中13种用来定义二地址指令,还剩3种可用作扩展标志。一地址指令条数=3∗26=192。

weixin_45735391的博客 7万+

Windows也能跑?Unsloth本地环境搭建经验

本文介绍了如何在星图GPU平台上自动化部署unsloth镜像,实现大语言模型的轻量化微调。基于该平台,用户可快速构建Windows友好型本地训练环境,典型应用于医疗问答等专业领域SFT微调任务,显著降低显存需求与部署门槛。

weixin_35459464的博客 618

机器人视觉联动精度优化:从±2mm到±0.02mm,产线级手眼标定全实战

2025年我接东莞长安Type-C接口分拣项目的时候,就是栽在了手眼标定上:实验室里标定完精度±0.5mm,一到产线直接掉到±2mm,机器人10次有3次抓不住,2000多件Type-C接口直接报废,还撞坏了2套汇川SCARA机器人的吸盘,本来45天的工期拖了3个月,不仅没赚到钱,还倒贴了几万块。手眼标定从来不是简单的跑个demo、算个矩阵就完事了,它是一个系统工程:从硬件选型、安装固定、相机标定、标定流程、算法优化、环境控制、重复验证,每一个环节都会影响最终的联动精度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 389

Unsloth微调Qwen2.5-vl-3B-4bit版本

记录微调 Qwen2.5-vl-3B-4bit的过程,使用windows的WSL-Ubuntu22.04部署。

weixin_58447899的博客 2796

移动端实战指南:深入理解 & 接入 IAB OMSDK

OMSDK(OpenMeasurementSDK)是IABTechLab推出的标准化测量工具,用于统一移动端/原生App广告的可见性和验证流程。其核心包括Native库(采集设备数据)和OMID JavaScript层(实现通信),通过标准化接口让开发者只需接入一套SDK即可兼容多个测量厂商,减少冲突和性能损耗。v1.4版本强化了对CTV和原生App场景的支持,而v1.5新增了画中画检测等功能。集成流程需通过IAB技术实验室注册下载,并遵循严格的命名空间规则。测试阶段需嵌入验证脚本并通过指定工具验证

帅次的博客 1194

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 676

Windows用户福音!Unsloth本地训练大模型指南

本文介绍了如何在星图GPU平台上自动化部署unsloth镜像,实现Windows环境下的大语言模型高效微调。无需WSL或CUDA版本适配,用户可快速完成Qwen-14B等模型的QLoRA训练,典型应用于医学问答、客服对话等垂直领域微调任务,显著降低本地AI开发门槛。

weixin_42518334的博客 1167

手把手教你学 GPU SoC 芯片(9.3)--GPU SOC 功耗和热管理的动态电压和频率调整(DVFS)

通过动态电压和频率调整(DVFS),可以有效地管理GPU SoC的功耗和热管理。合理的DVFS策略不仅可以节省功耗,提高能效,还可以延长设备的使用寿命。

MHD0815的博客 1502

Unsloth微调Qwen2.5:显存不足问题解决实战案例

本文介绍了如何在星图GPU平台上自动化部署unsloth镜像,高效解决Qwen2.5大语言模型微调中的显存不足问题。通过该镜像,用户可在单卡24GB或更低显存设备上完成高质量领域适配,典型应用于教育场景中的中小学作文智能批改。

weixin_31938351的博客 1070

Python计算时间差的方法

使用datetime模块是Python内置的方法,使用timedelta对象可以更精确地计算时间差,而使用dateutil库则提供了更为灵活和方便的操作方式。我们可以使用datetime模块中的datetime类来表示一个具体的日期和时间,并进行相应的运算。在Python中,我们经常需要计算日期和时间之间的差异,例如计算两个日期之间的天数、小时数、分钟数等。Python提供了多种方法来计算时间差,下面我们将介绍其中的几种常用方法,并附上相应的源代码。在上面的代码中,我们使用了dateutil库中的。

学习使你进步。 2086

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Unsloth Desktop:把LLM微调拖进图形界面,本地也能轻松跑

大模型微调长期是深度学习工程师的专属技能,环境配置、脚本编写、显存调优等障碍让普通开发者望而却步。LoRA与QLoRA等参数高效微调技术的出现,大幅降低了训练门槛,而Unsloth在这一基础上进一步优化了显存占用和训练速度,使得消费级GPU也能胜任7B级模型的微调任务。然而,命令行的交互方式依然不够友好。Unsloth Desktop将模型加载、数据集准备、参数配置、训练启动与模型导出等环节封装为图形化界面,底层引擎仍保留Unsloth的核心能力,适合新手快速验证微调流程,也方便工程师将重复操作标准化。无论

weixin_34038293的博客 373

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: RAG系统“瘦身“计划
下一篇: 做RAG这一年,最后悔的就是上知识图谱
AI_小站
博客等级 码龄3年 6255粉丝 1154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值