部署百川大语言模型Baichuan2

news2024/11/25 19:19:10

Baichuan2是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。包含有 7B、13B 的 Base 和 Chat 版本,并提供了 Chat 版本的 4bits 量化。

模型下载

基座模型

Baichuan2-7B-Base

https://huggingface.co/baichuan-inc/Baichuan2-7B-Baseicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-7B-BaseBaichuan2-13B-Base

https://huggingface.co/baichuan-inc/Baichuan2-13B-Baseicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-13B-Base

对齐模型

Baichuan2-7B-Chat

https://huggingface.co/baichuan-inc/Baichuan2-7B-Chaticon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-7B-ChatBaichuan2-13B-Chat

https://huggingface.co/baichuan-inc/Baichuan2-13B-Chaticon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat

对齐模型 4bits 量化

Baichuan2-7B-Chat-4bits

https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bitsicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bitsBaichuan2-13B-Chat-4bits

https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat-4bitsicon-default.png?t=N7T8https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat-4bits

拉取代码

git clone https://github.com/baichuan-inc/Baichuan2

安装依赖

pip install -r requirements.txt

调用方式

Python代码调用

Chat 模型推理方法示例:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig
tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan2-13B-Chat", use_fast=False, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-13B-Chat", device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
model.generation_config = GenerationConfig.from_pretrained("baichuan-inc/Baichuan2-13B-Chat")
messages = []
messages.append({"role": "user", "content": "解释一下“温故而知新”"})
response = model.chat(tokenizer, messages)
print(response)

Base 模型推理方法示范

from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/Baichuan2-13B-Base", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-13B-Base", device_map="auto", trust_remote_code=True)
inputs = tokenizer('登鹳雀楼->王之涣\n夜雨寄北->', return_tensors='pt')
inputs = inputs.to('cuda:0')
pred = model.generate(**inputs, max_new_tokens=64, repetition_penalty=1.1)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))

模型加载指定 device_map='auto',会使用所有可用显卡。

如需指定使用的设备,可以使用类似 export CUDA_VISIBLE_DEVICES=0,1(使用了0、1号显卡)的方式控制。

命令行方式

python cli_demo.py

本命令行工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。

网页 demo 方式

依靠 streamlit 运行以下命令,会在本地启动一个 web 服务,把控制台给出的地址放入浏览器即可访问。

streamlit run web_demo.py

本网页demo工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。

量化方法

Baichuan2支持在线量化和离线量化两种模式。

在线量化

对于在线量化,baichuan2支持 8bits 和 4bits 量化,使用方式和 Baichuan-13B 项目中的方式类似,只需要先加载模型到 CPU 的内存里,再调用quantize()接口量化,最后调用 cuda()函数,将量化后的权重拷贝到 GPU 显存中。实现整个模型加载的代码非常简单,以 Baichuan2-7B-Chat 为例:

8bits 在线量化:

model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
model = model.quantize(8).cuda() 

4bits 在线量化:

model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float16, trust_remote_code=True)
model = model.quantize(4).cuda() 

需要注意的是,在用 from_pretrained 接口的时候,用户一般会加上 device_map="auto",在使用在线量化时,需要去掉这个参数,否则会报错。

离线量化

为了方便用户的使用,baichuan2提供了离线量化好的 4bits 的版本 Baichuan2-7B-Chat-4bits,供用户下载。 用户加载 Baichuan2-7B-Chat-4bits 模型很简单,只需要执行:

model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat-4bits", device_map="auto", trust_remote_code=True)

对于 8bits 离线量化,baichuan2没有提供相应的版本,因为 Hugging Face transformers 库提供了相应的 API 接口,可以很方便的实现 8bits 量化模型的保存和加载。用户可以自行按照如下方式实现 8bits 的模型保存和加载:

model = AutoModelForCausalLM.from_pretrained(model_id, load_in_8bit=True, device_map="auto", trust_remote_code=True)
model.save_pretrained(quant8_saved_dir)
model = AutoModelForCausalLM.from_pretrained(quant8_saved_dir, device_map="auto", trust_remote_code=True)

CPU 部署

Baichuan2 模型支持 CPU 推理,但需要强调的是,CPU 的推理速度相对较慢。需按如下方式修改模型加载的方式:

model = AutoModelForCausalLM.from_pretrained("baichuan-inc/Baichuan2-7B-Chat", torch_dtype=torch.float32, trust_remote_code=True)

模型微调

依赖安装

git clone https://github.com/baichuan-inc/Baichuan2.git
cd Baichuan2/fine-tune
pip install -r requirements.txt

如需使用 LoRA 等轻量级微调方法需额外安装 peft

如需使用 xFormers 进行训练加速需额外安装 xFormers

单机训练

hostfile=""
deepspeed --hostfile=$hostfile fine-tune.py  \
    --report_to "none" \
    --data_path "data/belle_chat_ramdon_10k.json" \
    --model_name_or_path "baichuan-inc/Baichuan2-7B-Base" \
    --output_dir "output" \
    --model_max_length 512 \
    --num_train_epochs 4 \
    --per_device_train_batch_size 16 \
    --gradient_accumulation_steps 1 \
    --save_strategy epoch \
    --learning_rate 2e-5 \
    --lr_scheduler_type constant \
    --adam_beta1 0.9 \
    --adam_beta2 0.98 \
    --adam_epsilon 1e-8 \
    --max_grad_norm 1.0 \
    --weight_decay 1e-4 \
    --warmup_ratio 0.0 \
    --logging_steps 1 \
    --gradient_checkpointing True \
    --deepspeed ds_config.json \
    --bf16 True \
    --tf32 True

轻量化微调

代码已经支持轻量化微调如 LoRA,如需使用仅需在上面的脚本中加入以下参数:

--use_lora True

LoRA 具体的配置可见 fine-tune.py 脚本。

使用 LoRA 微调后可以使用下面的命令加载模型:

from peft import AutoPeftModelForCausalLM
model = AutoPeftModelForCausalLM.from_pretrained("output", trust_remote_code=True)


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1208411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——内存管理(new/delete使用详解)

C内存管理 本章思维导图: 注:本章思维导图对应的xmind文件和.png文件已同步导入至资源 1. C/C内存区域的划分 在C/C中,内存区域主要划分为:内核区域、栈区、内存映射段、堆区、数据段、代码段等区域,如图&#xff1…

mysql数据库报错:1166-Incorrect column name ‘xxx‘

如图,我的报错是:1166-Incorrect column name ‘book_date’,很奇怪,其它的字段都没有报错,但是book_date报错了 报错原因:引入了空字符 可以看到我的鼠标和book_date中间还有一个空格。所以导致该行创建失…

ERP是什么意思?看这一篇就够了!

如果你身在制造业,那么一定对ERP不陌生。天天把ERP挂在嘴边,但你真的了解什么是ERP吗?本篇文章将介绍以下几点:1.ERP是什么意思;2.ERP的功能;3.ERP的落地案例。 一、ERP是什么意思 ERP是企业资源计划&…

5、鸿蒙项目远程调试

一、注册华为账号, 如果是华为手机,并注册了账号可能跳过此步骤,如果使用邮箱注册,此邮箱一定是要正确的邮箱,此处需要使用邮箱获取验证码 注册地址:‎ 1、进入注册页面,输入手机号等信息后点…

Python 爬虫之scrapy 库

文章目录 总的介绍相关模块 总的介绍 Scrapy是一个用于爬取网站数据的开源Python框架。它提供了一套强大而灵活的工具,用于从网站上提取所需的数据。Scrapy是基于Twisted异步网络库构建的,因此可以高效地处理大量的并发请求。以下是Scrapy的一些主要特点…

APUS与深圳大学大数据国家工程实验室联合训练开源中文大模型

日前,APUS与深圳大学大数据系统计算技术国家工程实验室(以下简称“国家工程实验室”)达成战略合作。双方集成各自优势联合开发、开源高性能中文多模态大模型Linly-Chinese-LLaMA-2-70B。该模型将更加适配中文服务场景,计划于2024年…

WebDAV之π-Disk派盘 + RS文件管理器

手机本地文件,网盘、共享文件,如何集中管理?推荐您使用Rs文件管理器,还支持WebDAV等功能。 Rs文件管理器是一款功能强大的手机文件管理器。有强大的本地和网络文件管理功能,让您更方便的管理你的手机、平板、电脑和网盘。可以帮助您轻松管理手机本地存储文件和网络文件,…

keepalived+haproxy配置集群和负载均衡

1、简介 1.1. Keepalived Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备…

19C进入数据库出现问号

问题情况如图所示: 解决方法: su - oracle echo "NLS_LANGAMERICAN_AMERICA.ZHS16GBK;export NLS_LANG" >> ~/.bash_profilesource ~/.bash_profileofile

几种实现子容器水平垂直居中的方法

几种实现子容器水平垂直居中的方法 前言子容器Flexbox 布局position绝对定位transform表格布局 缺点 前言 本文主要讲解有几种方法可以实现容器与子容器水平垂直居中&#xff0c;这些方法的使用方式。那么好&#xff0c;本文正式开始。 子容器 Flexbox 布局 <div style&…

经纬恒润马来西亚工厂正式投入试运行

2023年11月&#xff0c;经纬恒润在中国境外的第一家工厂正式投入试运行。新工厂位于马来西亚&#xff0c;于2023年4月开始筹建&#xff0c;规划总产能500万个汽车电子控制器&#xff0c;主要用于生产新能源汽车电子产品&#xff0c;以满足国外客户日益增长的需求。 经纬恒润马来…

C++编译器对临时对象的优化

思考&#xff1a;我们在构造运算符重载号重载的时候会构造那些函数呐&#xff1f;&#xff1f;&#xff1f; 例子&#xff1a;小dome //该运算重载函数 由 左操作数调用&#xff0c;右操作数当做实参传递给该函数//触发t1t3->t1.operator (t3)Test operator (const Test &a…

印刷设备丝杆选择研磨杆还是冷轧杆好?

在印刷设备中&#xff0c;选择研磨杆还是冷轧杆取决于具体的使用需求和设备要求。以下是关于两种丝杆选择的要点&#xff1a; 1、精度要求&#xff1a;研磨杆通常具有更高的制造精度&#xff0c;能够有效保证印刷设备的精度和稳定性。研磨杆经过精细研磨和校准&#xff0c;具有…

Express基本接口开发-入门学习

前提推荐 任何一个新的知识都是从文档看起&#xff0c;因此express官方文档示例有必要去学习一遍。 推荐看&#xff1a; 推荐入门指南-路由指南-中间件 看完这几个内容之后心里大概知道express有些什么东西了&#xff0c;然后现在就可以去练习了 注意&#xff1a;更多示例-代…

什么猫罐头好吃?猫咪嘎嘎炫的5款猫主食罐头推荐!

想必铲屎官都知道给猫咪长期吃主食罐头的好处了吧&#xff01;主食罐头不仅营养丰富&#xff0c;还能让猫咪顺便补充水分。有时候猫咪食欲不佳&#xff0c;一罐猫主食罐头就能让它们胃口大开呢~ 作为家里有3只猫的铲屎官来说&#xff0c;养猫的这几年可以说血泪史了&#xff0…

GreenCloud VPS 重装系统后无法 SSH 的解决方法

发布于 2023-07-17 在 https://chenhaotian.top/vps/greencloud-ssh-fix/ 解决方法 发工单让客服解决即可。 操作过程 Tu Pham Operator 客服 Hello, We have fixed your problem, please try again! Thanks! Tu Pham, Senior Technician - GreenCloudVPS 17th July 2023…

微信个人号api

简要描述&#xff1a; 登录E云平台 请求URL&#xff1a; http://域名地址/member/login域名地址开发者账号密码:后台系统自助开通 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/json 参数&#xff1a; 参数名必选类型说…

Unity--互动组件(Toggle)

1.组件的可交互 2.组件的过渡状态 3.组件的导航 4.Toggle的属性和参数设置 Toggle 切换控制是一个复选框&#xff0c;允许用户打开或关闭的一个选项&#xff1b; ”Toggle的属性和参数&#xff1a;“” Is on&#xff1a;&#xff08;开启&#xff09; 拨动开关是否从一开…

学生自助查分神秘武器

紧张刺激的期中考试落下帷幕&#xff0c;是不是期待着学生们的成绩揭晓&#xff1f;来&#xff0c;让我这个小红书博主教你&#xff0c;如何利用各种神器&#xff0c;轻松实现学生自助查询成绩&#xff01; 1代码查询&#xff1a; 有些学校已经内置了成绩查询的代码&#xff0…

日常生活小技巧 -- Visual Studio Code 简单使用

讲一下 Visual Studio Code 简单使用&#xff0c;怕以后长时间不用忘记了。 资源管理器 快捷键 ctilshiftE 搜索 快捷键 ctilshiftF 全部折叠 区分大小写、全字匹配 替换、全部替换 切换搜索详细信息 例如排除.h 和 .bat文件 *.h;*.bat源代码管理 暂存更改、放弃更…