使用LLaMA-Factory进行模型量化

在这里插入图片描述

使用LLaMA-Factory进行模型量化

以下实验基于微调后模型进行量化。针对基座模型的直接量化,可以使用与部署中使用的数据类型紧密匹配的公开通用数据集作为校准数据集量化(任意数据集)该部分可以参考使用llm-compressor。

量化方法

LLaMA-Factory 支持多种量化方法,包括:

  • AQLM
  • AWQ
  • GPTQ
  • QLoRA

  • GPTQ 等后训练量化方法(Post Training Quantization)是一种在训练后对预训练模型进行量化的方法。

量化导出

使用GPTQ和AWQ等后训练量化方法对模型进行量化时,需要进行以下步骤:(即使直接使用AutoAWQ和AutoGPTQ对qwen进行量化都需要进行以下步骤)

  1. 对模型进行微调
  2. 构建校准数据集
  3. 将微调后模型进行量化导出

以下是量化导出时使用的yaml文件以及其中的基础参数

### examples/merge_lora/llama3_gptq.yaml 
### model
model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct #预训练模型的名称或路径
template: llama3 #模型模板

### export
export_dir: models/llama3_gptq    # 导出路径
export_quantization_bit: 4    #量化位数[8, 4, 3, 2]
export_quantization_dataset: data/c4_demo.json   #量化校准数据集
export_size: 2    #最大导出模型文件大小
export_device: cpu   #导出设备,还可以为cuda
export_legacy_format: false  #是否使用旧格式导出

当使用参数export_quantization_bit时直接使用auto-gptq

校准数据集

格式需要严格参考以下形式:
在这里插入图片描述

  • 使用训练集进行构造
  • 构造方式:instruction+input+ouput=>text
  • 校准数据集不用很大,默认只会用 128 个样本
  • 格式转换代码路径:/project/LLaMA-Factory_test2/datasets_convert_quanti_datasets.py

llamafactory对校准数据集进行采样时,如果样本长度太短会爆出以下错误:
在这里插入图片描述

解决方法:设置export_quantization_maxlen稍小一些即可

### model
model_name_or_path: model_path_dir
template: qwen

### export
export_dir: save_dir
export_quantization_bit: 4
export_quantization_maxlen: 300
export_quantization_dataset: /datasets/demo.json
export_size: 2
export_device: cuda
export_legacy_format: false

注意事项

由于GPU硬件支持参数精度有规定,在部署量化模型时需要考虑设备性能。

  1. nvidia服务器硬件支持精度参数:
    https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.html#hardware-precision-matrix

  2. GPU计算能力:
    https://developer.nvidia.com/cuda-gpus#collapseOne

### LLaMA-Factory 参数配置说明 #### 模型加载与路径设置 当点击模型名称时,会自动弹出可选择的模型列表,同时显示对应于 Hugging Face 上的模型标识符。然而,通常的做法是从 Hugging Face 或 ModelScope 将模型参数下载至本地,并在模型路径中指定该本地文件的绝对地址,例如 `C:\Users\chen\Desktop\copy\chatglm3`[^2]。 #### 微调方法及其应用 对于大规模语言模型而言,采用 LoRA(低秩适配)是一种有效的微调策略。这种方法允许在保持原有预训练模型结构不变的前提下,仅调整新引入的小规模网络层中的参数。这不仅降低了计算资源的需求,而且能够有效减少约三分之二的显存占用率,特别适用于像 GPT-3 这样拥有庞大参数量的语言模型[^1]。 #### 配置选项详解 - **量化等级**:决定如何压缩模型权重以节省内存空间并提高推理速度。 - **量化方法**:具体实现上述压缩的技术手段。 - **提示模板**:定义输入给定文本的形式以及期望输出的内容样式。 - **RoPE 插值方法**:用于处理旋转位置编码的一种技术,有助于增强长序列建模能力。 - **加速方式**:探索不同硬件平台下的性能优化方案,如 GPU 加速等。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer model_path = "path/to/local/model" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained(model_path) # 应用LoRA微调 from peft import get_peft_model, LoraConfig config = LoraConfig( r=8, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", ) peft_model = get_peft_model(model, config) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值