notebooks/convert_and_quantize_chinese_llama_and_alpaca.ipynb
项目地址:https://github.com/ymcui/Chinese-LLaMA-Alpaca
⚠️ 内存消耗提示(确保刷出来的机器RAM大于以下要求):
💡 提示和小窍门:
温馨提示:用完之后注意断开运行时,选择满足要求的最低配置即可,避免不必要的计算单元消耗(Pro只给100个计算单元)。
!pip install torch==1.13.1
!pip install transformers==4.30.2
!pip install peft==0.3.0
!pip install sentencepiece
!git clone https://github.com/ymcui/Chinese-LLaMA-Alpaca
!git clone https://github.com/ggerganov/llama.cpp
此处使用的是🤗模型库中提供的基模型(已是HF格式),而不是Facebook官方的LLaMA模型,因此略去将原版LLaMA转换为HF格式的步骤。 这里直接运行第二步:合并LoRA权重,生成全量模型权重。可以直接指定🤗模型库的地址,也可以是本地存放地址。
elinas/llama-7b-hf-transformers-4.29 (use at your own risk,我们比对过SHA256和正版一致,但你应确保自己有权使用该模型)ziqingyang/chinese-alpaca-lora-7b
由于要下载模型,所以需要耐心等待一下,尤其是33B模型。
转换好的模型存放在alpaca-combined目录。
如果你不需要量化模型,那么到这一步就结束了,可自行下载或者转存到Google Drive。
!python ./Chinese-LLaMA-Alpaca/scripts/merge_llama_with_chinese_lora_low_mem.py \
--base_model 'elinas/llama-7b-hf-transformers-4.29' \
--lora_model 'ziqingyang/chinese-alpaca-lora-7b' \
--output_type pth \
--output_dir alpaca-combined
完整值:https://github.com/ymcui/Chinese-LLaMA-Alpaca/blob/main/SHA256.md
其中本示例生成的Alpaca-7B的标准SHA256:
使用下述命令评测后发现两者相同,合并无误。
!sha256sum alpaca-combined/consolidated.*.pth
接下来我们使用llama.cpp工具对上一步生成的全量版本权重进行转换,生成4-bit量化模型。
首先对llama.cpp工具进行编译。
!cd llama.cpp && make
这一步,我们将模型转换为ggml格式(FP16)。
alpaca-combined目录挪个位置,把模型文件放到llama.cpp/zh-models/7B下,把tokenizer.model放到llama.cpp/zh-modelsalpaca-combined目录下有tokenizer.model不能混用!)💡 转换13B/33B模型提示:
tokenizer.model不能混用!!cd llama.cpp && mkdir zh-models && mv ../alpaca-combined zh-models/7B
!mv llama.cpp/zh-models/7B/tokenizer.model llama.cpp/zh-models/
!ls llama.cpp/zh-models/
!cd llama.cpp && python convert.py zh-models/7B/
我们进一步将FP16模型转换为4-bit量化模型,此处选择的是新版Q4_K方法。
!cd llama.cpp && ./quantize ./zh-models/7B/ggml-model-f16.bin ./zh-models/7B/ggml-model-q4_K.bin q4_K
至此已完成了所有转换步骤。 我们运行一条命令测试一下是否能够正常加载并进行对话。
FP16和Q4量化文件存放在./llama.cpp/zh-models/7B下,可按需下载使用。
!cd llama.cpp && ./main -m ./zh-models/7B/ggml-model-q4_K.bin --color -p "详细介绍一下北京的名胜古迹:" -n 128