Ref: 微调llama 3 — PEFT微调和全量微调_llama3 微调原理-CSDN博客
2. PEFT方法微调llama 3
1、QLoRA 是量化的 LoRA 与 LLMs 的结合。要使用这种方法对 Llama 3 8B 进行微调,我们需要安装
pip install --upgrade bitsandbytes transformers peft accelerate datasets trl
2、然后导入需要的pkgs
import torch, os
from datasets import load_dataset
from peft import LoraConfig, prepare_model_for_kbit_training
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
TrainingArguments,
)
from trl import SFTTrainer
3、如果你拥有较新的GPU,就可以使用bfloat16数据类型以获得更好的训练稳定性,并使用FlashAttention来减少处理长序列时的内存消耗。下面的代码会自动检测GPU是否兼容bfloat16、FlashAttention:
#use bf16 and FlashAttention if supported if torch.cuda.is_bf16_supported(): os.system('pip install flash_attn') compute_dtype = torch.bfloat16 attn_implementation = 'flash_attention_2' # 传统的注意力计算在处理长序列时可能会非常耗时和占用大量内存。 FlashAttention 技术通过优化计算过程和内存使用,使得注意力机制能够更快、更高效地运行 else: compute_dtype = torch.float16 attn_implementation = 'sdpa'动态范围较小,可能在处理非常大或非常小的数值时遇到数值稳定性问题
float16具有5位指数和10位尾数,动态范围小(可表示的数值范围)、精度高;
bfloat16具有8位指数和7位尾数,动态范围大(数值稳定性高)、精度略低(但对于深度学习也足够了)
float32具有1位符号位,8位指数位和23位尾数位,动态范围大,精度更高。# 精度上 b
float16<float16<float32
#占用内存上float16 =bfloat16= 0.5 *float32
4、然后,我们需要初始化并配

1953

被折叠的 条评论
为什么被折叠?



