Chinese-LLaMA-Alpaca代码实战

news/2024/11/25 21:29:50/

文章目录

  • 微调chinese-alpaca
  • 部署llama.cpp
  • 将FP16模型量化为4-bit

项目地址: https://github.com/ymcui/Chinese-LLaMA-Alpaca

微调chinese-alpaca

本项目基于中文数据

  • 开源了使用中文文本数据预训练的中文LLaMA大模型(7B、13B)
  • 开源了进一步经过指令精调的中文Alpaca大模型(7B、13B)

使用text-generation-webui搭建界面
接下来以 text-generation-webui 工具为例,介绍无需合并模型即可进行本地化部署的详细步骤。
1、先新建一个conda环境。

conda create -n textgen python=3.10
conda activate textgen
pip install torch torchvision torchaudio

/2、下载chinese-alpaca-lora-7b权重:https://drive.google.com/file/d/1JvFhBpekYiueWiUL3AF1TtaWDb3clY5D/view?usp=sharing

# 克隆text-generation-webui
git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui
pip install -r requirements.txt# 将下载后的lora权重放到loras文件夹下
ls loras/chinese-alpaca-lora-7b
adapter_config.json  adapter_model.bin  special_tokens_map.json  tokenizer_config.json  tokenizer.model

三种方式下载

  • 通过transformers-cli下载HuggingFace格式的llama-7B模型文件
transformers-cli download decapoda-research/llama-7b-hf --cache-dir ./llama-7b-hf
  • 通过snapshot_download下载:
pip install huggingface_hub
python
from huggingface_hub import snapshot_download
snapshot_download(repo_id="decapoda-research/llama-7b-hf", cache_dir="./llama-7b-hf")
  • 通过git命令进行下载(需要提前安装git-lfs)
git clone https://huggingface.co/decapoda-research/llama-7b-hf

我这里用的第二种。

# 将HuggingFace格式的llama-7B模型文件放到models文件夹下
ls models/llama-7b-hf
pytorch_model-00001-of-00002.bin pytorch_model-00002-of-00002.bin config.json pytorch_model.bin.index.json generation_config.json
# 复制lora权重的tokenizer到models/llama-7b-hf下
cp loras/chinese-alpaca-lora-7b/tokenizer.model ~/text-generation-webui/models/llama-7b-hf/models--decapoda-research--llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348/cp loras/chinese-alpaca-lora-7b/special_tokens_map.json ~/text-generation-webui/models/llama-7b-hf/models--decapoda-research--llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348/cp loras/chinese-alpaca-lora-7b/tokenizer_config.json ~/text-generation-webui/models/llama-7b-hf/models--decapoda-research--llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348/
# 修改/modules/LoRA.py文件,大约在第28行
shared.model.resize_token_embeddings(len(shared.tokenizer))
shared.model = PeftModel.from_pretrained(shared.model, Path(f"{shared.args.lora_dir}/{lora_names[0]}"), **params)
# 接下来就可以愉快的运行了,参考https://github.com/oobabooga/text-generation-webui/wiki/Using-LoRAs
# python server.py --model llama-7b-hf --lora chinese-alpaca-lora-7b
# 使用int8
python server.py --model llama-7b-hf/models--decapoda-research--llama-7b-hf/snapshots/5f98eefcc80e437ef68d457ad7bf167c2c6a1348/ --lora chinese-alpaca-lora-7b --load-in-8bit

报错
RuntimeError: Error(s) in loading state_dict for PeftModelForCausalLM:
size mismatch for base_model.model.model.embed_tokens.weight: copying a param with shape torch.Size([49954, 4096]) from checkpoint, the shape in current model is torch.Size([32000, 4096]).
size mismatch for base_model.model.lm_head.weight: copying a param with shape torch.Size([49954, 4096]) from checkpoint, the shape in current model is torch.Size([32000, 4096]).

解决(用下面代码进行替换):
shared.model.resize_token_embeddings(49954)
assert shared.model.get_input_embeddings().weight.size(0) == 49954
shared.model = PeftModel.from_pretrained(shared.model, Path(f"{shared.args.lora_dir}/{lora_names[0]}"), **params)

设置下对外开放
To create a public link, set share=True in launch().

实验效果:生成的中文较短

示例:

below is an instruction rthat destribes a task.
write a response that appropriately conpletes the request.
### Instruction:
我得了流感,请帮我写一封请假条
### Response:

在这里插入图片描述

部署llama.cpp

下载合并后的模型权重:

  • Colab notebook:https://colab.research.google.com/drive/1Eak6azD3MLeb-YsfbP8UZC8wrL1ddIMI?usp=sharing
  • 或者notebook/文件夹下的ipynb文件:https://github.com/ymcui/Chinese-LLaMA-Alpaca/blob/main/notebooks/convert_and_quantize_chinese_llama.ipynb

将合并后的模型权重下载到本地,然后传到服务器上。

# 下载项目
git clone https://github.com/ggerganov/llama.cpp
# 编译
cd llama.cpp && make
# 建一个文件夹
cd llama.cpp && mkdir zh-models && mkdir 7B

将alpaca-combined下的文件都放到7B目录下后,执行下面的操作

mv llama.cpp/zh-models/7B/tokenizer.model llama.cpp/zh-models/
ls llama.cpp/zh-models/

会显示:7B tokenizer.model

执行转换过程

python convert.py zh-models/7B/

会生成ggml-model-f16.bin

将FP16模型量化为4-bit

我们进一步将FP16模型转换为4-bit量化模型。

./quantize ./zh-models/7B/ggml-model-f16.bin ./zh-models/7B/ggml-model-q4_0.bin 2

可按需使用

./main -m ./zh-models/7B/ggml-model-f16.bin --color -f ./prompts/alpaca.txt -p "详细介绍一下北京的名胜古迹:" -n 512

http://www.ppmy.cn/news/85421.html

相关文章

java boot项目配置方式优先级

java boot项目认识一下三种格式的配置文件 中 我们说的 boot项目中支持三种配置文件格式 分别是 application.properties application.yml application.yaml 其中 我们也说推荐大家用application.yml格式的 那么 问题就来了 如果三个文件都存在于 resources目录下 系统会听谁的…

读财报丨产品收入增长近70%,百济神州已成功切换成长驱动模式?

5月12日,百济神州(北京)生物科技有限公司(下称“百济神州”)公布2023年第一季度业绩报告。从数据来看,延续了2022年的良好增长态势,实现营业收入30.66亿元,同比增长57%,而…

AntDB-S流式数据库体验

本文作者:彭冲老师,上一篇彭老师体验了亚信刚发布的社区版AntDB-T数据库,文章如下: AntDB-T交易型数据库体验 本文继续体验AntDB-S流式数据库的,AntDB-S目前还未开放社区版,可以联系AntDB小助手进行体验。…

java基于springboot应急科研科技资源管理系统

应急资源管理系统的开发,主要有管理员和用户两个角色。 管理员角色计划设计的功能有密码信息管理、个人信息管理、用户信息管理、应急资源管理、留言信息管理等模块,管理员可以对用户、应急资源、留言等信息进行管理,可以选择添加、修改、删除…

SpringCloud Sentinel集成Gateway和实时监控

目录 1 Sentinel集成Gateway1.1 Sentinel对网关支持1.2 GateWay集成Sentinel 2 Sentinel控制台2.1 Sentinel控制台安装2.2 接入控制台2.3 可视化管理2.3.1 实时监控2.3.2 流控规则2.3.3 降级规则2.3.4 热点数据 1 Sentinel集成Gateway 参看: https://github.com/al…

java 类文件结构详解

Java类文件是Java源代码经过编译后生成的二进制文件,它包含了Java类的结构和信息。下面是Java类文件的详细结构介绍: 魔数(Magic Number): Java类文件的开头四个字节是魔数,用于标识文件类型。魔数值为0x…

论述安科瑞智慧消防在高层建筑信息化管理中的作用

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 【摘要】为了顺应时代的发展,我们做好信息化时代下的“智慧消防”工作,为“智慧城市”的建设奠定良好的基础。本文主要就“智慧消防”的含义、对如高层建筑等单位进行信息化“智慧消防”管理&a…

AJAX 教程---菜鸟教程

文章目录 AJAX 简介AJAX 实例XHR 创建对象XHR 请求向服务器发送请求GET 还是 POST?GET 请求POST 请求url - 服务器上的文件 XHR 响应responseText 属性responseXML 属性 XHR readyState使用回调函数 AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下&#xff0…