今天终于来到大模型学习的实战课了(虽然前面跳了2天的课),今天我们会一起学习 Llama 模型的运行、部署、微调 ~
一、Llama 介绍
Llama 模型官网:官网
Llama 论文:论文
Llama 代码:代码
理念:The open-source AI models you can fine-tune, distill and deploy anywhere.
LLaMA 各版本的时间线如下:
-
LLaMA 1 (初版)
- 发布日期:2023年2月
- 特点:LLaMA 1 系列包含了多个不同规模的模型(7B、13B、30B、65B),强调高效训练和开源策略,目标是为研究人员提供一个灵活、高效的语言模型基础。
-
LLaMA 2
- 发布日期:2023年7月
- 特点:LLaMA 2 引入了更大的模型规模(7B、13B、70B)并在性能、推理任务和道德性、安全性上进行了优化。继续维持开源策略,并广泛应用于文本生成、翻译等任务。
-
LLaMA 3
- 发布日期:2024年7月23日:
- 尺寸:
Llama 3.1 8B:轻量级模型,适合资源有限的应用场景。
Llama 3.1 70B:中等规模模型,提供了更强的能力。
Llama 3.1 405B:这是当时最大规模的开源模型,拥有4050亿个参数,与GPT-4和Claude 3.5等闭源模型的竞争能力相当,并且在某些方面表现优异。
二、如何运行 Llama 3.1 8B
这里我们选择使用魔塔服务器环境进行我们的实验 。大家也可以去白嫖一下魔塔的免费实例。
魔塔首页:https://modelscope.cn
一、下载模型并测试
- 在模型库中搜索并找到 LLM-Research/Meta-Llama-3.1-8B-Instruct
模型地址:LLM-Research/Meta-Llama-3.1-8B-Instruct - 启动GPU环境实例,运行下图代码,下载并运行测试模型。
在运行微调命令的过程中,我发现我白嫖 24G 显存的 A10 带不动 Meta-Llama-3.1-8B-Instruct 这个模型的微调,所以我就换了一个小一点的 Llama 模型 (Llama-3.2-1B-Instruct)。 大家根据自己设备的能力而定。
二、使用 ms-swift 框架进行 Lora 微调
ms-swift 是魔搭社区提供的大模型与多模态大模型微调部署框架,现已支持450+大模型与150+多模态大模型的训练(预训练、微调、人类对齐)、推理、评测、量化与部署。
项目地址:https://github.com/modelscope/ms-swift/blob/main/README_CN.md
使用步骤:
(在 ms-swift 的文档里已经写明了详细的步骤,这是只是根据我的实际简要介绍一下。)
- 安装
pip install ms-swift -U
- 微调脚本,根据自己的需要进行修改
# 设置可见的GPU设备编号,这里只使用第0个GPU设备
CUDA_VISIBLE_DEVICES=0 \
# 指定使用的程序为swift,并且是sft(Supervised fine-tuning的缩写)
swift sft \
# 模型名称和路径,这里是Qwen/Qwen2.5-7B-Instruct模型 (换为自己机器上的实际路径)
--model Qwen/Qwen2.5-7B-Instruct \
# 训练类型,这里是LoRA,一种低秩适配方法,用于高效微调
--train_type lora \
# 数据集列表,每个数据集后面跟着的是样本数量限制(例如:500条)- 可以直接使用 魔塔 社区的数据集,不需要下载到本机
--dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \
'AI-ModelScope/alpaca-gpt4-data-en#500' \
'swift/self-cognition#500' \
# PyTorch张量的数据类型,这里使用bfloat16(脑浮点16位),有助于加速计算并减少内存占用
--torch_dtype bfloat16 \
# 训练的轮数(epochs),这里设置为1轮
--num_train_epochs 1 \
# 每个设备上的训练批量大小,设置为1
--per_device_train_batch_size 1 \
# 每个设备上的评估批量大小,也设置为1
--per_device_eval_batch_size 1 \
# 学习率,设置为1e-4
--learning_rate 1e-4 \
# LoRA的秩(rank),决定了额外参数的数量,设置为8
--lora_rank 8 \
# LoRA的alpha值,影响LoRA权重的缩放,设置为32
--lora_alpha 32 \
# 目标模块,这里设置为all-linear,表示对所有线性层应用LoRA
--target_modules all-linear \
# 梯度累积步数,设置为16,用于在更新模型参数前累积多个小批量梯度
--gradient_accumulation_steps 16 \
# 每多少步进行一次评估,设置为每50步
--eval_steps 50 \
# 每多少步保存一次模型检查点,同样设置为每50步
--save_steps 50 \
# 保留的最大检查点数量,设置为5个
--save_total_limit 5 \
# 每多少步记录一次日志,设置为每5步
--logging_steps 5 \
# 输入序列的最大长度,设置为2048个token
--max_length 2048 \
# 输出目录,用于保存模型、日志等文件
--output_dir output \
# 系统提示信息,定义了助手的行为模式
--system 'You are a helpful assistant.' \
# 学习率预热的比例,设置为0.05
--warmup_ratio 0.05 \
# 数据加载器的工作线程数,设置为4个
--dataloader_num_workers 4 \
# 模型作者的名字
--model_author swift \
# 模型的名称
--model_name swift-robot
- 在终端运行微调脚本,等待运行完成
- 合并模型
# merge 模型
CUDA_VISIBLE_DEVICES=0 swift export \
--ckpt_dir /mnt/workspace/.cache/modelscope/hub/LLM-Research/output/v4-20250105-205301/checkpoint-205 \
--merge_lora true
三、部署 merge 后模型测试
CUDA_VISIBLE_DEVICES=0 swift infer --ckpt_dir /mnt/workspace/.cache/modelscope/hub/LLM-Research/output/v4-20250105-205301/checkpoint-205-merged --infer_backend pt --max_model_len 4096 --gpu_memory_utilization 0.3
测试模型输出结果 ——
总结
本文中,我们简单介绍了一下 Llama 模型,并尝试使用 ms-swift 框架使用古文数据集进行了 lora 微调,下次,让我们一起学习如何对 fine-tune 完的模型进行量化 ~
最后,我是正在学 AI 的晚晴,期待和大家一起进步 ~