基于LaMA-Factory微调llama3.1-8B

news2024/9/21 0:49:55

大模型的训练目前主要分为Pre-trainingPost-training,受限于资源算力等原因,实际工作中更多用到的是SFT

在这里插入图片描述

  • 对于普通用户来说SFT仍然具备较高的门槛,需要了解一定的理论基础,准备用于微调的数据,由于不同基座模型相应的微调方法也不一样,需要对超参数优化等其他问题
  • 目前可以通过完善的微调框架来简化上面的情况,常用框架如:
    • LaMA-Factory: https://github.com/hiyouga/LLaMA-Factory
    • swift: https://github.com/modelscope/swift
    • unsloth: https://github.com/unslothai/unsloth
    • mlx: https://github.com/ml-explore/mlx
    • SuperAdapters: https://github.com/cckuailong/SuperAdapters
    • Firefly: https://github.com/yangjianxin1/Firefly

在这里插入图片描述

  • 这里推荐使用LaMA-Factory
    • 支持多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Qwen2-VL、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。
    • 集成方法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。
    • 多种精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
    • 先进算法:GaLore、BAdam、Adam-mini、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ、PiSSA 和 Agent 微调。
    • 实用技巧:FlashAttention-2、Unsloth、Liger Kernel、RoPE scaling、NEFTune 和 rsLoRA。
    • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等等。
    • 极速推理:基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。

我们原来介绍过基于LaMA-Factory对Qwen和llama3模型的微调

  • 基于LLaMA-Factory微调Llama3
  • 如何使用LLaMA Factory 微调Qwen1.5

由于2024年6月后,LaMA-Factory进行了升级,相较于原来操作更加简单便捷。

本文介绍下目前新版对llama3.1的微调

基于LaMA-Factory对llama3.1 8B进行微调

1. 环境配置

  1. 查看当前硬件显卡驱动CUDA
nvidia-smi

官方推荐:

在这里插入图片描述
推荐使用

  • py3.10
  • cuda 12.2
  1. 创建虚拟环境及安装LLaMA-Factory
# 1. 创建虚拟环境
conda create -n llama-factory python=3.11
# 2. 激活虚拟环境
source activate
conda activate llama-factory

# 3 安装LLaMA-Factory
# 3.1 切换到工作路径
cd /home/work
# 3.2 下载LLaMA-Factory
git clone https://github.com/hiyouga/LLaMA-Factory.git
# 3.3 pip 安装依赖
pip install -e ".[torch,metrics]"
  1. 依赖校验 注意:可以通过下面的命令查看依赖的安装情况
# 查看当前环境信息
python -m torch.utils.collect_env
# 查看conda安装版本信息
conda list

# CUDA和Pytorch环境校验 在python下
import torch
torch.cuda.current_device()
torch.cuda.get_device_name(0)
torch.__version__

如果发现安装的cuda不是GPU版本,或者版本不匹配,可以直接去pytorch官网安装相应的pytorch

- 安装GPU版本torch
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
  1. 安装成功验证 在LLaMA-Factory路径下对库进行校验
llamafactory-cli version
llamafactory-cli train -h

如果出现下面输出则成功:在这里插入图片描述

安装成功后可以通过webui在网页操作进行微调评估等操作

llamafactory-cli webui
  1. run with demo
# 切换为你下载的模型文件目录, 这里的demo是Llama-3-8B-Instruct
# 如果是其他模型,比如qwen,chatglm,请使用其对应的官方demo
model_id = "/path/to/Meta-Llama-3-8B-Instruct"

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

prompt = pipeline.tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

2. 上传数据集

配置好环境后,需要准备用于微调的数据集。

需要在examples/train_lora/llama3_lora_sft.yaml文件中修改dataset, 如果不修改则使用默认数据集:

### dataset
dataset: identity,alpaca_en_demo

如果要用自己的数据集,则需要将数据上传到data路径下,并且在data中注册data/dataset_info.json进行注册,如

 {
  "your_data": {
    "file_name": "your_data.json"
  },

3. 微调

这里演示使用lora微调

1. 更改模型地址

# 修改sft ymal文件
vi examples/train_lora/llama3_lora_sft.yaml
# 使用llama3.1-8B模型文件
model_name_or_path: /path/to/Meta-Llama-3___1-8B-Instruct

# 模型微调后的结果文件存储路径
output_dir: saves/llama3-8b/lora/sft

2. Run SFT

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
# 或者指定卡
# CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_sft.yaml

3. 训练过程中内存占用情况

在这里插入图片描述
这里使用了两张A100-80G,实际1张A100也可以跑起来,

4. 评估预测

# 在 MMLU/CMMLU/C-Eval 上评估
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval examples/lora_single_gpu/llama3_lora_eval.yaml
# 批量预测并计算 BLEU 和 ROUGE 分数
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train examples/lora_single_gpu/llama3_lora_predict.yaml

4. Merge

模型微调后的结果需要与基座模型进行merge

# 1. 修改merge yaml文件,修改model path和微调文件path及最终merge导出文件地址
cd /home/LLaMA-Factory
vi examples/merge_lora/llama3_lora_sft.yaml

### Note: DO NOT use quantized model or quantization_bit when merging lora adapters
  
### model
model_name_or_path: /path/to/Meta-Llama-3___1-8B-Instruct
adapter_name_or_path: saves/llama3-8b/lora/sft
template: llama3
finetuning_type: lora

### export
export_dir: models/llama3_lora_sft
export_size: 2
export_device: cpu
export_legacy_format: false

# 2. run merge
llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

5.Infer

使用微调后的模型进行推理

llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

reference:

  • LlamaFactory: Unified Efficient Fine-Tuning of 100+ Language Models https://arxiv.org/abs/2403.13372

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

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

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

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xilinx通用RAM或者FIFO设计

1、在 Vivado 中&#xff0c;XPM&#xff08;Xilinx Parameterized Macros&#xff09;是 Xilinx 提供的一组预定义的、参数化的硬件描述语言 (HDL) 宏模块&#xff0c;用于简化设计流程和提高设计效率。XPM 模块通常用于实现常见的功能&#xff0c;比如存储器&#xff08;RAM/…

PWR电源控制(低功耗模式)

1 PWR简介 1 程序后面是空循环&#xff0c;即使不用也会耗电&#xff0c;所以有了低功耗&#xff08;例如遥控器&#xff09; 2 也要保留唤醒模式&#xff0c;如串口接收数据中断唤醒&#xff0c;外部中断唤醒&#xff0c;RTC闹钟唤醒&#xff0c;在需要工作是&#xff0c;ST…

docker装大米cms(damicms)各种cms可用相同办法

1.docker pull 拉取镜像文件 docker pull medicean/vulapps:base_lamp 2.使用docker运行 docker run -d -p 8080:80 medicean/vulapps:base_lamp 3将需要搭建的 CMS 项目源码放到 kali 中&#xff0c;这里以 damiCMS 为例 查看容器id docker ps 4进入dmCMS 所在目录&#…

基于Java+SpringBoot+Vue的新闻稿件管理系统

基于JavaSpringBootVue的新闻稿件管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

利用高德API获取整个城市的公交路线并可视化(四)

副标题&#xff1a;公共汽电车站点覆盖率——以厦门市公交线路为例 书接上回&#xff0c;我们有了公交的线路、站点数据&#xff0c;并同时对数据质量进行了校验&#xff0c;但是不同城市情况不同&#xff0c;需要看当地对公交交通数据的开放程度&#xff0c;部分城市建设的有…

Linux系统运行模式以及链接文件

一.Linux系统运行模式 如上图所示&#xff0c;可以使用runlevel这条命令去查看当前系统的运行模式。 如上图所示&#xff0c;可以使用这条命令使得机器以字符模式启动。 如上图所示&#xff0c;可以使用这条命令使得机器以图像化界面启动。 二.链接文件 链接文件类型&#xff…

Aigtek电压放大器的技术指标是什么

电压放大器是一种电路&#xff0c;用于将低电压信号放大为高电压信号。它在电子、通信、音频和视频等领域广泛应用。下面是电压放大器电路的一些特点。 放大倍数高&#xff1a;电压放大器的主要功能是将输入信号的幅度放大到所需的输出电压。因此&#xff0c;电压放大器的一个重…

(Postman)接口测试基础应用

目录 ​编辑 1.简介与分类 2.接口测试流程及用例设计 3. 实战接口介绍 4.postman的简介&#xff0c;安装&#xff0c;注册 5.get请求和响应页签详解 6. 问题​编辑 1.环境变量和全局变量&#xff1a;globals--全局变量 2.接口关联 1.简介与分类 1.接口测试是测试系统组…

重头开始嵌入式第三十四天(数据库二)

sqlite3的一些补充 目录 sqlite3的一些补充 1.事物 2.连接&#xff0c;联合 3.触发器 4.子查询 1.事物 数据库事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;它由一系列对数据库的操作组成。 一、事务的特性 1. 原子性&#xff08;Atomicity&#xff09…

移动端设计规范:提升用户体验的核心要素

随着移动互联网的普及&#xff0c;移动端设计已成为用户体验的关键一环。设计师不仅需要考虑视觉美感&#xff0c;还必须确保设计符合用户操作习惯&#xff0c;提高用户的操作效率。本文将探讨移动端设计的核心规范&#xff0c;帮助设计师打造出既美观又实用的应用界面。 一、…

uniapp动态页面API

目录 uni.setNavigationBarTitle动态设置标题 uni.showNavigationBarLoading为标题添加加载动画与uni.hideNavigationBarLoading停止加载动画 ​编辑 uni.setNavigationBarColor用于设置导航栏的颜色&#xff0c;包括背景颜色和文字颜色。这对于自定义应用的主题和风格非常有…

高质量的小间距LED显示屏有什么表现

随着企业对宣传和品牌形象提升的需求日益增长&#xff0c;LED显示屏凭借其立体化宣传和低成本优势&#xff0c;逐渐成为企业宣传的重要工具。近年来&#xff0c;小间距LED显示屏在市场上逐渐普及&#xff0c;生产厂家和产品种类也不断增加。面对如此众多的选择&#xff0c;许多…

合法的数字货币有哪些类型

合法数字货币的类型 一、常见的合法数字货币类型 比特币&#xff08;Bitcoin&#xff0c;BTC&#xff09;&#xff1a;作为世界上第一个数字货币&#xff0c;由中本聪在 2009 年创造。其特点包括去中心化、匿名性和安全性较高&#xff0c;市值较高。以太坊&#xff08;Ethereu…

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示&#xff1a;基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd6j2g 提取码: 6j2g 注&#xff1a;本项目为学习完…

WPS中JS宏使用说明(持续优化...)

前言 好久没发文章了&#xff0c;今天闲来无事发篇文章找找之前的码字感觉。 正文 最近在写教案&#xff0c;发现之前的技术又可以派上用场了。就是JS&#xff0c;全称JavaScript&#xff0c;这个语言太强大了&#xff0c;我发现WPS里的宏现在默认就是JS。功能选项如下图&…

Android 打开 GBK项目如何设置成UTF-8

1.标题 今天打开一个eclipse老项目&#xff0c;编码格式为GBK&#xff0c;Android studio导入项目报错&#xff0c;本人想到一个方案就是批量修改文件格式从 GBK到 UTF-8&#xff0c;这样可以一键解决问题 2.开发脚本 使用前请备份代码 使用前请备份代码 使用前请备份代码…

关于paddleocr文字识别内存泄漏的问题

最近在写一个小项目&#xff0c;需要使用paddleocr进行文字识别&#xff0c;然后发现存在严重的内存泄漏&#xff0c;运行时间越长&#xff0c;cpu和内存的占用率就越高。很容易导致程序的崩溃。 代码的主要逻辑如下&#xff1a; import os import numpy as np from paddleocr…

深入理解GAN网络

Generative Adversarial Networks创造性地提出了对抗训练来代替人工指定的loss。之前的文章初步理解了一下&#xff0c;感觉还是不到位&#xff0c;在这里再稍微深入一点。 交叉熵cross entropy 鉴别器是GAN中重要的一部分&#xff0c;鉴别器和生成器交替训练的过程就是adver…

秒开WebView? Android性能优化全攻略

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 秒开 WebView 是很多 Android 开发者追求的目标&#xff0c;尤其是在需要加载复杂网页内容或与 Web 进行频繁交互的应用中。然而&#xff0c;由于 WebView 的启动速度较慢且加载资源耗时较多&#xff0c;优化…

时间戳有什么重要作用

1 问题&#xff1a; 今天做前后端联调的时候&#xff0c;发现请求url路径后面跟了一段数据&#xff1a;“t1725537660463”&#xff0c;我蒙圈了&#xff0c;为什么是一段乱码 明明我的后端写了id这个参数&#xff0c;而且前端传给后端的参数只有这个7&#xff0c;那“ &#…