基于LLaMA-Factory微调Llama3

图片本文简要介绍下基于LLaMA-Factory的llama3 8B模型的微调过程

环境配置

# 1. 安装py3.10虚拟环境
conda create -n py3.10-torch2.2 python=3.10
source activate
conda activate py3.10-torch2.2# 2. 安装cuda12.2 gpu版torch2.2
conda install pytorch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia

模型文件下载

基于Modelscope

https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B/files# git
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B.git

基于Huggingface

https://huggingface.co/meta-llama/Meta-Llama-3-8B
# git
git clone https://huggingface.co/meta-llama/Meta-Llama-3-8B
  • 下载模型文件完成后本地运行,注意官方example运行使用的是original中的模型文件,即*.pth,而不是*.safetensors
# 官方demo
torchrun --nproc_per_node 1 example_text_completion.py --ckpt_dir Meta-Llama-3-8B/original/ --tokenizer_path Meta-Llama-3-8B/original/tokenizer.model --max_seq_len 512 --max_batch_size 6torchrun --nproc_per_node 1 example_chat_completion.py --ckpt_dir Meta-Llama-3-8B-Instruct/original/ --tokenizer_path Meta-Llama-3-8B-Instruct/original/tokenizer.model --max_seq_len 512 --max_batch_size 6
  • 也可使用transformers库运行本地大模型
# run_llama3_demo.py
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" 
model_dir = "/home/your_name/llama3/llama3/Meta-Llama-3-8B-Instruct"model = AutoModelForCausalLM.from_pretrained(model_dir,torch_dtype="auto",device_map="auto"
)# 加载与模型相匹配的分词器。分词器用于将文本转换成模型能够理解和处理的格式。
tokenizer = AutoTokenizer.from_pretrained(model_dir)
# 加载与模型相匹配的分词器。分词器用于将文本转换成模型能够理解和处理的格式
prompt = "你好,请介绍下你自己。"
messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}
]# 使用分词器的 apply_chat_template 方法将上面定义的消息列表转换为一个格式化的字符串,适合输入到模型中。
# tokenize=False 表示此时不进行令牌化,add_generation_prompt=True 添加生成提示。
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)# 将处理后的文本令牌化并转换为模型输入张量,然后将这些张量移至之前定义的设备(GPU)上。
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512
)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
  • 运行中占用存储约17G

图片

LLaMA-Factory下载

https://github.com/hiyouga/LLaMA-Factory

升级pip

升级到24.0版本

export PIP_REQUIRE_VIRTUALENV=false
python -m pip install --upgrade pip

安装依赖

cd LLaMA-Factory
pip install -e .[metrics]
# or
pip install -r requirements.txt --index-url https://mirrors.huaweicloud.com/repository/pypi/simple

基于LLaMA-Factory微调Llama3

图片

这里以微调中文为例:

Step 1. 查看微调中文数据集数据字典

cd /home/your_name/LLaMA-Factory/data
cat dataset_info.json 
  • 这里我们使用alpaca_zh, alpaca_data_zh_51k.json数据

Step 2. 使用中文数据

head alpaca_data_zh_51k.json

图片

Step 3. 创建微调脚本

创建微调脚本

  • 单卡微调template
# single_lora_llama3.sh#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export NCCL_P2P_DISABLE="1"
export NCCL_IB_DISABLE="1"# 添加 --quantization_bit 4 就是4bit量化的QLoRA微调,不添加此参数就是LoRA微调 \
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \   ## 单卡运行--stage sft \                                     ## --stage pt (预训练模式)  --stage sft(指令监督模式)    --stage rm(奖励模型)--do_train True \                                 ## 执行训练模型--model_name_or_path /your model path/Meta-Llama-3-8B-Instruct \     ## 模型的存储路径--dataset alpaca_zh \                             ## 训练数据的存储路径,存放在 LLaMA-Factory/data路径下--template llama3 \                               ## 选择llama factory支持的模版--lora_target q_proj,v_proj \                     ## 默认模块应作为--output_dir /save output model/single_lora_llama3_checkpoint \        ## 微调后的模型保存路径--overwrite_cache \                               ## 是否忽略并覆盖已存在的缓存数据--per_device_train_batch_size 2 \                 ## 用于训练的批处理大小。可根据 GPU 显存大小自行设置。--gradient_accumulation_steps 64 \                 ##  梯度累加次数--lr_scheduler_type cosine \                      ## 指定学习率调度器的类型--logging_steps 5 \                               ## 指定了每隔多少训练步骤记录一次日志。这包括损失、学习率以及其他重要的训练指标,有助于监控训练过程。--save_steps 100 \                                ## 每隔多少训练步骤保存一次模型。这是模型保存和检查点创建的频率,允许你在训练过程中定期保存模型的状态--learning_rate 5e-5 \                            ## 学习率--num_train_epochs 1.0 \                          ## 指定了训练过程将遍历整个数据集的次数。一个epoch表示模型已经看过一次所有的训练数据。--finetuning_type lora \                          ## 参数指定了微调的类型,lora代表使用LoRA(Low-Rank Adaptation)技术进行微调。--fp16 \                                          ## 开启半精度浮点数训练--lora_rank 4 \                                   ## 在使用LoRA微调时设置LoRA适应层的秩。

Step 4. 运行微调脚本,获取模型微调权重

# 对齐格式
sed -i 's/\r$//' ./single_lora_llama3.sh
# 修改文件权限
chmod +x ./single_lora_llama3.sh
# 运行微调脚本
./single_lora_llama3.sh
  • 开始微调

图片

  • 微调完成 耗时44分钟

图片

  • 微调完成后文件出现

图片

Step 5. 合并模型权重,获得微调模型

  • 合并模型权重脚本
  • Merge template
# llama3_merge_model.sh#!/bin/bash
python src/export_model.py \               ## 用于执行合并功能的Python代码文件--model_name_or_path /your_src_model/Meta-Llama-3-8B-Instruct \  ## 原始模型文件--adapter_name_or_path /your_lora_model/single_lora_llama3_checkpoint \                ## 微调模型权重文件--template llama3 \                        ## 模型模板名称--finetuning_type lora \                 ## 微调框架名称--export_dir  /output_model/llama3_lora \                          ## 合并后新模型文件位置--export_size 2 \--export_legacy_format false
  • 合并模型
sed -i 's/\r$//' ./llama3_merge_model.sh
chmod +x ./llama3_merge_model.sh
./llama3_merge_model.sh
  • 开始合并

图片

  • 合并完成

图片

图片

Step 6. 测试微调效果

# test_llama3_lora.pyllama3_lora = '/home/your_name/llama3/llama3_lora'
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model ontomodel = AutoModelForCausalLM.from_pretrained(llama3_lora,torch_dtype="auto",device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(llama3_lora)
prompt = "请介绍下你自己"
messages = [{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512
)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
  • 测试结果发现微调后的模型部分实现了预期,输出的结果为中文,但是出现了结果重复出现的问题

图片

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

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

在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468050.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习记录:js算法(九十):N皇后

文章目录 N 皇后思路一 N 皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇…

RTC精度及校准

RTC精度偏差: RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。 一、硬件方面: 1.使用高精度振荡器的RTC模块; …

Axure PR 9 多级下拉选择器 设计交互

​ 大家好,我是大明同学。 Axure选择器是一种在交互设计中常用的组件,这期内容,我们来探讨Axure中多级下拉选择器设计与交互技巧。 下拉列表选择输入框元件 创建选择输入框所需的元件 1.在元件库中拖出一个矩形元件。 2.选中矩形元件&…

【设计模式系列】享元模式(十五)

目录 一、什么是享元模式 二、享元模式的角色 三、享元模式的典型应用场景 四、享元模式在ThreadPoolExecutor中的应用 1. 享元对象(Flyweight)- 工作线程(Worker) 2. 享元工厂(Flyweight Factory)- …

LeetCode热题100之贪心算法

1.买卖股票的最佳时机 思路分析:即需要找出某一天的最低价格和它后面几天的最高价格差。 维护一个变量min_price,表示到目前为止遇到的最低股票价格;遍历prices数组,在每一天的价格上: 更新min_price为当前的价格和mi…

git 对已提交的说明进行编辑

如果提交代码的时候,对上次提交代码的说明不准确的话,例如 1、可以使用 git log 查看代码提交的记录; 2、使用 git commit --amend 命令对上次提交的说明进行编辑: 当显示上次提交的内容的时候,按下键盘 i 键即可编辑…

Hive简介 | 体系结构

Hive简介 Hive 是一个框架,可以通过编写sql的方式,自动的编译为MR任务的一个工具。 在这个世界上,会写SQL的人远远大于会写java代码的人,所以假如可以将MR通过sql实现,这个将是一个巨大的市场,FaceBook就这…

四期书生大模型实战营(【基础岛】- 第1关 | 书生·浦语大模型开源开放体系)

文章目录 1. 性能提升、推理能力领先1.1. 书生浦语开源时间线1.1.1. 时间节点1.1.2. InternLM性能天梯 1.2. 模型亮点1.2.1. 推理能力1.2.2. 长文本支持1.2.3. 复杂任务的自动规划与搜索 1.3. 核心技术思路 2. 支持多模态预训练与微调2.1. 开源模型谱系2.2. 核心优势 3. 书生浦…

python之正则表达式总结

正则表达式 对于正则表达式的学习,我整理了网上的一些资料,希望可以帮助到各位!!! 我们可以使用正则表达式来定义字符串的匹配模式,即如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与…

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)

目录 关于1 个体与集成2 Boosting3 Bagging与随机森林4 结合策略5 多样性X 案例代码X.1 分类任务-Adaboost-SVMX.1.1 源码X.1.2 数据集(鸢尾花数据集)X.1.3 模型效果 X.2 分类任务-随机森林RFX.2.1 源码X.2.2 数据集(鸢尾花数据集&#xff09…

融合虚拟与现实,AR Engine为用户提供沉浸式交互体验

当今的应用市场中,传统的应用产品已经难以完全满足消费者的多样化需求。为了在竞争激烈的市场中脱颖而出,企业需要深入洞察用户需求,提供个性化的服务体验和差异化的产品创新,以吸引并留住消费者。 比如,购物类App通过…

「QT」几何数据类 之 QPolygon 多边形类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

.NET 一款替代cmd.exe的交互式命令渗透工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

跨境访问难题?SD-WAN跨境加速专线加速电商社交媒体推广

在全球化日益加深的今天,跨境电商已成为企业拓展国际市场的重要途径。然而,跨境电商在社交媒体平台进行推广时,常常面临一系列网络访问难题,如公网速度慢、员工办事效率低下、IP被封禁以及公司运维对网络维护的繁琐等。这些问题不…

让redis一直开启服务/自动启动

文章目录 你的redis是怎么打开的黑窗不能关?必须要自动启动吗?再说说mysql 本文的所有指令都建议在管理员权限下打开cmd控制台 推荐的以管理员身份打开控制台的方式 Win R 打开运行 输入cmdShift Ctrl Enter 你的redis是怎么打开的 安装过redis的朋友都知道, redis的安…

Python 分子图分类,GNN Model for HIV Molecules Classification,HIV 分子图分类模型;整图分类问题,代码实战

一、分子图 分子图(molecular graph)是一种用来表示分子结构的图形方式,其中原子被表示为节点(vertices),化学键被表示为边(edges)。对于HIV(人类免疫缺陷病毒&#xff…

vue项目实战

1.项目文件夹添加(结构如下) 2.页面构建 安装路由 npm install react-router-dom 3.页面基本模板 router文件夹下index.js的模板 // 引入组件 import Login from "../views/login"; // 注册路由数组 const routes [{// 首页默认是/path: …

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日,由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能,探索制造业数字化转型之路。 在苏州站活动开场,达索系统专业客户事业部华东区渠道经理马腾飞…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步,但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术,它改进了目前…