大模型PEFT(一)之推理实践学习记录

1. 简介

  • 多种模型: LLaMA、Mistral、Mixtral-MoE、Qwen、Yi、Gemmha、Baichuan、ChatGLM、Phi等等。
  • 集成方法:(增量)预训练、指令监督微调、奖励模型训练、PPO训练和DPO训练。
  • 多种精度:32比特全参数微调、16比特冻结微调、16比特LORA微调和基于AQLM/AWQ/GPTQ/LLM.int8 的2/4/8比特 QLORA 微调。
  • 先进算法:GaLore、DORA、LongLoRA、LLaMAPro、LoftQ和Agen微调。
  • 实用技巧:FlashAttention-2、Unsloth、RoPE scaling、NEFTune和rsLoRA。
  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLfiow等等。
  • 极速推理:基于VLLM的OpenAl风格API、浏览器界面和命令行接口。

2. 模型对比

在这里插入图片描述

  • 注意:
    默认模块应作为 --lora_target 参数的默认值,可使用 --lora_target all 参数指定全部模块以取得更好的效果。

    对于所有“基座”(Base)模型,–template 参数可以是 default, alpaca, vicuna 等任意值。但“对话”(Instruct/Chat)模型请务必使用对应的模板。

    请务必在训练和推理时使用完全一致的模板。

项目所支持模型的完整列表请参阅 constants.py。

您也可以在 template.py 中添加自己的对话模板。

3. 训练方法

在这里插入图片描述

4. 软硬件依赖

在这里插入图片描述

5. 硬件依赖

  • 估算值
    在这里插入图片描述

6. 如何使用

6.0 构建python 环境

# 创建新环境
conda create -n py310 python=3.10
#激活环境
conda activate py310

6.1 安装 LLaMA Factory

# 本次LLaMA-Factory版本 c1fdf81df6ade5da7be4eb66b715f0efd171d5aa
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]

可选的额外依赖项:torch、metrics、deepspeed、bitsandbytes、vllm、galore、badam、gptq、awq、aqlm、qwen、modelscope、quality

  • 遇到包冲突时,可使用 pip install --no-deps -e . 解决。
6.1.2 Windows 用户指南

如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库, 支持 CUDA 11.1 到 12.2, 请根据您的 CUDA 版本情况选择适合的发布版本。

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

如果要在 Windows 平台上开启 FlashAttention-2,需要安装预编译的 flash-attn 库,支持 CUDA 12.1 到 12.2,请根据需求到 flash-attention 下载对应版本安装。

6.1.3 确认自己的cuda版本
nvidia-smi

在这里插入图片描述

版本是12.2, 非常好

在这里插入图片描述
在这里插入图片描述
所以我安装的是:

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

在这里插入图片描述

6.2 安装依赖

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --ignore-installed

在这里插入图片描述

6.3 大模型下载

可以在【2. 模型对比】中选择想微调的大模型,这里为了方便学习,选择Qwen1.5-0.5B大模型作为本次学习的大模型

!git lfs install
!git clone https://huggingface.co/Qwen/Qwen1.5-0.5B

在这里插入图片描述
哈哈哈哈,没下载下了,手动去网页一个个点击下载的
在这里插入图片描述
在这里插入图片描述

7. 大模型推理

当前最新版本只有 api、webui、train三种模式,cli_demo 是之前的版本。(本次LLaMA-Factory版本c1fdf81df6ade5da7be4eb66b715f0efd171d5aa)
在这里插入图片描述
但是可以试用llamafactory-cli 推理

7.1 使用openai 风格 api推理

CUDA_VISIBLE_DEVICES=0 API_PORT=8000 python src/api.py
--model_name_or_path .\models\Qwen1.5-0.5B\
#--adapter_name_or_path path_to_checkpoint\
#--finetuning_type lora\
--template qwen

在这里插入图片描述
在这里插入图片描述

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

7.2 使用命令行推理

  • 大模型指令推理
CUDA_VISIBLE_DEVICES=7 API_PORT=8030 llamafactory-cli api \--model_name_or_path .\models\Qwen1.5-0.5B \--template qwen

在这里插入图片描述

7.2.1 文档访问:http://localhost:8000/docs

在这里插入图片描述

7.2.1.1 get 请求:/v1/models

在这里插入图片描述
postman 试一下:
在这里插入图片描述
网页端自带请求测试:
在这里插入图片描述

7.2.1.2 post 请求: /v1/chat/completions

在这里插入图片描述

# Request body  Example Value
{"model": "string","messages": [{"role": "user","content": "string","tool_calls": [{"id": "string","type": "function","function": {"name": "string","arguments": "string"}}]}],"tools": [{"type": "function","function": {"name": "string","description": "string","parameters": {}}}],"do_sample": true,"temperature": 0,"top_p": 0,"n": 1,"max_tokens": 0,"stop": "string","stream": false
}

在这里插入图片描述

#Responses 	Successful Response Example Value
{"id": "string","object": "chat.completion","created": 0,"model": "string","choices": [{"index": 0,"message": {"role": "user","content": "string","tool_calls": [{"id": "string","type": "function","function": {"name": "string","arguments": "string"}}]},"finish_reason": "stop"}],"usage": {"prompt_tokens": 0,"completion_tokens": 0,"total_tokens": 0}
}
# Responses 	Validation Error  Example Value
{"detail": [{"loc": ["string",0],"msg": "string","type": "string"}]
}

postman 试一下:

在这里插入图片描述

网页端自带请求测试:
在这里插入图片描述

{"model": "string","messages": [{"role": "user","content": "tell me a story"}]
}

response:

在这里插入图片描述

{"id": "chatcmpl-5a4587623b494f46b190ab363ac4260a","object": "chat.completion","created": 1717041519,"model": "string","choices": [{"index": 0,"message": {"role": "assistant","content": "Sure, here's a story:\n\nOnce upon a time, there was a young girl named Lily. She loved to read and always wanted to learn more about the world around her. One day, while she was wandering through the woods, she stumbled upon a mysterious old book. The book was filled with stories and secrets that she had never heard before.\n\nAs she began to read, she found herself lost in the world of the book. She knew that the book was important, but she didn't know how to get it back. She searched for hours and hours, but she couldn't find it anywhere.\n\nJust when she thought she had lost hope, she saw a group of brave young men who were searching for treasure. They were looking for a lost treasure that had been hidden for centuries. Lily was excited to join them, but she was also scared.\n\nAs they searched the woods, they stumbled upon a secret passage that led to the treasure. But as they walked deeper into the forest, they realized that the passage was guarded by a group of trolls. The trolls were fierce and dangerous, and they knew that they couldn't leave without getting hurt.\n\nThe trolls were angry and territorial, and they wanted to take control of the treasure. They charged at Lily and her friends, but they were too late. They were outnumbered and outmatched, and they were all caught in the troll's trap.\n\nIn the end, Lily and her friends had to fight off the trolls and save the treasure. They had to work together to find a way out of the troll's trap, and they did it. They had a lot of fun and learned a lot about themselves and the world around them.","tool_calls": null},"finish_reason": "stop"}],"usage": {"prompt_tokens": 23,"completion_tokens": 339,"total_tokens": 362}
}

服务终端log:
在这里插入图片描述

7.3 使用浏览器推理

CUDA_VISIBLE_DEVICES=0 python src/webui.py\
--model_name_or_path ./models/Qwen1.5-0.5B\
#--adapter_name_or_path path_to_checkpoint\
#--finetuning_type lora\
--template qwen

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数简介:

  • –model_name_or_path:参数的名称(huggingface或者modelscope上的标准定义,如“meta-llama/Meta-Llama-3-8B-Instruct”), 或者是本地下载的绝对路径,如/media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct 或者 /models\Qwen1.5-0.5B
  • template: 模型问答时所使用的prompt模板,不同模型不同,请参考 https://github.com/hiyouga/LLaMA-Factory?tab=readme-ov-file#supported-models 获取不同模型的模板定义,否则会回答结果会很奇怪或导致重复生成等现象的出现。chat 版本的模型基本都需要指定,比如Meta-Llama-3-8B-Instruct的template 就是 llama3 。Qwen 模型的 template 就是qwen在这里插入图片描述
  • finetuning_type:微调的方法,比如 lora
  • adapter_name_or_path:微调后的权重位置,比如 LoRA的模型位置

最后两个参数在微调后使用,如果是原始模型的话可以不传这两个参数。


参考
非一般程序员第三季大模型PEFT(一)之大模型推理实践
LLaMA-Factory/README_zh.md
使用 LLaMA Factory 微调 Llama-3 中文对话模型
LLaMA-Factory QuickStart

数据驱动与 LLM 微调: 打造 E2E 任务型对话 Agent
LLaMA-Factory微调多模态大语言模型教程

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

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

相关文章

操作字符串获取文件名字(包含类型)

记录一种操作字符串获取文件名字的操作方式,方便后期的使用。示例: 输入:"D:/code/Test/Test.txt" 输出:"Test.txt" 设计思路: 首先查找路径中最后一个”/“,然后再通过字符串截取的…

湖南源点调研 为什么中小企业产品上市前一定要做市场调研?

本文由湖南长沙(产品前测)源点调研咨询编辑发布 可能有很多企业主会表示,市场调研,产品调研,不都是大公司、大品牌、上市公司才会有的流程吗,像我们这种小企业、小品牌、小厂家没有必要去那么做&#xff0…

开源VS闭源:大模型发展路径之争,你站哪一派?

文章目录 引言一、数据隐私1.1开源大模型的数据隐私1.2 闭源大模型的数据隐私1.3 综合考量 二、商业应用2.1 开源大模型的商业应用2.2 闭源大模型的商业应用2.3 商业应用的综合考量 三、社区参与3.1 开源大模型的社区参与3.2 闭源大模型的社区参与3.3 综合考量 结论 引言 在人…

解析“分层引流”在颅内感染治疗中的价值意义

临床中,化脓性颅内感染的治疗一直是界内关注的重点。近年来,得益于医疗技术的持续革新与提升,颅内感染的治疗方法也获得了不断的更新与优化。在此背景下,北京精诚博爱医院所倡导的“分层引流”理念,作为一种新兴的治疗…

什么牌子的开放式耳机质量好?2024超强实力派品牌推荐!

耳机对于一个音乐人有重要这个不必多说,我朋友是个音乐编辑,他经常需要长时间佩戴耳机进行音频编辑和混音工作。在尝试过多款开放式耳机后,都没找到合适的。今天,我将从专业角度为大家带来几款热门开放式耳机的测评报告&#xff0…

第二证券炒股知识:股票内盘外盘代表什么意思?

股票内盘是主动性卖盘,表明以买入价成交的股数,持股的投资者主动以等于或是低于买一、买二、买三、买四、买五的价格卖出手中持有的股份,买入成交数量核算参加内盘。 股票外盘是主动性买盘,表明以卖出价成交的股数,场…

跟着大佬学RE(一)

学了一个 map()函数的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函数将 rawData 中的每个字符传递给 ord 函数。ord 函数返回给定字符的 Unicode 码点 print(target) # 打印 map 对象的内存地址&…

电脑中病毒了怎么办?7招教你保护电脑安全!

“不知道怎么回事,我的电脑莫名其妙就中病毒了,实在不知道应该怎么操作了,希望大家可以帮我!” 在数字化时代的浪潮中,电脑已成为我们生活与工作中不可或缺的一部分。然而,就像任何事物都有其阴暗面一样&am…

ip地址快速切换软件有哪些好处

ip地址快速切换软件有哪些好处?IP地址快速切换软件具有诸多显著的好处,以下是对其主要优势的详细阐述: 首先,IP地址快速切换软件极大地提升了网络活动的灵活性和便捷性。对于需要经常切换网络环境或进行多账号管理的用户而言&…

AI大模型在穿戴设备健康中的心率深度融合与案例分析

文章目录 1. 架构设计2. 应用场景3. 实现步骤3.1 步骤1:数据预处理3.2 步骤2:边缘计算初步分析3.3 步骤3:数据上传到云端3.4 步骤4:云端复杂分析3.5 步骤5:深度学习模型训练与部署 4. 云端API设计4.1 安装Flask4.2 API…

美国前总统特朗普竟然入驻TikTok,粉丝破24万

大家好! 我是老洪! 刚看到一则关于美国前总统特朗普的新闻, 特朗普竟然入驻TikTok了,太令人惊讶了。(为什么惊讶,后面再说) 更为惊人的是,他的到来竟然引来了众多粉丝的热烈追捧&…

如何从清空的回收站中恢复已删除的Word文档?

“嗨,我将 10 个 Word 文档移动到回收站,然后用清洁软件清理回收站。现在我意识到我犯了一个大错误——我删除了错误的文件。我想知道是否可以从清空的回收站中恢复已删除的Word文档。我没有数据恢复的经验,也不精通计算机技术。有没有简单的…

三.一布局和布局切换的实践与探索

在前端开发中,灵活的布局切换是一项非常实用的功能。今天,我想和大家分享一下如何在主组件中通过更换 Layout 目录下的组件来实现布局切换。 首先,我们有一个主组件 index.vue,它承担着整个页面的主要逻辑和展示。 而在 Layout …

SG90舵机(Arduino)/XY轴摇杆使用(Arduino)

XY轴摇杆使用 需要注意,必须是 ADC 引脚才可以接收模拟信号输入 /** 接线* PS2摇杆 Arduino* x A0* y A1* sw 7 */const int yg_x_pin A0; const int yg_y_pin A1; const int yg_btn_pin 7; // 摇杆按下的输入引脚 void…

旋转编码器、DS1302 实时时钟、红外遥控模块、雨滴探测传感器 | 配合Arduino使用案例

旋转编码器 旋转编码器是一种用作检测自动化领域中的角度、速度、长度、位置和加速度的传感器。 有绝对式和增量式,这里使用增量式(相对)。 绝对输出只是周的当前位置,是他们成为角度传感器。增量输出关于轴的运动信息&#xff0…

Python中degrees怎么用

degrees() 函数可以将弧度转换为角度。 语法 以下是 degrees() 方法的语法: import math math.degrees(x) 注意:degrees() 是不能直接访问的,需要导入 math 模块,然后通过 math 静态对象调用该方法。 参数 x -- 一个数值。 返…

视频SK配置教程

视频SK配置教程 提供的pika接口服务(国外的,所以要反代),创建一个pika账号并开通pika套餐 反向配置教程 https://blog.csdn.net/u012241616/article/details/139391954?spm1001.2014.3001.5502 1、进入站点后台->功能->…

.Net Core Console 项目如何使用 HttpClient 与 Web 服务通信

前言 HttpClient 类是在 .NET Framework 4.5 和 .NET Core 中引入的新的 HTTP 客户端类,是 .NET 用于发送和接收 HTTP 请求的类,相比之前的 WebRequest 和 HttpWebRequest, 它提供了现代的、易用的 API,并且具有更好的性能和扩展…

2024 cicsn magicvm

文章目录 参考检查逆向vm::runvm::vmvm_alu::set_inputvm_mem::set_inputvm_id::runvm_alu::runvm_mem::run 漏洞思路参考的exp 参考 https://forum.butian.net/share/3048 https://akaieurus.github.io/2024/05/20/2024%E5%9B%BD%E8%B5%9B%E5%88%9D%E8%B5%9Bpwn-wp/#SuperHea…

GNeRF论文理解

文章目录 主要解决什么问题?结构设计以及为什么有效果?个人想法。 主要解决什么问题? 本文主要想要解决的问题是 如何使用uncalibrated的照片来进行Nerf重建。虽然说现在已经有了一些方式可以对相机位姿进行估计和优化,但是他们限…