Ai之大模型进阶模型微调-Unsloth微调-实战5

发布时间:2025-03-15 18:30:49编辑:123阅读(22)

    通过上一章平台微调大模型,已经了解了模型微调需要的大部分基础概念,也通过硅基流动平台走完了一个完整的微调流程,在这个过程中发现有几个问题:

    可以选择的基础模型太少了,没有想要的 DeepSeek 相关模型。

    模型训练过程中的 Token 消耗是要自己花钱的,对于有海量数据集的任务可能消耗比较大。

    微调任务触发不太可控,在测试的时候创建的微调任务,等了很久还没有被触发,可能是硅基流动最近调用量太大,资源不足的问题,但是总归这个任务还是不太可控的。

    为了解决这个问题,最终我们还是要使用代码来微调,这样我们就能灵活选择各种开源模型,无需担心训练过程中的 Token 损耗,灵活的控制微调任务了


    进阶:要了解的工具

    后续模型微调过程中需要用到的两个核心工具Colab 和 Unsloth。

    Colab 是一个基于云端的编程环境,由 Google 提供。它的主要功能和优势包括:免费的 GPU 资源:Colab 提供免费的 GPU,适合进行模型微调。虽然免费资源有一定时间限制,但对于大多数微调任务来说已经足够。易于上手:Colab 提供了一个基于网页的 Jupyter Notebook 环境,用户无需安装任何软件,直接在浏览器中操作。丰富的社区支持:Colab 上有许多现成的代码示例和教程,可以帮助新手快速入门。

    简单来说,有了 Colab ,可以让你没有在比较好的硬件资源的情况下,能够在线上微调模型,如果只是学习的话,免费的资源就够了。另外,市面上很多模型微调的 DEMO ,都是通过  Colab 给出的,大家可以非常方便的直接进行调试运行。


    Unsloth 是一个开源工具,专门用来加速大语言模型(LLMs)的微调过程。它的主要功能和优势包括:高效微调:Unsloth 的微调速度比传统方法快 2-5 倍,内存占用减少 50%-80%。这意味着你可以用更少的资源完成微调任务。低显存需求:即使是消费级 GPU(如 RTX 3090),也能轻松运行 Unsloth。例如,仅需 7GB 显存就可以训练 1.5B 参数的模型。支持多种模型和量化:Unsloth 支持 Llama、Mistral、Phi、Gemma 等主流模型,并且通过动态 4-bit 量化技术,显著降低显存占用,同时几乎不损失模型精度。开源与免费:Unsloth 提供免费的 Colab Notebook,用户只需添加数据集并运行代码即可完成微调。

    简单来说,Unsloth 采用了某些优化技术,可以帮助我们在比较低级的硬件设备资源下更高效的微调模型。在 Unsloth 出现之前,模型微调的成本非常高,普通人根本就别想了,微调一次模型至少需要几万元,几天的时间才能完成。我们看到 Unsloth 官方提供了很多通过 Colab 提供的各种模型的微调案例,我们可以很方便的在 Colab 上直接运行这些案例。

    image.png


    实战:使用unsloth微调模型

    python版本 python=3.12

    安装unsloth前需要安装:

    1 安装NVIDIA视频驱动程序 下载对应的版本安装即可 https://www.nvidia.com/en-us/drivers/

    查看当前显卡运行时版本

    nvidia-smi

    image.png

    2 安装Visual Studio C++ 下载地址 https://visualstudio.microsoft.com/zh-hans/vs/community/  

    需要安装的依赖:

    NET Framework 4.8 SDK

    .NET Framework 4.7.2 targeting pack

    C# and Visual Basic Roslyn compilers

    MSBuild

    MSVC v143 - VS 2022 C++ x64/x86 build tools

    C++ 2022 Redistributable Update

    C++ CMake tools for Windows

    C++/CLI support for v143 build tools (Latest)

    MSBuild support for LLVM (clang-cl) toolset

    C++ Clang Compiler for Windows (19.1.1)

    Windows 11 SDK (10.0.22621.0)

    Windows Universal CRT SDK

    C++ 2022 Redistributable MSMs

    也可以执行命令安装,如下

    image.png

    cmd命令

    "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe" modify ^

    --installPath "C:\Program Files\Microsoft Visual Studio\2022\Community" ^

    --add Microsoft.Net.Component.4.8.SDK ^

    --add Microsoft.Net.Component.4.7.2.TargetingPack ^

    --add Microsoft.VisualStudio.Component.Roslyn.Compiler ^

    --add Microsoft.Component.MSBuild ^

    --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^

    --add Microsoft.VisualStudio.Component.VC.Redist.14.Latest ^

    --add Microsoft.VisualStudio.Component.VC.CMake.Project ^

    --add Microsoft.VisualStudio.Component.VC.CLI.Support ^

    --add Microsoft.VisualStudio.Component.VC.Llvm.Clang ^

    --add Microsoft.VisualStudio.ComponentGroup.ClangCL ^

    --add Microsoft.VisualStudio.Component.Windows11SDK.22621 ^

    --add Microsoft.VisualStudio.Component.Windows10SDK.19041 ^

    --add Microsoft.VisualStudio.Component.UniversalCRT.SDK ^

    --add Microsoft.VisualStudio.Component.VC.Redist.MSM


    3 安装CUDA工具包 下载对应系统版本安装 https://developer.nvidia.com/cuda-toolkit-archive

    image.png

    查看当前安装的CUDA运行时版本

    image.png


    windows环境安装unsloth教程  地址:https://docs.unsloth.ai/get-started/installing-+-updating/windows-installation


    上面都安装后,以管理员权限打开cmd, 无报错信息表示成功。

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple unsloth



    加载预训练模型

    看到这里的参数是 model_name,然后选择的是 DeepSeek-R1-Distill-Llama-8B(基于 Llama 的 DeepSeek-R1 蒸馏版本,80 亿参数),然后运行代码我们可以看到模型的拉取日志:

    # 导入FastLanguageModel类,用来加载和使用模型
    from unsloth import FastLanguageModel
    
    # 导入torch工具 ,用于处理模型的数学运算
    import torch
    
    
    # 设置模型处理文本的最大长度,相当于给模型设置一个最大容量
    max_seq_len = 2048
    
    # 设置数据类型,让模型自动选择最合适的精度
    dtype = None
    
    # 使用4位量化来节省内存,就像把大箱子压缩成小箱子
    load_in_4bit = True
    
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B", # 指定要加载的模型名称
        max_seq_length = max_seq_len,  # 使用上面定义的最大长度
        dtype = dtype,  # 使用前面设置的数据类型
        load_in_4bit = load_in_4bit,  # 使用4位量化
    )


关键字