LLaMA Efficient Tuning

文章目录

    • LLaMA Efficient Tuning
      • 安装
    • 数据准备
    • 浏览器一体化界面
    • 单 GPU 训练 train_bash
      • 1、预训练 pt
      • 2、指令监督微调 sft
      • 3、奖励模型训练 rm
      • 4、PPO 训练 ppo
      • 5、DPO 训练 dpo
    • 多 GPU 分布式训练
      • 1、使用 Huggingface Accelerate
      • 2、使用 DeepSpeed
    • 导出微调后的模型 export_model.py
    • API 服务 api_demo.py
    • 命令行测试 cli_demo.py
    • 浏览器测试 web_demo.py
    • 指标评估(BLEU 分数和汉语 ROUGE 分数)
    • 模型预测


LLaMA Efficient Tuning

https://github.com/rancheng/LLaMA-Efficient-Tuning/blob/main/README_zh.md


支持模型:
LLaMA、LLaMA-2、BLOOM、BLOOMZ、Falcon、Baichuan、Baichuan2、InternLM、Qwen、XVERSE、ChatGLM2


  • 默认模块--lora_target 参数的部分可选项。请使用 python src/train_bash.py -h 查看全部可选项。
  • 对于所有“基座”(Base)模型,--template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Chat)模型请务必使用对应的模板。

安装

软件依赖

  • Python 3.8+ 和 PyTorch 1.13.1+
  • 🤗Transformers, Datasets, Accelerate, PEFT 和 TRL
  • sentencepiece 和 tiktoken
  • jieba, rouge-chinese 和 nltk (用于评估)
  • gradio 和 matplotlib (用于网页端交互)
  • uvicorn, fastapi 和 sse-starlette (用于 API)
  • 以及 强而有力的 GPU

git clone https://github.com/hiyouga/LLaMA-Efficient-Tuning.git
conda create -n llama_etuning python=3.10
conda activate llama_etuning
cd LLaMA-Efficient-Tuning
pip install -r requirements.txt

如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库, 支持 CUDA 11.1 到 12.1.

pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.39.1-py3-none-win_amd64.whl

数据准备

关于数据集文件的格式,请参考 data/example_dataset 文件夹的内容。
https://github.com/rancheng/LLaMA-Efficient-Tuning/tree/main/data/example_dataset

构建自定义数据集时,既可以使用单个 .json 文件,也可以使用一个数据加载脚本和多个文件。

注意:使用自定义数据集时,请更新 data/dataset_info.json 文件,该文件的格式请参考 data/README.md
https://github.com/rancheng/LLaMA-Efficient-Tuning/blob/main/data/dataset_info.json
https://github.com/rancheng/LLaMA-Efficient-Tuning/blob/main/data/README.md


浏览器一体化界面

CUDA_VISIBLE_DEVICES=0 python src/train_web.py

我们极力推荐新手使用浏览器一体化界面,因为它还可以自动生成运行所需的命令行脚本。

目前网页 UI 仅支持单卡训练。


单 GPU 训练 train_bash


1、预训练 pt

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage pt \--model_name_or_path path_to_llama_model \--do_train \--dataset wiki_demo \--template default \--finetuning_type lora \--lora_target q_proj,v_proj \--output_dir path_to_pt_checkpoint \--overwrite_cache \--per_device_train_batch_size 4 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 5e-5 \--num_train_epochs 3.0 \--plot_loss \--fp16

2、指令监督微调 sft

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage sft \--model_name_or_path path_to_llama_model \--do_train \--dataset alpaca_gpt4_zh \--template default \--finetuning_type lora \--lora_target q_proj,v_proj \--output_dir path_to_sft_checkpoint \--overwrite_cache \--per_device_train_batch_size 4 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 5e-5 \--num_train_epochs 3.0 \--plot_loss \--fp16

3、奖励模型训练 rm

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage rm \--model_name_or_path path_to_llama_model \--do_train \--dataset comparison_gpt4_zh \--template default \--finetuning_type lora \--lora_target q_proj,v_proj \--resume_lora_training False \--checkpoint_dir path_to_sft_checkpoint \--output_dir path_to_rm_checkpoint \--per_device_train_batch_size 2 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 1e-6 \--num_train_epochs 1.0 \--plot_loss \--fp16

4、PPO 训练 ppo

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage ppo \--model_name_or_path path_to_llama_model \--do_train \--dataset alpaca_gpt4_zh \--template default \--finetuning_type lora \--lora_target q_proj,v_proj \--resume_lora_training False \--checkpoint_dir path_to_sft_checkpoint \--reward_model path_to_rm_checkpoint \--output_dir path_to_ppo_checkpoint \--per_device_train_batch_size 2 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 1e-5 \--num_train_epochs 1.0 \--plot_loss

5、DPO 训练 dpo

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage dpo \--model_name_or_path path_to_llama_model \--do_train \--dataset comparison_gpt4_zh \--template default \--finetuning_type lora \--lora_target q_proj,v_proj \--resume_lora_training False \--checkpoint_dir path_to_sft_checkpoint \--output_dir path_to_dpo_checkpoint \--per_device_train_batch_size 2 \--gradient_accumulation_steps 4 \--lr_scheduler_type cosine \--logging_steps 10 \--save_steps 1000 \--learning_rate 1e-5 \--num_train_epochs 1.0 \--plot_loss \--fp16

多 GPU 分布式训练


1、使用 Huggingface Accelerate

accelerate config # 首先配置分布式环境
accelerate launch src/train_bash.py # 参数同上

使用 DeepSpeed ZeRO-2 进行全参数微调的 Accelerate 配置示例

compute_environment: LOCAL_MACHINE
deepspeed_config:gradient_accumulation_steps: 4gradient_clipping: 0.5offload_optimizer_device: noneoffload_param_device: nonezero3_init_flag: falsezero_stage: 2
distributed_type: DEEPSPEED
downcast_bf16: 'no'
machine_rank: 0
main_training_function: main
mixed_precision: fp16
num_machines: 1
num_processes: 4
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false

2、使用 DeepSpeed

deepspeed --num_gpus 8 --master_port=9901 src/train_bash.py \--deepspeed ds_config.json \... # 参数同上

使用 DeepSpeed ZeRO-2 进行全参数微调的 DeepSpeed 配置示例

{"train_micro_batch_size_per_gpu": "auto","gradient_accumulation_steps": "auto","gradient_clipping": "auto","zero_allow_untested_optimizer": true,"fp16": {"enabled": "auto","loss_scale": 0,"initial_scale_power": 16,"loss_scale_window": 1000,"hysteresis": 2,"min_loss_scale": 1},  "zero_optimization": {"stage": 2,"allgather_partitions": true,"allgather_bucket_size": 5e8,"reduce_scatter": true,"reduce_bucket_size": 5e8,"overlap_comm": false,"contiguous_gradients": true}
}

导出微调后的模型 export_model.py

python src/export_model.py \--model_name_or_path path_to_llama_model \--template default \--finetuning_type lora \--checkpoint_dir path_to_checkpoint \--output_dir path_to_export

API 服务 api_demo.py

python src/api_demo.py \--model_name_or_path path_to_llama_model \--template default \--finetuning_type lora \--checkpoint_dir path_to_checkpoint

关于 API 文档请见 http://localhost:8000/docs


命令行测试 cli_demo.py

python src/cli_demo.py \--model_name_or_path path_to_llama_model \--template default \--finetuning_type lora \--checkpoint_dir path_to_checkpoint

浏览器测试 web_demo.py

python src/web_demo.py \--model_name_or_path path_to_llama_model \--template default \--finetuning_type lora \--checkpoint_dir path_to_checkpoint

指标评估(BLEU 分数和汉语 ROUGE 分数)

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage sft \--model_name_or_path path_to_llama_model \--do_eval \--dataset alpaca_gpt4_zh \--template default \--finetuning_type lora \--checkpoint_dir path_to_checkpoint \--output_dir path_to_eval_result \--per_device_eval_batch_size 8 \--max_samples 100 \--predict_with_generate

我们建议在量化模型的评估中使用 --per_device_eval_batch_size=1--max_target_length 128


模型预测

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \--stage sft \--model_name_or_path path_to_llama_model \--do_predict \--dataset alpaca_gpt4_zh \--template default \--finetuning_type lora \--checkpoint_dir path_to_checkpoint \--output_dir path_to_predict_result \--per_device_eval_batch_size 8 \--max_samples 100 \--predict_with_generate

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

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

相关文章

Volcano Scheduler调度器源码解析

Volcano Scheduler调度器源码解析 本文从源码的角度分析Volcano Scheduler相关功能的实现。 本篇Volcano版本为v1.8.0。 Volcano项目地址: https://github.com/volcano-sh/volcano controller命令main入口: cmd/scheduler/main.go controller相关代码目录: pkg/scheduler 关联…

Vue3.x+Echarts (可视化界面)

Vue3.0Echarts (可视化界面) 1. 简介1.1 技术选型1.2 ECharts支持的数据格式1.3 ECharts使用步骤 2. ECharts图形2.1 通用配置2.2 柱状图2.3 折线图2.4 散点图2.5 直角坐标系常用配置2.6 饼图2.7 地图2.8 雷达图2.9 仪表盘2.10 小结 3. Vue3.2ECharts5数…

RecombiMAb anti-mouse VEGFR-2

DC101-CP132单克隆抗体是原始DC101单克隆的重组嵌合型抗体。可变结构域序列与原始DC101相同,但是恒定区序列已经从大鼠IgG1变为小鼠IgG2a。DC101-CP132单克隆抗体像原始大鼠IgG1抗体一样,不包含Fc突变。 DC101-CP132单克隆抗体能与小鼠VEGFR-2(血管内皮生…

docker容器内,将django项目数据库改为postgresql

容器为ubuntu20.04版本&#xff0c;新建了一套django项目&#xff0c;使用的默认sqllit3&#xff0c;换为postgresql&#xff0c;容器里安装postgresql方法 步骤1: 安装PostgreSQL数据库 # 打开一个bash会话在你的容器中 docker exec -it <container_id_or_name> bash#…

ZGC垃圾收集器介绍

ZGC&#xff08;The Z Garbage Collector&#xff09;是JDK 11中推出的一款低延迟垃圾回收器&#xff0c;它的设计目标包括&#xff1a; 停顿时间不超过10ms&#xff1b;停顿时间不会随着堆的大小&#xff0c;或者活跃对象的大小而增加&#xff1b;支持8MB~4TB级别的堆&#x…

【开题报告】基于JavaWeb的母婴用品在线商城的设计与实现

1.选题背景 随着社会经济的发展和人们生活水平的提高&#xff0c;母婴用品市场逐渐壮大。同时&#xff0c;互联网的普及和电子商务的兴起使得线上购物成为了人们方便快捷的购物方式之一。传统的实体母婴用品店面受到了线上商城的冲击&#xff0c;因此建立一个方便、快捷的在线…

微信小程序 获取地址信息(uniapp)

参考API地址&#xff1a;微信小程序JavaScript SDK | 腾讯位置服务 <script> // 引入SDK核心类&#xff0c;js文件根据自己业务&#xff0c;位置可自行放置var QQMapWX require(../../js/uploadImg/qqmap-wx-jssdk.js);export default {data(){return{qqmapsdk:}},onL…

【HarmonyOS4.0】第四篇-ArkUI基础实战

一、ArkUI框架简介 ArkUI开发框架是方舟开发框架的简称&#xff0c;它是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架&#xff0c;它使用极简的UI信息语法、丰富的UI组件以及实时界面语言工具&#xff0c;帮助开发者提升应用界面开发效率 30%&#xff0c;开发…

Swift单元测试Quick+Nimble

文章目录 使用QuickNimble1、苹果官方测试框架XCTest的优缺点2、选择QuickNimble的原因&#xff1a;3、QuickNimble使用介绍集成&#xff1a;Quick关键字说明&#xff1a;Nimble中的匹配函数等值判断&#xff1a;使用equal函数是否是同一个对象&#xff1a;使用beIdenticalTo函…

Android14之刷机模式总结(一百七十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

电脑文件mfc100u.dll丢失的解决方法分析,怎么修复mfc100u.dll靠谱

mfc100u.dll丢失了要怎么办&#xff1f;其实很多人都遇到过这样的电脑故障吧&#xff0c;说这个mfc100u.dll文件已经不见了&#xff0c;然后一些程序打不开了&#xff0c;那么这种情况我们要怎么解决呢&#xff1f;今天我们就来给大家详细的说说mfc100u.dll丢失的解决方法。 一…

#Css篇:flex布局的总结

注意&#xff0c;设为flex布局以后&#xff0c;子元素的float、clear、vertical-align属性将失效。 概念 采用flex布局的元素&#xff0c;简称“容器”。内部的子元素&#xff0c;简称“项目”。 容器存在两根轴&#xff0c;水平主轴main axis,开始叫 main start;结束叫 main…

【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果

文章目录 前言开始完结 前言 添加程序摇摆和摆动是为任何FPS游戏添加一些细节的非常简单的方法。但是并不是所以的模型动画都会配有武器摆动动画效果&#xff0c;在本文中&#xff0c;将实现如何使用一些简单的代码实现武器摇摆和摆动效果&#xff0c;这比设置动画来尝试实现类…

Golang中for和for range语句的使用技巧、对比及常见的避坑

前言 基础语法不再赘述&#xff0c;写这个原因是之前的某次面试被问道了&#xff0c;我知道会导致问题但具体答下来不是很通顺。再回想自己开发过程中&#xff0c;很多地方都是使用到了for/for range&#xff0c;但是却从没注意过一些细节&#xff0c;因此专门学习一下进行记录…

【C++20】编译期检测所有未定义行为undefined behavior和内存泄漏(不借助编译选项以及任何外部工具)

文章目录 一、未定义行为Undefined Behavior(UB)1.返回一个未初始化的局部变量的值2.数组越界访问3.有符号数的常量表达式溢出4.new与delete5.vector6.空指针解引用 参考 一、未定义行为Undefined Behavior(UB) 在C中&#xff0c;未定义行为&#xff08;Undefined Behavior&am…

Angular中的NgZone.run()有什么用?

在Angular中&#xff0c;NgZone是一个服务&#xff0c;用于管理异步任务的执行&#xff0c;并提供一种在Angular区域内或外部显式运行代码的方式。区域&#xff08;Zone&#xff09;的概念用于跟踪和拦截异步操作&#xff0c;例如Promises、事件和定时器&#xff0c;以便在需要…

K8S中SC、PV、PVC的理解

存储类&#xff08;StorageClass&#xff09;定义了持久卷声明&#xff08;PersistentVolumeClaim&#xff09;所需的属性和行为&#xff0c;而持久卷&#xff08;PersistentVolume&#xff09;是实际的存储资源&#xff0c;持久卷声明&#xff08;PersistentVolumeClaim&#…

平衡搜索二叉树(AVL树)

前言 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种解决上述…

代码随想录算法训练营第三十天(回溯算法篇)|491. 非递减子序列, 46. 全排列,47. 全排列Ⅱ

491. 非递减子序列 题目链接&#xff1a;491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 思路 1. 判断是否将当前遍历到的元素添加到path中。 如果当前元素大于等于前一个元素&#xff0c;满足条件&#xff0c;但前提是当前的i>0&#xff0c;可若加上i>0…