在ChatGLM大模型上利用LoRA方法进行小参数学习,训练语料库选择中文的alpaca-zh
本仓库是使用LoRA复现清华大学+智谱AI的ChatLM语言模型结果的代码。大部分参考ChatGLM-Tuning,感谢大佬
Paper:
bitsandbytes==0.37.0
accelerate==0.17.1
protobuf>=3.19.5,<3.20.1
transformers==4.27.1
icetk
cpm_kernels==1.0.11
torch>=1.13.1
tensorboard
datasets==2.10.1
git+https://github.com/huggingface/peft.git # 最新版本 >=0.3.0.dev0
或者直接进入工程目录,pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
另:CUDA版本11.3(建议>11.6),python版本3.8,显卡3090-24G
python cover_alpaca2jsonl.py --data_path data/alpaca-zh.json --save_path data/alpaca-zh.jsonl
python tokenize_dataset_rows.py --jsonl_path data/alpaca-zh.jsonl --save_path data/alpaca-zh --max_seq_length 200
其中
--jsonl_path
微调的数据路径, 格式jsonl, 对每行的['context']和['target']字段进行encode--save_path
输出路径--max_seq_length
样本的最大长度
若网络情况良好,请直接使用:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", load_in_8bit=True, trust_remote_code=True, device_map="auto")
会自动开始下载模型,下载完的模型会放在~/.cache/huggingface中
若网络情况不佳,可以手动下载模型,并修改model和tokenizer的路径 从THUDM/chatglm-6b上下载所有的模型文件放到glm_models文件夹中,约13.5GB,请预留足够的磁盘空间。
tokenizer = AutoTokenizer.from_pretrained("./glm_models", trust_remote_code=True)
model = AutoModel.from_pretrained("./glm_models", load_in_8bit=True, trust_remote_code=True, device_map="auto")
python finetune.py --dataset_path data/alpaca-zh --lora_rank 8 --per_device_train_batch_size 6 --gradient_accumulation_steps 1 --max_steps 20380 --save_steps 1000 --save_total_limit 2 --learning_rate 1e-4 --fp16 --remove_unused_columns false --logging_steps 50 --output_dir output
大概训练需要10个小时左右,训练完成后,会在output文件夹下生成output/adapter_model.bin文件,如果想跳过训练步骤,可以直接使用这个文件进行推理。
请执行infer.ipynb
推理结果
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(4).half().cuda()
或者
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half().cuda()
量化等级 | 最低 GPU 显存(推理) | 最低 GPU 显存(高效参数微调) |
---|---|---|
FP16(无量化) | 13 GB | 14 GB |
INT8 | 8 GB | 9 GB |
INT4 | 6 GB | 7 GB |