一、安装Pytorch

  1. 检查GPU计算能力

在开始微调之前,首先需要确认GPU的计算能力,因为不同架构的GPU对PyTorch版本有不同要求。计算能力是NVIDIA GPU的一个重要指标,它决定了GPU支持的CUDA功能和性能特性。

nvidia-smi --query-gpu=compute_cap --format=csv
import torch
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
print(f"GPU device: {torch.cuda.get_device_name()}")
print(f"GPU capability: {torch.cuda.get_device_capability()}")

第一行命令直接查询GPU的计算能力版本,而Python代码则通过PyTorch库来检测CUDA的可用性、版本信息以及具体的GPU设备能力。这些信息对于后续选择合适版本的PyTorch至关重要。

  1. 匹配PyTorch版本

根据GPU计算能力选择合适的PyTorch版本是非常重要的,因为不匹配的版本可能导致性能下降甚至无法正常运行。不同的GPU架构有着不同的计算能力要求,下面根据GPU计算能力选择合适的PyTorch版本:

计算能力 < 7.0 (如 Maxwell架构):使用较老版本

计算能力 7.x (Volta/Turing):PyTorch 1.8+

计算能力 8.x (Ampere):PyTorch 1.10+

计算能力 9.x (Ada Lovelace):PyTorch 2.0+

这个匹配关系基于NVIDIA官方对不同架构GPU的CUDA支持情况。较新的GPU架构需要更新版本的PyTorch来充分发挥其性能优势,而老架构的GPU如果使用过新的PyTorch版本可能会出现兼容性问题。

  1. 重新安装合适版本的PyTorch

如果当前安装的PyTorch版本与GPU计算能力不匹配,需要重新安装合适版本。这个过程包括卸载现有版本和安装新版本两个步骤:

# 卸载当前版本
pip uninstall torch torchvision torchaudio
# 从官方选择合适版本:https://pytorch.org/get-started/locally/
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

在重新安装时,建议访问PyTorch官方网站获取最新的安装命令,确保安装的版本与CUDA版本完全匹配。正确的版本匹配可以保证深度学习训练过程的稳定性和性能表现。

二、安装LLaMAFactory

  1. LLaMA-Factory

LLaMA-Factory是一个专门用于微调大语言模型的工具包,它提供了丰富的微调选项和便捷的操作接口。安装过程相对简单:

git clone -b v0.8.1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]

这里使用-b v0.8.1指定了版本号,确保使用稳定的发布版本。pip install -e .命令以可编辑模式安装,方便后续的开发和调试。[torch,metrics]表示同时安装PyTorch和相关评估指标依赖。

  1. unsloth的显存优化机制

为了在资源受限的环境中运行大模型,LLaMA-Factory集成了unsloth优化技术,这可以显著降低训练过程中的显存占用,如果要降低显存占用,建议按照以下步骤操作:

安装liger_kernel 0.5.2版本
在配置中同时启用enable_liger_kernel和use_unsloth_gc选项
无需单独安装unsloth包

unsloth通过优化内存管理和计算图来减少显存使用,特别适合在消费级GPU上进行大模型微调。liger_kernel是其中的核心组件,提供了底层的内存优化功能。

三、下载模型

模型下载是微调过程中的关键步骤,需要确保下载正确的模型文件和权重:

模型安装目录:/data/models/Qwen/Qwen2.5-7B-Instruct
可以使用 git lfs 下载:
# 安装并初始化 git-lfs
apt install git-lfs -y
git lfs install
# 下载模型
git lfs clone https://www.modelscope.cn/qwen/Qwen2.5-7B-Instruct.git

由于大语言模型文件体积很大,必须使用Git LFS(Large File Storage)来管理。Qwen2.5-7B-Instruct是一个70亿参数的中英双语指令调优模型,适合进行进一步的领域适配微调。如果机器的GPU配置不够强,可以下载参数低一些的版本。

四、数据集

  1. 内置数据集

LLaMA-Factory提供了内置的数据集支持,简化了数据准备过程:

1.1 准备数据集文件,json 格式,存放到 data 目录下。

1.2 注册数据集,将 json 文件注册到 data 目录下的 dataset_info.json 文件。

1.3 LLaMA-Factory 内置了一些数据集,本次就使用内置的 identity 数据集,用于修改模型的自我意识。

1.4 把 identity.json 里面占位符替换成自己的内容。

sed -i 's/{{name}}/XX智能助手/g; s/{{author}}/XX科技/g' data/identity.json

identity数据集主要用于修改模型的身份认知,通过替换占位符可以自定义助手的名称和所属机构。使用sed命令进行批量替换是一种高效的方式。

  1. 数据集注册

数据集注册是将自定义数据集纳入LLaMA-Factory管理的重要步骤:

2.1 identity 是内置数据集,已经注册好了,可以跳过这步。

2.2 将数据集移动到 data 目录下

2.3 修改 dataset_info.json 注册数据集,dataset_info.json 就是所有数据集的一个集合

对于非内置数据集,需要在dataset_info.json文件中添加数据集的元信息,包括文件路径、格式说明等,这样训练时才能正确加载和使用数据集。

五、微调

  1. 基本

基本微调配置提供了最基础的训练参数设置:

llamafactory-cli train \
--model_name_or_path /data/models/Qwen/Qwen2.5-7B-Instruct \
--stage sft \
--do_train True \
--finetuning_type lora \
--template qwen \
--dataset identity \
--output_dir ./saves/lora/sft \
--learning_rate 0.0005 \
--num_train_epochs 8 \
--cutoff_len 4096 \
--logging_steps 1 \
--warmup_ratio 0.1 \
--weight_decay 0.1 \
--save_total_limit 1 \
--save_steps 256 \
--seed 42 \
--data_seed 42 \
--lr_scheduler_type cosine \
--overwrite_cache \
--preprocessing_num_workers 16 \
--plot_loss \
--overwrite_output_dir \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 2 \
--fp16

这个配置使用了LoRA(Low-Rank Adaptation)微调方法,这是一种参数高效的微调技术,只训练少量的额外参数而不是整个模型。学习率调度器使用cosine衰减,训练过程中会记录损失曲线以便监控训练效果。

  1. 使用 unsloth

当启用unsloth优化时,可以进一步调整参数以获得更好的显存效率:

llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path /data/models/Qwen/Qwen2.5-7B-Instruct \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--template qwen \
--flash_attn auto \
--dataset identity \
--cutoff_len 2048 \
--learning_rate 5e-05 \
--num_train_epochs 3.0 \
--max_samples 100000 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 10 \
--warmup_steps 0 \
--packing False \
--enable_thinking True \
--report_to none \
--output_dir ./saves/lora/sft \
--bf16 True \
--plot_loss True \
--trust_remote_code True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--optim adamw_torch \
--quantization_bit 4 \
--quantization_method bnb \
--double_quantization True \
--lora_rank 16 \
--lora_alpha 32 \
--lora_dropout 0 \
--lora_target all \
--enable_liger_kernel True \
--use_unsloth_gc True

这个配置增加了4位量化、梯度累积等优化技术,显著降低了显存需求。lora_rank和lora_alpha参数控制了LoRA适配器的容量和缩放因子,影响微调的效果和稳定性。

  1. 查看 LoRA 权重

训练完成后,可以检查生成的LoRA权重文件:

ll -lhS ./saves/lora/sft

这个命令会列出LoRA权重文件的详细信息,包括文件大小和修改时间。LoRA权重通常比完整模型小很多,这使得存储和分发变得更加便捷。

  1. 预测评估

使用微调后的模型进行预测评估是验证训练效果的重要环节:

llamafactory-cli train \
--stage sft \
--do_predict \
--finetuning_type lora \
--model_name_or_path /data/models/Qwen/Qwen2.5-7B-Instruct \
--adapter_name_or_path ./saves/lora/sft \
--template qwen \
--dataset identity \
--cutoff_len 4096 \
--max_samples 20 \
--overwrite_cache \
--overwrite_output_dir \
--per_device_eval_batch_size 1 \
--preprocessing_num_workers 16 \
--predict_with_generate

预测评估会在测试集上运行模型并生成回复,通过观察生成结果可以直观了解模型微调后的表现变化。

  1. 权重合并导出

为了部署微调后的模型,需要将LoRA权重与基础模型合并:

llamafactory-cli export \
--model_name_or_path /data/models/Qwen/Qwen2.5-7B-Instruct \
--adapter_name_or_path ./saves/lora/sft/ \
--template qwen \
--finetuning_type lora \
--export_dir ./saves/lora/export/ \
--export_size 2 \
--export_device cpu \
--export_legacy_format False

权重合并会创建一个独立的模型文件,包含了基础模型和微调适配器的所有参数,这样可以脱离LLaMA-Factory环境直接使用标准推理引擎加载模型。

六、测试

  1. 原始模型

在微调前后对比测试原始模型的表现:

# 这里使用单卡
python -m vllm.entrypoints.openai.api_server \
--model /data/models/Qwen/Qwen2.5-7B-Instruct \
--served-model-name qwen \
--trust-remote-code
# 请求
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"}
]
}'

使用vLLM推理引擎部署模型并提供OpenAI兼容的API接口,这样可以方便地进行测试和集成。原始模型的回答反映了其默认的身份认知。

  1. 微调模型

测试微调后模型的表现变化:

# 单卡
python -m vllm.entrypoints.openai.api_server \
--model /opt/fine-tune/LLaMA-Factory/saves/lora/export/ \
--served-model-name qwen \
--trust-remote-code
# 请求
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是谁?"}
]
}'

通过与原始模型的对比,可以清晰看到微调对模型身份认知的改变效果,验证微调是否达到了预期目标。

  1. 多轮对话测试(Chat 模式)

除了API测试,还可以使用交互式对话模式进行更全面的测试:

llamafactory-cli chat --model_name_or_path path_to_export_model

这种交互式测试方式可以模拟真实的使用场景,检查模型在多轮对话中的表现一致性、上下文理解能力和回复质量。

七、转换导入Ollama

  1. 下载 llama.cpp

为了在更多设备上部署模型,需要转换为GGUF格式:

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
pip install -r requirements.txt

llama.cpp是一个高效的C++推理框架,支持在各种硬件上运行大语言模型,特别适合资源受限的环境。

  1. 转换

将合并后的模型转换为GGUF格式:

# 查看参数
python convert_hf_to_gguf.py -h
# 开始转换
python convert_hf_to_gguf.py /opt/fine-tune/LLaMA-Factory/saves/lora/export --outfile /opt/fine-tune/LLaMA-Factory/saves/lora/xxx.gguf --outtype f16 --model-name xxx

GGUF是llama.cpp使用的模型格式,具有更好的跨平台兼容性和推理效率。f16精度在保持模型质量的同时减少了存储空间需求。

  1. 导入

将转换后的模型导入Ollama进行管理:

首先建立一个 Modelfile 文件,文件内容:

FROM /opt/fine-tune/LLaMA-Factory/saves/lora/xxx.gguf
TEMPLATE """<|im_start|>system
{{ .System }}<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""

Modelfile定义了模型的加载配置和对话模板,确保模型按照正确的格式处理输入和生成输出。Qwen模型使用特殊的标记格式来区分不同角色。

导入模型

ollama create sunmao -f Modelfile
ollama list
ollama show sunmao:latest

成功导入后,模型就可以通过Ollama进行管理和使用了。Ollama提供了便捷的模型管理、版本控制和API服务,大大简化了模型的部署和使用流程。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐