环境搭建

系统环境

需要Nvidia显卡,至少8G显存,且专用显存与共享显存之和大于20G

建议将非安装版的环境文件都放到非系统盘,方便重装或移植

以Windows11为例,非安装环境文件都放在 E 盘下

设置自定义Path文件夹

创建 E:\mypath 文件夹,将其添加进用户环境变量Path中,之后会用

CMake

下载 CMake 的 Windows x64 ZIP 对应文件:Download CMake

解压到E:\environment\cmake

E:\environment\cmake\bin添加到用户环境变量Path

C++编译

下载 Community 版 Visual StudioVisual Studio 2022 IDE

运行后选择桌面c++板块内容安装,若中途取消安装了,可以在开始菜单下栏的新增项目(或推荐项目)中找到该安装程序

这里只需要c++的编译环境,把除了C++板块以外的安装项目全部取消勾选(该板块自动勾选系统SDK等其他相关组件,不要取消勾选)

python环境

python安装

下载新版Anaconda安装程序:Download Anaconda

安装过程中将添加到环境变量等选项全部打勾

用uv管理pip包

将uv所有文件装至 E:\uv

符合国内环境,设置环境变量和更新源,安装到脚本常用硬盘,方便项目共用包可以硬链接节省硬盘空间

设置环境变量

PowerShell指令

[Environment]::SetEnvironmentVariable("UV_INDEX_URL","https://mirrors.huaweicloud.com/repository/pypi/simple","User")
[Environment]::SetEnvironmentVariable("UV_CACHE_DIR","E:\uv\cache","User")
[Environment]::SetEnvironmentVariable("UV_TOOL_DIR","E:\uv\tools","User")
[Environment]::SetEnvironmentVariable("UV_TOOL_BIN_DIR","E:\uv\toolsbin","User")
[Environment]::SetEnvironmentVariable("UV_PYTHON_INSTALL_DIR","E:\uv\python","User")
[Environment]::SetEnvironmentVariable("UV_PYTHON_INSTALL_MIRROR","https://ghproxy.cn/https://github.com/indygreg/python-build-standalone/releases/download","User")
[Environment]::SetEnvironmentVariable("Path","%UV_TOOL_BIN_DIR%;"+[Environment]::GetEnvironmentVariable("Path"),"User")

改变安装路径并安装

PowerShell指令

$env:UV_INSTALL_DIR = "E:\uv\bin"
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

[!tip] 如果提示在此系统上禁止运行脚本

以管理员身份打开 PowerShell,输入

Set-ExecutionPolicy Remotesigned

回到前面的 PowerShell 终端继续操作

[!tip] 下载速度慢或连不上

可能需要代理连接

自主更新

uv self update

添加 python 3.11 独立文件

uv python install 3.11
uv python list # 查看是否安装成功

Git环境

安装Git:Git - 安装 Git (git-scm.com)

Nvidia CUDA 工具包

安装12.1版:CUDA Toolkit 12.1 Update 1 Downloads | NVIDIA Developer

注意运行安装程序后在安装选单界面只安装CUDA驱动和工具包,不选其他显卡驱动和Nsignt

安装完后重启电脑

输入指令查看信息

nvidia-smi # 看当前驱动最大可支持的CUDA版本
nvcc -V # 看当前安装的CUDA运行时版本

部署训练框架

创建unsloth_env文件夹,并在里面操作

uv venv -p 3.11
uv pip install .\torch-2.4.0+cu121-cp311-cp311-win_amd64.whl
uv pip install .\torchvision-0.19.0+cu121-cp311-cp311-win_amd64.whl .\torchaudio-2.4.0+cu121-cp311-cp311-win_amd64.whl
uv pip install .\flash_attn-2.6.3+cu123torch2.4.0cxx11abiFALSE-cp311-cp311-win_amd64.whl
uv pip install --no-cache-dir "unsloth[huggingface] @ git+https://github.com/unslothai/unsloth.git"
uv pip install "bitsandbytes>=0.43.3" packaging ninja
uv pip install --no-deps "xformers==0.0.27.post2"
uv pip install .\triton-3.1.0-cp311-cp311-win_amd64.whl # 官方没有win版,win版下载:https://github.com/woct0rdho/triton-windows
"triton\runtime\jit.py" 修改第717行,加入try,except self.src = None
uv pip install setuptools
uv pip uninstall transformers
uv pip install --upgrade --no-cache-dir "git+https://github.com/huggingface/transformers.git"
uv pip uninstall numpy # 不支持numpy2
uv pip install numpy==1.24.0
git clone --recursive https://github.com/ggerganov/llama.cpp

下载 llama.cpp 的可执行程序包 https://github.com/ggerganov/llama.cpp/releases 解压覆盖至 llama.cpp 目录下

unsloth更新:

uv pip install --upgrade --no-cache-dir --no-deps unsloth unsloth_zoo

".venv\Lib\site-packages\unsloth\save.py" 1028行左右修改:

from platform import system as platform_system
if platform_system() == "Windows":
quantize_location = get_executable(["llama-quantize.exe", "quantize.exe"])
else:
quantize_location = get_executable(["llama-quantize", "quantize"])

".venv\Lib\site-packages\unsloth\save.py" 1072行左右添加:

elif os.path.exists("llama.cpp/quantize.exe"):
quantize_location = "llama.cpp/quantize.exe"
elif os.path.exists("llama.cpp/llama-quantize.exe"):
quantize_location = "llama.cpp/llama-quantize.exe"

微调训练代码

from unsloth import FastLanguageModel
# from unsloth import is_bfloat16_supported
import torch
from trl import SFTTrainer
from transformers import TrainingArguments
from datasets import load_dataset
from unsloth import to_sharegpt
from unsloth import standardize_sharegpt
model_name = r"E:\AI\models\Qwen2.5-7B-Instruct"
max_seq_length = 1024 # Supports RoPE Scaling interally, so choose any!
load_in_4bit = True # 在 4 位量化中进行微调
dtype = torch.float16 # 保留此值为 None,但可以选择 torch.float16 或 torch.bfloat16,适用于较新的 GPU
r = 8 # 调整微调过程的等级。数字越大,使用的内存越多,速度越慢,但可以在更困难的任务上提高准确性。我们通常建议使用 8(适用于快速微调)到 128 之间的数字。数字过大可能导致过拟合,损害模型质量。同步 LoRA 系数。
max_steps = 60 # num_train_epochs = 1
num_train_epochs = 3 # 训练轮数
learning_rate = 5e-5 # 学习率
datasetpath = r".\alpaca_dataset.json" # Get Alpaca dataset
output_dir = "outputs"
gguf_dir = "ggufs" model, tokenizer = FastLanguageModel.from_pretrained(
model_name = model_name,
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
) # Load Alpaca dataset
dataset = load_dataset("json", data_files = {"train" : datasetpath}, split = "train")
dataset = to_sharegpt(
dataset,
merged_prompt = "[[{system}\n]]{instruction}[[\n{input}]]",
output_column_name = "output",
)
dataset = standardize_sharegpt(dataset) # Do model patching and add fast LoRA weights
model = FastLanguageModel.get_peft_model(
model,
r = r,
target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",],
lora_alpha = r,
lora_dropout = 0, # Supports any, but = 0 is optimized
bias = "none", # Supports any, but = "none" is optimized
# [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!
use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context
random_state = 3407,
max_seq_length = max_seq_length,
use_rslora = False, # We support rank stabilized LoRA
loftq_config = None, # And LoftQ
) trainer = SFTTrainer(
model = model,
train_dataset = dataset,
dataset_text_field = None,
max_seq_length = max_seq_length,
tokenizer = tokenizer,
args = TrainingArguments(
per_device_train_batch_size = 2,
gradient_accumulation_steps = 4,
warmup_steps = 10,
max_steps = max_steps,
num_train_epochs = num_train_epochs,
learning_rate = learning_rate,
fp16 = True,
bf16 = False,
logging_steps = 1,
output_dir = output_dir,
optim = "adamw_8bit",
seed = 3407,
save_strategy = "steps",
save_steps = 50,
),
)
trainer.train()
# trainer.train(resume_from_checkpoint = True) # start from the latest checkpoint and continue training. # Save the model
model.save_pretrained_gguf(gguf_dir, tokenizer, quantization_method = "q4_k_m")

手动量化

若前步报错无法完成量化,则执行以下命令进行量化

E:\AI\llama.cpp 目录下

.\llama.cpp\llama-quantize.exe "ggufs\unsloth.F16.gguf" "ggufs\unsloth.Q4_K_M.gguf" q4_k_m

Unsloth更快训练大模型并导出GGUF - Windows的更多相关文章

  1. 图神经网络之预训练大模型结合:ERNIESage在链接预测任务应用

    1.ERNIESage运行实例介绍(1.8x版本) 本项目原链接:https://aistudio.baidu.com/aistudio/projectdetail/5097085?contribut ...

  2. Optimum + ONNX Runtime: 更容易、更快地训练你的 Hugging Face 模型

    介绍 基于语言.视觉和语音的 Transformer 模型越来越大,以支持终端用户复杂的多模态用例.增加模型大小直接影响训练这些模型所需的资源,并随着模型大小的增加而扩展它们.Hugging Face ...

  3. MindSpore模型精度调优实战:如何更快定位精度问题

    摘要:为大家梳理了针对常见精度问题的调试调优指南,将以"MindSpore模型精度调优实战"系列文章的形式分享出来,帮助大家轻松定位精度问题,快速优化模型精度. 本文分享自华为云社 ...

  4. DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

    DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍 1. 概述 近日来,ChatGPT及类似模型引发了人工智能(AI)领域的一场风潮. 这场风潮对数字世 ...

  5. mysql删除大表更快的drop table办法

    mysql删除大表更快的drop table办法 参考资料:https://blog.csdn.net/anzhen0429/article/details/76284320 利用硬链接和trunca ...

  6. DeepFaceLab小白入门(5):训练换脸模型!

    训练模型,是换脸过程中最重要的一部分,也是耗时最长的一部分.很多人会问到底需要多少时间?有人会告诉你看loss值到0.02以下就可以了.我会告诉你,不要看什么数值,看预览窗口的人脸.看第二列是否和第一 ...

  7. TensorRT 3:更快的TensorFlow推理和Volta支持

    TensorRT 3:更快的TensorFlow推理和Volta支持 TensorRT 3: Faster TensorFlow Inference and Volta Support 英伟达Tens ...

  8. 比XGBOOST更快--LightGBM介绍

    xgboost的出现,让数据民工们告别了传统的机器学习算法们:RF.GBM.SVM.LASSO.........现在,微软推出了一个新的boosting框架,想要挑战xgboost的江湖地位.笔者尝试 ...

  9. SOLOv 2:实例分割(动态、更快、更强)

    SOLOv 2:实例分割(动态.更快.更强) SOLOv2:  Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...

  10. 利用共享内存实现比NCCL更快的集合通信

    作者:曹彬 | 旷视 MegEngine 架构师 简介 从 2080Ti 这一代显卡开始,所有的民用游戏卡都取消了 P2P copy,导致训练速度显著的变慢.针对这种情况下的单机多卡训练,MegEng ...

随机推荐

  1. 使用Maven客户端从Maven中心仓库下载到本地的jar包的默认存储位置及远程仓库

    从Maven中心仓库下载到本地的jar包的默认存放在"${user.home}/.m2/repository"中,${user.home}表示当前登录系统的用户目录(如" ...

  2. python-nmap实现python利用nmap扫描分析

    目录 前言 python-nmap的基本使用 PortScanner扫描 PortScannerAsync异步扫描 python-nmap的源码分析 前言 Nmap是一个非常用的网络/端口扫描工具,如 ...

  3. wix tool 打包官方例子

    wixtoolset 和VS 插件:https://wixtoolset.org/releases/ 教学:https://www.firegiant.com/wix/tutorial/getting ...

  4. .NET 数据拷贝方案选择

    应用中我们经常使用到数据的复制,在.NET中有多种方式可以实现复制数据或对象.选择哪种方式通.是浅拷贝还是深拷贝,取决于对象的复杂性.数据量以及具体需求场景. 1. MemberwiseClone拷贝 ...

  5. dicom 在生成dcm文件的时候会出现乱码的处理方法

    using Dicom.IO; using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  6. DICOM-SCP,可以直接使用的SCP(.net framework 4.5)控制台接收端

    此程序引用的是Dicom.Core 4.0.8.0,也是最后一版支持部署在.net framework 4.5 或以下环境的.如需要部署在.net4.6.1以上的需要查看另一个文档. 1 using ...

  7. Kotlin:【Map集合】集合创建、集合遍历、元素增加

    to本身是一个函数

  8. Linux/Centos文件授权用户文件夹权限介绍

    一.Linux文件权限介绍 在Linux中,一切皆为文件(目录也是文件),每个文件对用户具有可读(read).可写(write).可执行(excute)权限.目录的执行操作表示是否有权限进入该目录并操 ...

  9. 『Python底层原理』--CPython如何编译代码

    前一篇我们介绍了CPython VM的运行机制,它基于一系列字节码指令来实现程序逻辑. 不过,Python字节码在完整描述代码功能上存在局限性,于是代码对象应运而生.像模块.函数这类代码块的执行,本质 ...

  10. 并发编程 - 线程同步(三)之原子操作Interlocked简介

    上一章我们了解了3种处理多线程中共享资源安全的方法,今天我们将更近一步,学习一种针对简单线程同步场景的解决方案--Interlocked. 在此之前我们先学习一个概念--原子操作. 01.原子操作 原 ...