微调基模型

news2024/9/21 20:54:33

该示例用的谷歌的gemma-2b-it模型

Gemma是Google的一系列轻量级、最先进的开源模型,基于用于创建Gemini模型的相同研究和技术构建。它们是文本到文本、仅解码的大型语言模型,提供英文、开源权重、预训练变体和指令调优变体。Gemma模型非常适合各种文本生成任务,包括问答、摘要和推理。其相对较小的体积使其可以在资源有限的环境中部署,如笔记本电脑、台式机或您自己的云基础设施,使每个人都能访问最先进的AI模型,促进创新。

我们第一步先试着来跑通它。

1、在CPU上运行模型

一、从transformers库中导入AutoTokeniser和AutoTokenizer和AutoModelForGausalLM,同时导入torch以使用PyTorch的功能。

二、加载预训练模型和分词器:

1、tokenizer加载gemma-2b-it模型的分词器。

2、model:加载因果语言模型,指定张量的数据类型为torch.bfloat16,这是一种16位浮点类型,比标准的32位浮点数更节省内存。

三、准备输入文本:脚本使用字符串“Write me a poem about Machine Learning”,并通过分词器将其转换为模型能理解的输入ID

四、调用model.generate函数,并传入输入ID,它使用模型生成文本。

五、解码并打印输出:使用分词器的decode函数将生成的输出(一系列ID)解码回可读的字符串。

2、在单个/多个GPU上运行模型

加载预训练模型和分词器:加载模型时,使用了device_map=“auto”参数,这允许库自动选择可用的设备(如GPU)来运行模型。同时,指定了torch_dtype=torch.bfloat16来使用16位浮点数。

将输入文本转换为张量并移动到GPU:在生成输入ID之后,使用.to(“cuda”)将张量移动到GPU上,以加速模型的生成过程。

生成文本:调用model.generate函数,并传入转换后的输入张量。

3、在GPU上使用不同的精度运行模型

此模型的原生权重以 `bfloat16`精度导出。您可以使用 `float16`,这在某些硬件上可能更快,加载模型时指明 `torch_dtype` 即可。

确保您的机器上安装了NVIDIA的CUDA工具包,并且Pytorch支持CUDA,因为脚本使用了.to(“cuda”)将模型和数据移动到GPU上运行。

device_map=“auto”和torch.float16参数用于自动选择设备并使用16位浮点数来减少内存使用并可能加速计算。

revision=“float16”指定了使用特定版本的模型,这个版本支持16位浮点数。

4、使用 bitsandbytes 实现8位整数(int8)量化版本

 

创建了一个BitsAndBytesConfig对象,并将load_in_8bit设置为True,以启用8位整数量化。

使用AutoModelForCausalLM.from_pretrained加载模型,并传递量化配置。

5、使用 4-bit precision

使用4位精度(int4)量化来优化模型的内存占用和推理速度。

总而言之,讲讲为什么要量化?

1、减少内存占用:量化可以显著减少模型参数所需的存储空间。4位量化意味着每个权重和激活值使用更少的比特来表示,从而减少模型大小。

2、加速推理:量化可以提高模型的推理速度。在某些硬件上,特别是那些优化了低精度计算的硬件,量化后的模型可以更快的执行

3、降低能耗:量化后的模型由于计算需求降低,可能在运行时消耗更多的能源,这对于移动设备和边缘设备尤其重要。

4、提升吞吐量:在服务器或GPU上,量化可以提高模型的吞吐量,因为量化模型通常比32位浮点运算更快。

5、硬件兼容性:一些硬件加速器和特定处理器对低精度运算有特别的优化,量化模型可以更好地利用这些硬件特性。

然而,4位量化也带来了一些挑战:

1、牺牲精度:量化到4位精度可能会导致模型精度的显著下降,因为可用的表示范围非常有限。

2、量化噪声:量化可能会引入噪声

3、模型微调:量化后的模型可能需要额外的微调来恢复性能,这需要额外的微调来恢复性能,这需要额外的训练时间和计算资源。

4、兼容性问题:并非所有的深度学习框架和硬件都支持4位量化,这可能限制了量化模型的部署选项。

其他优化

Flash Attention 2

安装Flash Attention库:Flash Attention是一种高效的注意力机制实现,旨在加速Transformer模型中的自注意力计算。Flash Attention 2是该技术的第二代版本,它进一步优化了性能和内存使用。

使用transformers库中的AutoModelForCausalLM里的from_pretrained方法来加载预训练模型,并指定模型ID。同时,设置torch_dtype=torch.float16来使用16位浮点数,这有助于减少模型大小和加速计算。

在加载模型时,通过设置attn_implementation="flash_attention_2"来启用Flash Attention 2。

使用.to(0)将模型移动到第一个GPU设备上。如果您的系统有多个GPU,您可以选择适当的设备编号。

聊天模板

指令调优模型使用聊天模板,必须遵守以进行对话使用。最简单的方法是使用标记器的内置聊天模板,如下片段所示。

让我们加载模型并将聊天模板应用于对话。在此示例中,我们将从单个用户交互开始:

创建聊天模板:chat列表包含了一个字典,其中指定了角色(role)和内容(content)。

应用聊天模板:使用分词器的apply_chat_template方法将聊天模板应用于对话,tokenize=False表示不对输入内容进行分词,add_generation_prompt表示添加生成提示。

构建提示文本:应用聊天模板后,prompt变量包含了格式化的文本,每个角色的回合都由特定的标记包围。

生成文本: 使用分词器的encode方法将提示文本编码为模型可以理解的输入ID,设置add_special_tokens=False以避免添加额外的特殊标记。然后,使用模型的generate方法生成文本,max_new_tokens指定了生成的最大新令牌数。

模型生成输出outputs变量包含了模型生成的文本的ID,可以通过分词器的decode方法将其解码回文本。

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

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

相关文章

微软蓝屏事件:网络安全与系统稳定性的深刻反思

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 写在前面 在数字化时代,软件更新已成为…

电测量数据交换DLMS∕COSEM组件第61部分:对象标识系统(OBIS)(下)

GB/T 17215.6的本部分规定了对象标识系统(OBIS)的总体结构并将测量设备中的所有常用数据项映射到其标识代码。OBIS为测量设备中的所有数据都提供唯一的标识符,不仅包括测量值,而且还包括仪表设备的配置或获取测量设备运行状态的抽象数据。 5.抽象对象(A=0) 5.1通用和服…

yolov10来了!用yolov10训练自己的数据集(原理、训练、部署、应用)

一、引言 YOLOv9还没热乎呢,YOLOv10就出来了,太卷了!太快了! 自今年2月YOLOv9发布之后, YOLO(You Only Look Once) 系列的接力棒传到了清华大学研究人员的手上。YOLOv10推出的消息引发了AI界的…

【第七天】TCP三次握手四次挥手 HTTP的keep-Alive和TCP的keepalive

TCP三次握手四次挥手 既然要了解这些,首先我们要清楚一个概念,半连接队列和全连接队列: 在TCP三次握手中,Linux内核会维护两个队列来管理连接请求。 这两个队列的存在是为了处理并发连接请求,确保服务端能够有效管理新…

设计模式17-适配模式

设计模式17-适配模式 动机定义与结构C代码推导总结应用具体应用示例 动机 在软件系统中由于应用环境的变化常常需要将一些现存的对象。放到新的环境中去应用。但是新环境要求的接口是这些现存对象所不满足的。那么这种情况下如何应对这种迁移的变化?如何既能利用现…

《零散知识点 · SpringBoot 整合邮件功能》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

光伏气象仿真系统主要功能点

光伏电站的效能与经济效益受气象条件、地理位置、设计布局等多种因素影响显著。因此,光伏气象仿真系统应运而生,成为提升光伏项目规划、设计、运营管理水平的重要工具。该系统集成了气象数据分析、发电量分析、投融资分析、损耗估算分析及光伏设计等多项…

重磅惊喜!OpenAI突然上线GPT-4o超长输出模型!「Her」高级语音模式已开放测试

在最近的大模型战争中,OpenAI似乎很难维持霸主地位。虽然没有具体的数据统计,但Claude3.5出现后,只是看网友们的评论,就能感觉到OpenAI订阅用户的流失: Claude3.5比GPT-4o好用,为什么我们不去订阅Claude呢&…

【TS】基础(一)

TS基础学习 TS(TypeScript)TS的特性TS的优缺点优点缺点 TS和JS的区别TS常用类型原始类型数组类型别名 type联合类型 |函数对象接口 interface继承 extendsinterface和type的区别 类型断言枚举enum任意类型any TS(TypeScript) TS是JS类型的超集(在JavaScript的基础上…

为什么说脱离决策的数据分析都是无用功

如果你问我数据分析师最重要的能力是什么,我的回答是数据驱动决策,这是数据分析师最值钱的能力,没有之一。 因为数据的价值在于挖掘,与业务和市场进行关联,找到机会点。抛开这个,数据本身一文不值&#xf…

C语言笔记(第n版):知识清单

注:本文参考自【C reference - cppreference.com】和【C 语言参考 | Microsoft Learn】,颇有点借花献佛的意味…… C 程序是一系列包含声明的文本文件(通常为头文件和源文件)的序列。它们经过转换成为可执行程序,当操作…

Bugku ---Web---全题目解析 超详细步骤 持续更新

目录 1.Simple_SSTI_1 2.Simple_SSTI_2 3.滑稽 4.计算器 5.矛盾 6.GET ————————————————————分割线———————————————————— 1.Simple_SSTI_1 SSTI是服务器端模板注入 F12查看下源码 在 Flask 中,双大括号 {{ }} 用…

ElasticSearch父子索引实战

关于父子索引 ES底层是Lucene,由于Lucene实际上是不支持嵌套类型的,所有文档都是以扁平的结构存储在Lucene中,ES对父子文档的支持,实际上也是采取了一种投机取巧的方式实现的. 父子文档均以独立的文档存入,然后添加关联关系,且父子文档必须在同一分片,由于父子类型文档并没有…

Oracle LiveLabs实验:Improve application performance with True Cache

此实验申请地址在这里,时间为120分钟。 帮助见这里。 简介 参加本次动手实践研讨会,了解如何使用 True Cache 通过卸载查询和减少对主数据库的请求和连接数量来提高可扩展性。本次研讨会基于连接到配置了 True Cache 的主数据库的计算实例&#xff08…

从零手写实现 mybatis 系列(零)mybatis 核心特性

拓展阅读 第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis。 第二节 从零开始手写 mybatis(二)mybatis interceptor 插件机制详解 第三节 从零开始手写 mybatis(三&#xff0…

最低工资标准数据(2001-2023年不等)、省市县,整理好的面板数据(excel格式)

时间范围:2001-2022年 具体内容:一:最低工资数据标准时间:2012-2021包含指标: 省份城市/区县小时最低工资标准(非全日制)月最低工资标准实施日期 样例数据: 二:各省最低…

Spring Cloud Gateway网关的高级特性之GatewayFilter Factories(路由过滤器)

1、GatewayFilter Factories(路由过滤器) 官方访问地址:点击这里 来自官方的解释如下图所示: 简单来说就是: 客户端向 Spring Cloud Gateway 发送请求。如果请求与某个路由匹配,则该请求会被传递给 Ga…

OpenEuler安装部署教程

目录 OpenEuler安装部署教程 MobaXterm一款全能的远程工具 yum安装软件 vim编辑器(了解) 防火墙 常用命令 网络工具netstat & telnet 进程管理工具top ps 磁盘free、fdisk 用户、组(了解) 权限(了解&am…

实验3-9 三天打鱼两天晒网

//实验3-9 三天打鱼两天晒网/* 中国有句俗语叫“三天打鱼两天晒网”。 假设某人从某天起&#xff0c;开始“三天打鱼两天晒网”&#xff0c; 问这个人在以后的第N天中是“打鱼”还是“晒网”&#xff1f; */#include<stdio.h> #include<math.h> int main(){int n; …