QLoRa使用教程

news/2024/9/14 1:59:26/ 标签: 人工智能

一、定义

  1. 定义
  2. 案例1

二、实现

  1. 定义
    QLoRa: 量化+LoRa.
    网址:https://huggingface.co/docs/peft/main/en/developer_guides/quantization
  2. 案例1
    1. 4bit 量化+LoRa
import torch
from transformers import BitsAndBytesConfigconfig = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_quant_type="nf4",bnb_4bit_use_double_quant=True,bnb_4bit_compute_dtype=torch.bfloat16,
)
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1", quantization_config=config)
from peft import prepare_model_for_kbit_training
model = prepare_model_for_kbit_training(model)from peft import LoraConfig
config = LoraConfig(r=16,lora_alpha=8,target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],lora_dropout=0.05,bias="none",task_type="CAUSAL_LM"
)
from peft import get_peft_model
model = get_peft_model(model, config)
  1. LoftQ 算法
    LoftQ为初始化LoRa的一种算法,使量化误差最小化。
    网址: 查看支持的模型https://github.com/huggingface/peft/tree/main/examples/loftq_finetuning
    先对模型进行量化、保存。然后进行加载训练。
def quantize_and_save():args = arg_parse()# Download weights and configure LoRAtokenizer = AutoTokenizer.from_pretrained(args.model_name_or_path, token=args.token, trust_remote_code=True)if any(name in args.model_name_or_path.lower() for name in ["llama", "mistral", "falcon"]):model = AutoModelForCausalLM.from_pretrained(args.model_name_or_path, token=args.token, trust_remote_code=True)task_type = TaskType.CAUSAL_LMtarget_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "up_proj", "down_proj", "gate_proj"]elif any(name in args.model_name_or_path.lower() for name in ["bart", "t5"]):model = AutoModelForSeq2SeqLM.from_pretrained(args.model_name_or_path, token=args.token)task_type = TaskType.SEQ_2_SEQ_LMtarget_modules = ["q_proj", "k_proj", "v_proj", "fc1", "fc2", "out_proj"]elif any(name in args.model_name_or_path.lower() for name in ["deberta", "roberta", "bert"]):model = AutoModelForSequenceClassification.from_pretrained(args.model_name_or_path, token=args.token)task_type = TaskType.SEQ_CLStarget_modules = ["query_proj", "key_proj", "value_proj", "dense"]  # embeddings not supported by peftelse:raise NotImplementedError("Other models not supported yet.")# Config of LoftQloftq_config = LoftQConfig(loftq_bits=args.bits, loftq_iter=args.iter)lora_config = LoraConfig(task_type=task_type,inference_mode=True,r=args.rank,lora_alpha=16 if task_type is TaskType.CAUSAL_LM else args.rank,lora_dropout=0.1,target_modules=target_modules,init_lora_weights="loftq",loftq_config=loftq_config,)# Obtain LoftQ modellora_model = get_peft_model(model, lora_config)base_model = lora_model.get_base_model()# Save LoftQ modelmodel_name = args.model_name_or_path.split("/")[-1] + f"-{args.bits}bit" + f"-{args.rank}rank"base_model_dir = os.path.join(args.save_dir, model_name)lora_model_dir = os.path.join(args.save_dir, model_name, "loft_init")# save lora adapters firstlora_model.base_model.peft_config["default"].base_model_name_or_path = base_model_dir  # This can be a local path or Hub model idlora_model.base_model.peft_config["default"].init_lora_weights = True  # Don't apply LoftQ when loading againlora_model.save_pretrained(lora_model_dir)print_model(lora_model, "lora_model")# remove lora adapters and save the backboneunwrap_model(base_model)base_model.save_pretrained(base_model_dir)tokenizer.save_pretrained(base_model_dir)print_model(base_model, "base_model")return base_model_dir, lora_model_dir SAVE_DIR="model_zoo/loftq/"
python quantize_save_load.py \
--model_name_or_path meta-llama/Llama-2-7b-hf \  # high-precision model id in HF
--token HF_TOKEN \  # your HF token if the model is private, e.g., llama-2
--bits 4 \
--iter 5 \
--rank 16 \
--save_dir $SAVE_DIR           

加载:

import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
from peft import PeftModelMODEL_DIR = "model_zoo/loftq/Llama-2-7b-hf-4bit-16rank"base_model = AutoModelForCausalLM.from_pretrained(MODEL_DIR, torch_dtype=torch.bfloat16,quantization_config=BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype=torch.bfloat16,bnb_4bit_use_double_quant=False,bnb_4bit_quant_type='nf4',),
)
peft_model = PeftModel.from_pretrained(base_model,MODEL_DIR,subfolder="loftq_init",is_trainable=True,
)
# Do training with peft_model ...
  1. AQLM quantization +LoRa
from transformers import AutoTokenizer, AutoModelForCausalLMquantized_model = AutoModelForCausalLM.from_pretrained("ISTA-DASLab/Mixtral-8x7b-AQLM-2Bit-1x16-hf",torch_dtype="auto", device_map="auto", low_cpu_mem_usage=True,
)
from peft import LoraConfig, TaskType
from peft import get_peft_modelpeft_config = LoraConfig(task_type=TaskType.CAUSAL_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1, target_modules=["layers.28.self_attn.v_proj"])
quantized_model = get_peft_model(quantized_model, peft_config)
quantized_model.print_trainable_parameters()
  1. EETQ quantization:8 bit 量化
import torch
from transformers import EetqConfig
config = EetqConfig("int8")
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1", quantization_config=config)
from peft import LoraConfig, get_peft_model
config = LoraConfig(r=16,lora_alpha=8,target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],lora_dropout=0.05,bias="none",task_type="CAUSAL_LM"
)model = get_peft_model(model, config)
  1. HQQ quantization +LoRa :Half 精度
from transformers import HqqConfig, AutoModelForCausalLM
quant_config = HqqConfig(nbits=4, group_size=64)
quantized_model = AutoModelForCausalLM.from_pretrained(save_dir_or_hfhub, device='cuda', quantization_config=quant_config)
peft_config = LoraConfig(...)
quantized_model = get_peft_model(quantized_model, peft_config)

http://www.ppmy.cn/news/1475800.html

相关文章

各地户外分散视频监控点位,如何实现远程集中实时监看?

公司业务涉及视频监控项目承包搭建,此前某个项目需求是为某林业公司提供视频监控解决方案,需要实现各地视频摄像头的集中实时监看,以防止国家储备林的盗砍、盗伐行为。 公司原计划采用运营商专线连接各个视频监控点位,实现远程视…

计算机图形学入门28:相机、透镜和光场

1.前言 相机(Cameras)、透镜(Lenses)和光场(Light Fields)都是图形学中重要的组成部分。在之前的学习中,都是默认它们的存在,所以现在也需要单独拿出来学习下。 2.成像方法 计算机图形学有两种成像方法,即合成(Synthesis)和捕捉(Capture)。前…

HBase 在统一内容平台业务的优化实践

作者:来自 vivo 互联网服务器团队-Leng Jianyu、Huang Haitao HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库,本文围绕数据库选型以及使用HBase的痛点展开,从四个方面对HBase的使用进行优化,取得了一些…

使用Redis实现签到功能:Java示例解析

使用Redis实现签到功能:Java示例解析 在本博客中,我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法:sign()和signCount(),分别用于用户签到和计算用户当月的签到次数。 1. 签到方法:sign()…

3d为什么删掉模型不能返回?---模大狮模型网

在展览3D模型设计行业中,设计师们经常面临一个关键问题:一旦删除了模型的某些部分,为什么很难或者无法恢复原始状态?这不仅是技术上的挑战,更是设计过程中需要深思熟虑的重要考量。本文将探讨这一问题的原因及其在实际工作中的影…

【图解大数据技术】Spark

【图解大数据技术】Spark Spark简介RDDSpark示例Spark运行原理整体流程DAG 与 stage 为什么Spark比MapReduce快? Spark简介 Spark与MapReduce一样,也是大数据计算框架。Spark相比MapReduce拥有更快的执行速度和更低的编程复杂度。 Spark包括以下几个模…

AI算法17-贝叶斯岭回归算法Bayesian Ridge Regression | BRR

贝叶斯岭回归算法简介 贝叶斯岭回归(Bayesian Ridge Regression)是一种回归分析方法,它结合了岭回归(Ridge Regression)的正则化特性和贝叶斯统计的推断能力。这种方法在处理具有大量特征的数据集时特别有用&#xff…

搜索引擎中的相关性模型

一、什么是相关性模型? 相关性模型主要关注的是query和doc的相关性。例如给定query,和1000个doc,找到哪个doc是好query最相关的。 二、为什么需要相关性模型? 熟悉es的应该都熟悉BM25相关性算法。它是一个很简单的相关性算法。我…

Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制

章节内容 上节我们完成了: ZooKeeper 集群配置ZooKeeper 集群启动ZooKeeper 集群状况查看Follower 和 Leader 节点 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭…

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网:https://goharbor.io/ 点击 Download now 链接,会自动跳转到上述github页面&am…

多旋翼+VR眼镜:10寸FPV穿越机技术详解

FPV(First Person View)穿越机,是指通过第一人称视角来驾驶的无人机,特别强调速度和灵活性,常常用于竞赛、航拍和探索等领域。结合多旋翼设计和VR眼镜,FPV穿越机为用户提供了身临其境的飞行体验。 多旋翼技…

Android人脸解锁源码解析

1 人脸解锁相关类介绍 FaceManager FaceManager是一个私有接口,用于维护FaceService的之间连接。Keyguard通过该接口访问具有自定义界面的人脸识别身份验证硬件。应用无权访问FaceManager,必须改为使用BiometricPrompt。 FaceService 该框架实现用于管…

vscode连接到WSL子系统报错/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/node: not found

子系统单独启动没有问题,vscode启动wsl子系统报错 报错如下: /home/sophia/.vscode-server/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/bin/code-server: 12: /home/sophia/.vscode-server/bin/ea1445cc7016315d0f5728f8e8b12a45dc0a7286/node: n…

git github gitee 三者关系

Git: Git 是一个分布式版本控制系统,用于跟踪源代码的更改。它由 Linus Torvalds 于 2005 年开发,目的是更好地管理 Linux 内核开发。Git 是一个命令行工具,具有以下特点: 分布式:每个开发者的工作目录都是…

B树:深入解析与实战应用

在数据结构和算法的世界中,B树(B-tree)无疑是一颗璀璨的明星。它不仅广泛应用于数据库和文件系统的索引结构中,而且在许多需要高效数据检索的场景中发挥着重要作用。本文将从B树的基本概念入手,通过图文结合的方式&…

海外媒体宣发:尼日利亚媒体通稿报道发布-大舍传媒

尼日利亚媒体概述 尼日利亚,作为非洲人口最多的国家,拥有多元化的媒体环境。在这个国家,你可以找到各种类型的媒体,包括传统媒体和新媒体。传统媒体主要包括报纸、电视和广播,而新媒体则主要是互联网和社交媒体。 尼…

Java+springboot+vue智慧班牌小程序源码,智慧班牌系统可以提供哪些服务?

智慧班牌全套源码,系统技术架构:Javaspringbootvue element-ui小程序电子班牌:Java Android演示正版授权。 智慧班牌在智慧校园的数字化建设中提供了多种服务,这些服务不仅丰富了校园的信息展示方式,还促进了家校互动…

Open-TeleVision——通过VR沉浸式感受人形机器人视野:兼备远程控制和深度感知能力

前言 7.3日,我司七月在线(集AI大模型职教、应用开发、机器人解决方案为一体的科技公司)的「大模型机器人(具身智能)线下营」群里的一学员发了《Open-TeleVision: Teleoperation with Immersive Active Visual Feedback》这篇论文的链接 我当时快速看了一遍&#x…

ASP.NET MVC-制作可排序的表格组件-PagedList版

环境: win10 参考: 学习ASP.NET MVC(十一)——分页 - DotNet菜园 - 博客园 https://www.cnblogs.com/chillsrc/p/6554697.html ASP.NET MVCEF框架实现分页_ef 异步分页-CSDN博客 https://blog.csdn.net/qq_40052237/article/details/106599528 本文略去…

ATE电源芯片测试方案之效率曲线评估芯片性能

在电子产品的设计中,电源管理芯片的效率优化是提升能效和延长使用寿命的关键。因此,探究电源管理芯片在不同工作条件下的效率变化,并通过效率曲线进行可视化表达,对于电源管理技术的进步至关重要。 电源管理芯片的效率曲线 鉴于电…