llama.cpp一种在本地CPU上摆设的量化模子(超低配推理llama) ...

打印 上一主题 下一主题

主题 656|帖子 656|积分 1968

0x00 背景

前不久,Meta前脚发布完开源大语言模子LLaMA,
随后就被网友“走漏”,直接放了一个磁力链接下载链接。
然而那些手头没有顶级显卡的朋友们,就只能看看而已了
但是 Georgi Gerganov 开源了一个项目llama.cpp
ggerganov/llama.cpp: Port of Facebook’s LLaMA model in C/C++ (github.com)
次项目的牛逼之处就是没有GPU也能跑LLaMA模子
大大降低的利用成本,本文就是时间如何在我的 mac m1 pro 上面跑起来这个模子
llama.cpp:提供了一种模子量化和在本地CPU上摆设方式

文本先容了如何利用llama.cpp工具将深度学习模子进行量化并在本地CPU上摆设的详细步骤。
以下是详细步骤的表明:
ç
0x01 Step1 情况预备


  • 高版本python 3.10
  1. pip install protobuf==3.20.0
  2. pip install transformers  最新版
  3. pip installsentencepiece (0.1.97测试通过)
  4. pip install peft  (0.2.0测试通过)
  5. pip install git+https://github.com/huggingface/transformers
  6. pip install sentencepiece
  7. pip install peft
复制代码

  • 确保呆板有富足的内存加载完备模子 ,7B模子需要13-15G
  • 下载原版LLaMA模子的权重和tokenizer.model文件
下载参考这个[PR]https://github.com/facebookresearch/llama/pull/73/files
压缩包内文件目录如下(LLaMA-7B为例):
  1. chinese_llama_lora_7b/
  2.   - adapter_config.json                # LoRA权重配置文件
  3.   - adapter_model.bin                # LoRA权重文件
  4.   - special_tokens_map.json        # special_tokens_map文件
  5.   - tokenizer_config.json        # tokenizer配置文件
  6.   - tokenizer.model                # tokenizer文件
复制代码
Step 2: 将原版LLaMA模子转换为HF格式

请利用transformers提供的脚本convert_llama_weights_to_hf.py
将原版LLaMA模子转换为HuggingFace格式。
将原版LLaMA的tokenizer.model放在--input_dir指定的目录,其余文件放在${input_dir}/${model_size}下。 执行以下下令后,--output_dir中将存放转换好的HF版权重。
  1. python src/transformers/models/llama/convert_llama_weights_to_hf.py \
  2.     --input_dir path_to_original_llama_root_dir \
  3.     --model_size 7B \
  4.     --output_dir path_to_original_llama_hf_dir
复制代码

Step 2: 合并LoRA权重,生玉成量模子权重

利用ymcui/Chinese-LLaMA-Alpaca at v2.0 (github.com)内里的scripts/merge_llama_with_chinese_lora.py脚本
对原版LLaMA模子(HF格式)扩充中文词表,并与LoRA权重进行合并,生玉成量模子权重consolidated.*.pth(发起检查生成模子的SHA256值)和配置文件params.json。请执行以下下令:
此处可有两种选择:


  • 输出PyTorch版本权重(.pth文件),利用merge_llama_with_chinese_lora.py脚本

    • 利用llama.cpp工具进行量化和摆设

  • 输出HuggingFace版本权重(.bin文件),利用merge_llama_with_chinese_lora_to_hf.py脚本(感谢@sgsdxzy 提供)

    • 利用Transformers进行推理
    • 利用text-generation-webui搭建界面

以上两个脚本所需参数同等,仅输出文件格式不同。下面以生成PyTorch版本权重为例,先容相应的参数设置。
  1. python scripts/merge_llama_with_chinese_lora.py \
  2.     --base_model path_to_original_llama_hf_dir \
  3.     --lora_model path_to_chinese_llama_or_alpaca_lora \
  4.     --output_dir path_to_output_dir
复制代码
参数说明:

我这里直接利用了Model Hub上的模子,因为很小就直接下载了利用,懒惰下载到本地


  • --base_model:存放HF格式的LLaMA模子权重和配置文件的目录(Step 1生成)
  • --lora_model:这就是你要合并的 LoRA模子 所在目录,也可利用Model Hub上的模子名:ziqingyang/chinese-alpaca-lora-7b或ziqingyang/chinese-llama-lora-7b
  • --output_dir:指定保存全量模子权重的目录,默认为./
  • (可选)--offload_dir:对于低内存用户需要指定一个offload缓存路径
Step 3: llama.cpp 本地快速摆设

大模子在本身的电脑上进行本地摆设(CPU推理)
下载llama.cpp工具https://github.com/ggerganov/llama.cpp
保举利用MacOS和Linux体系,Windows好像有bug
运行前请确保:

  • 模子量化过程需要将未量化模子全部载入内存,请确保有富足可用内存(7B版本需要13G以上)
  • 加载利用Q4量化后的模子时(比方7B版本),确保本机可用内存大于4-6G(受上下文长度影响)
  • 体系应有make(MacOS/Linux自带)或cmake(Windows需自行安装)编译工具
  • 保举利用Python 3.9或3.10编译运行llama.cpp工具(因为sentencepiece还不支持3.11)
1. 下载和编译llama.cpp

运行以下下令对llama.cpp项目进行编译,生成./main和./quantize二进制文件。
  1. git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp && make
复制代码
2.生成量化版本模子

把合并模子(选择生成.pth格式模子)中末了一步生成的tokenizer.model文件放入xx-models目录下,模子文件consolidated.*.pth和配置文件params.json放入xx-models/7B目录下。
请留意LLaMA和Alpaca的tokenizer.model不可混用
目录布局类似:
  1.    - 7B/
  2.      - consolidated.00.pth
  3.      - params.json
  4.    - tokenizer.model
复制代码
将上述.pth模子权重转换为ggml的FP16格式,生成文件路径为xx-models/7B/ggml-model-f16.bin。
  1. python3 ./llama.cpp/convert-pth-to-ggml.py ./xx_model/7B/ 1
复制代码

进一步对FP16模子进行Q4量化,生成量化模子文件路径为zh-models/7B/ggml-model-q4_0.bin。
  1. ./quantize ./xx-models/7B/ggml-model-f16.bin ./xx-models/7B/ggml-model-q4_0.bin 2
复制代码

3.加载并启动模子

运行./main二进制文件,-m下令指定Q4量化模子(也可加载ggml-FP16的模子)。以下是解码参数示例:
  1. ./main -m xx-models/7B/ggml-model-q4_0.bin --color -f prompts/alpaca.txt -ins -c 2048 --temp 0.2 -n 256 --repeat_penalty 1.3
复制代码

在提示符 > 之后输入你的prompt,command+c中断输出,多行信息以\作为行尾。如需查看帮助和参数说明,请执行./main -h下令。
  1. 重要参数说明:
  2. -ins 启动类ChatGPT的对话交流模式
  3. -f 指定prompt模板,alpaca模型请加载prompts/alpaca.txt
  4. -c 控制上下文的长度,值越大越能参考更长的对话历史
  5. -n 控制回复生成的最大长度
  6. --repeat_penalty 控制生成回复中对重复文本的惩罚力度
  7. --temp 温度系数,值越低回复的随机性越小,反之越大
  8. --top_p, top_k 控制采样的相关参数
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表