QLoRA, 它是一种”高效的微调方法”, 以LLama 65B参数模型为例,常规16 bit微调需要超过780GB的GPU内存,而QLoRA可以在保持完整的16 bit微调任务性能的情况下, 将内存使用降低到48GB,即可完成微调。

环境搭建

  • Hardware
    • CPU: Arch x86_64 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz 8Core
    • Mem: 32G
    • GPU: GPU 0: Tesla T4 15109 MB
  • OS
    • CentOS7.9.2009
    • cuda 11.4
  • Software
    • Python3.10 / pip 22.3.1
  • Model
    • [accelerate][1]
    • [peft][2]
    • [alpaca-lora][3]
    • [transformers][4]
    • [qlora][5]
  • Datasets
    • [alpaca_data_zh_51k.json][6]

模型格式转换

将LLaMA原始权重文件转换为Transformers库对应的模型文件格式。

1
2
3
4
python src/transformers/models/llama/convert_llama_weights_to_hf.py \
--input_dir /home/work/virtual-venv/lora-env/data/Llama2 \
--model_size 7B \
--output_dir /home/work/virtual-venv/lora-env/data/hf-llama2-model/

模型微调

1
2
3
4
5
6
7
python qlora.py \
--dataset "/home/work/virtual-venv/lora-env/data/alpaca_data_cleaned_archive.json" \
--model_name_or_path "/home/work/virtual-venv/lora-env/data/hf-llama2-model/" \
--output_dir "/home/work/virtual-venv/lora-env/data/llama-7b-qlora" \
--per_device_train_batch_size 1 \
--max_steps 1000 \
--save_total_limit 2

GPU使用

微调完,生成模型目录

模型权重合并

1
2
3
4
BASE_MODEL=/home/work/virtual-venv/lora-env/data/hf-llama2-model \
LORA_MODEL=/home/work/virtual-venv/lora-env/data/llama-7b-qlora/checkpoint-1000/adapter_model \
HF_CHECKPOINT=/home/work/virtual-venv/lora-env/data/llama-7b-merge \
python export_hf_checkpoint.py

GPU使用

模型合并完成目录

模型推理

1
python inference.py