LLM 入门与实践(三)Baichuan2 部署与分析

本文截取自20万字的《PyTorch实用教程》(第二版),敬请关注:《Pytorch实用教程》(第二版)《Pytorch实用教程》(第二版)无论是零基础入门,还是CV、NLP、LLM项目应用,或是进阶工程化部署落地,在这里都有。相信在本书的帮助下,读者将能够轻松掌握 PyTorch 的使用,成为一名优秀的深度学习工程师。 - TingsongYu/PyTorch-Tutorial-2ndicon-default.png?t=N7T8https://github.com/TingsongYu/PyTorch-Tutorial-2nd

前言

baichuan作为首批开源的国产大语言模型,具备7B和13B两个尺寸,在多个子任务上有出色表现,本节就来了解baichuan系列大模型。

Baichuan 简介

Baichuan开源大模型由百川智能研发,目前最新开源版本为Baichuan2,闭源版本为Baichuan3。

百川智能成立于2023年4月10日,由前搜狗公司CEO王小川创立。公司以帮助大众轻松、吾普惠地获取世界知识和专业服务为使命,致力于通过语言AI的突破,构建中国最优秀的大模型底座。

Baichuan2提供7B,13B两个尺寸,具体如下

基座模型对齐模型对齐模型 4bits 量化
7BBaichuan2-7B-BaseBaichuan2-7B-ChatBaichuan2-7B-Chat-4bits
13BBaichuan2-13B-BaseBaichuan2-13B-ChatBaichuan2-13B-Chat-4bits

更多关于Baichuan的信息,可查阅:

  • 公司首页:百川大模型-汇聚世界知识 创作妙笔生花-百川智能

  • github: https://github.com/baichuan-inc

  • 技术报告:https://arxiv.org/abs/2309.10305

本地部署安装

第一步,下载下载baichuan2代码

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

第二步,下载7B-in4模型权重

git clone https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bits
(也可以通过github desktop下载)

第三步,环境配置

根据Baichuan2中的 requirements.txt进行安装,其中pytorch环境自行配置,要求 pytorch ≥ 2.x

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

第四步,报错处理

根据官方的教程,安装了requirements.txt后报错,通常会报错:

init model ...
A matching Triton is not available, some optimizations will not be enabled
Traceback (most recent call last):File "C:\Users\yts32\anaconda3\envs\pt220\lib\site-packages\xformers\__init__.py", line 55, in _is_triton_availablefrom xformers.triton.softmax import softmax as triton_softmax  # noqaFile "C:\Users\yts32\anaconda3\envs\pt220\lib\site-packages\xformers\triton\softmax.py", line 11, in <module>import triton
ModuleNotFoundError: No module named 'triton'
C:\Users\yts32\anaconda3\envs\pt220\lib\site-packages\bitsandbytes\cuda_setup\main.py:166: UserWarning: Welcome to bitsandbytes. For bug reports, please run
​
python -m bitsandbytes
​

如果是linux,可以尝试

pip install bitsandbytes==0.41.1 -q
pip install accelerate==0.25.0 -q
参考自:https://github.com/baichuan-inc/Baichuan2/issues/52

如果是windows,可以尝试,先下载bitsandbytes-windows版的0.41.1的安装包,再手动安装。原因是通过pip install bitsandbytes,只能获得linux的,而windows的目前最高版本时0.37.x,因此需要手动下载安装。

https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl 
pip install bitsandbytes-0.41.1-py3-none-win_amd64.whl
参考自:https://github.com/baichuan-inc/Baichuan2/issues/35

如果报错:TypeError: 'NoneType' object is not subscriptable

pip install accelerate==0.25.0 -q

如果报错:auto-gptq 0.7.1 requires accelerate>=0.26.0, but you have accelerate 0.25.0 which is incompatible.

GitHub - AutoGPTQ/AutoGPTQ: An easy-to-use LLMs quantization package with user-friendly apis, based on GPTQ algorithm.

pip install auto-gptq==0.6

第五步,配置路径

model, model.generation_config, tokenizer三个的路径需要配置

def init_model():print("init model ...")model = AutoModelForCausalLM.from_pretrained(r"G:\04-model-weights\Baichuan2-7B-Chat-4bits",torch_dtype=torch.float16,device_map="auto",trust_remote_code=True)model.generation_config = GenerationConfig.from_pretrained(r"G:\04-model-weights\Baichuan2-7B-Chat-4bits")tokenizer = AutoTokenizer.from_pretrained(r"G:\04-model-weights\Baichuan2-7B-Chat-4bits",use_fast=False,trust_remote_code=True)return model, tokenizer

第六步,运行cli_demo.py

C:\Users\yts32\anaconda3\envs\chatglm\python.exe D:\github_desktop\Baichuan2\cli_demo.py 
init model ...bin C:\Users\yts32\anaconda3\envs\chatglm\lib\site-packages\bitsandbytes\libbitsandbytes_cuda121.dll
欢迎使用百川大模型,输入进行对话,vim 多行输入,clear 清空历史,CTRL+C 中断生成,stream 开关流式生成,exit 结束。用户:你好Baichuan 2:
你好今天我能为您提供什么帮助?用户:你是谁Baichuan 2:我是百川大模型,是由百川智能的工程师们创造的大语言模型,我可以和人类进行自然交流、解答问题、协助创作,帮助大众轻松、普惠的获得世界知识和专业服务。如果你有任何问题,可以随时向我提问

模型结构分析

Baichuan2的模型结构可通过如下UML类图了解,其他更多模型结构可以参考前两节Qwen和ChatGLM的结构分析。

Prompt 结构分析

baichuan2的Prompt结构是经典的三角色设计,包括system, user, assistant。

在示例代码中,并没有给出system的预设,需要分析源代码后才看到system可通过messages来维护。bichuan2中的messages等同于history的作用,用于记录历史对话信息。

一个真实的messages如下:

[{'content': '你好', 'role': 'user'}, 
{'content': '你好今天我能为您提供什么帮助?', 'role': 'assistant'},
{'content': '今天天气如何', 'role': 'user'}]

特殊token处理

不同的角色之间,通常用特殊token标记,在baichun2代码中,可通过generation_config中看到特殊token的index,但对应的text没有显示给出。

\.cache\huggingface\modules\transformers_modules\Baichuan2-7B-Chat-4bits\generation_utils.py
# 以下代码是组装历史对话的代码段,首先判断当前角色,然后获取角色分隔token
for message in round:if message["role"] == "user":round_tokens.append(model.generation_config.user_token_id)else:round_tokens.append(model.generation_config.assistant_token_id)

单轮推理长度限制

模型支持的上下文是4K,这里包括输入+输出=4K,在单轮对话时,会对输入长度做限制。

首先,预留2K是用于本轮对话的输出,因此输入的最大长度为4K-2K=2K。详细代码如下:

max_input_tokens = model.config.model_max_length - max_new_tokens
input_tokens = input_tokens[-max_input_tokens:]  # truncate left其中:
model.config.model_max_lengt = 4096
max_new_tokens = 2048
参考自:C:\Users\yts32\.cache\huggingface\modules\transformers_modules\Baichuan2-7B-Chat-4bits\generation_utils.py

对于输入超过2K的情况,是会被向左截断。

显存与上下文长度分析

百川官方给出了字符串长度与token之间的换算的比例,一般情况下Baichuan2大模型1个token约等于1.5个中文汉字。详见产品定价:Docs

通过分析发现:

  1. 在未进行对话时,显存仅占用5.3GB

  2. 第一次对话时,显存立即飙升到6.4GB

  3. 前2000字符显存消耗不高,2000之后显存消耗激增

  4. 超过3500字符后,同样出现了截断(参考Qwen、ChatGLM的分析)

统计代码如下,完整代码cli_demo.py位于github

conversation_length = sum([len(content['content']) for content in messages])
import subprocess
import json
result = subprocess.run(['gpustat', '--json'], stdout=subprocess.PIPE)
output = result.stdout.decode()
data = json.loads(output)
used_memory = data['gpus'][0]['memory.used']
f.writelines("{}, {}\n".format(conversation_length, used_memory))
f.flush()

小结

本节对Baichuan2模型进行了本地部署安装,并分析模型结构、prompt结构、推理上限机制、显存分析等内容,有助于进一步理解LLM原理。

下一小节,分析Yi。

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

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

相关文章

Python协程的作用

过分揣测别人的想法&#xff0c;就会失去自己的立场。大家好&#xff0c;当代软件开发领域中&#xff0c;异步编程已成为一种不可或缺的技术&#xff0c;用于处理大规模数据处理、高并发网络请求、实时通信等应用场景。而Python协程&#xff08;Coroutine&#xff09;作为一种高…

【译】MySQL 组复制 - 部分网络故障对性能的影响

原文地址&#xff1a;MySQL Group Replication – Partial Network Failure Performance Impact 在这个由两部分组成的博客系列中&#xff0c;我想介绍一些使用组复制的故障转移场景。在第一部分中&#xff0c;我将讨论我在撰写这些文章时发现的一种有趣的行为和性能下降。在第…

C#学习指南:重要内容与实用技巧

学习C#编程是一段充满挑战但又非常充实的旅程。以下是我在学习过程中积累的一些经验&#xff0c;希望能对大家有所帮助。 一、掌握基础概念 类及其成员 C#中的类是编程的基础模块。理解类的结构、属性、方法和构造函数是至关重要的。每个类都有其特定的功能&#xff0c;学会如…

力扣HOT100 - 169. 多数元素

解题思路&#xff1a; 有点类似于Boyer-Moore 投票算法&#xff0c;但更加形象。 class Solution {public int majorityElement(int[] nums) {int winner nums[0];int cnt 1;for (int i 1; i < nums.length; i) {if (winner nums[i]){cnt;} else if (cn…

景源畅信数字:抖音小店新手该怎么做?

在数字化时代的浪潮中&#xff0c;抖音不仅仅是一个分享短视频的平台&#xff0c;更是一个充满潜力的电商平台。对于想要进入这个领域的朋友们来说&#xff0c;开设一家抖音小店无疑是一个既激动又迷茫的起点。那么&#xff0c;作为新手&#xff0c;该如何在这个全新的舞台上立…

【Linux】信号之信号的产生详解

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误的话&#xff0c;还望指出&…

vue核心模块源码解析

响应式原理 Object.definePropertysetterProxy var count 1 var state {} Object.defineProperty(state , count,{get(){return count},set(val){count val} }) //弊端&#xff1a;不能主动监听到对象属性的新增或者删除&#xff0c;add/deleteref和reactive 声明响应式数…

翻译《The Old New Thing》- How do I mark a shortcut file as requiring elevation?

How do I mark a shortcut file as requiring elevation? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071219-00/?p24103 Raymond Chen 2007年12月19日 如何将快捷方式标记为需要提升权限 简要 文章介绍了如何通过设置SLDF_RUNAS_US…

许冉直播不治本,京东需要刘强东

图片&#xff5c;影视剧《纸牌屋》剧照 ©自象限原创 作者丨艾AA 编辑丨薛黎 这届618&#xff0c;消费者的热情还未显现&#xff0c;商家的怒火先爆发了。 5月21日京东618开幕次日&#xff0c;多家图书社抵制618图书大促登上了热搜。此次争议与去年双十一京东采销与电…

移动端h5适配方案:媒体查询、编写js、lib-flexible、vw、rem和vw单位换算

文章目录 各种方案第二种&#xff1a;动态设置html的font-size媒体查询mediajs 第三种&#xff1a;vw方案 rem、vw单位换算手动根据设计稿进行计算lessvs code 插件 各种方案 1&#xff09;百分比设置&#xff08;X&#xff09;【百分比很难统一&#xff0c;不推荐】 2&#xf…

安卓高级控件(下拉框、列表类视图、翻页类视图、碎片Fragment)

下拉框 此小节介绍下拉框的用法以及适配器的基本概念&#xff0c;结合对下拉框Spinner的使用说明分别阐述数组适配器ArrayAdapter、简单适配器SimpleAdapter的具体用法与展示效果。 下拉框控件Spinner Spinner是下拉框控件&#xff0c;它用于从一串列表中选择某项&#xff0…

Java与GO语言对比分析

你是不是总听到go与java种种对比&#xff0c;其中在高并发的服务器端应用场景会有人推荐你使用go而不是 java。 那我们就从两者运行原理和基本并发设计来对比分析&#xff0c;看看到底怎么回事。 运行原理对比 java java 中 jdk 已经帮我们屏蔽操作系统区别。 只要我们下载并…

Android中华为手机三态位置权限申请理解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到教程 前言&#xff1a; 使用的华为MATE 20,Android10的系统。 <!--精准定位权限&#xff0c;如&#xff1a;…

“闻起来有股答辩的味道”,答辩到底是什么味?

“闻起来有股答辩的味道”&#xff0c;答辩到底是什么味&#xff1f; 一位名叫“小鸡全家桶”的作者虚构了这样一个学校故事&#xff0c;故事说&#xff0c;由于学生的考试试卷印刷得特别模糊&#xff0c;导致里面的插图根本看不清&#xff0c;学生感到懵逼&#xff0c;监考老…

【区块链】智能合约漏洞测试

打开Ganache vscode打开智能合约漏洞工程 合约内容 pragma solidity >0.8.3;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;emit Balance(balances[msg.sender]);}function with…

深度学习之基于Tensorflow卷积神经网络(CNN)实现猫狗识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 在人工智能和深度学习的热潮中&#xff0c;图像识别是一个备受关注的领域。猫狗识别作为图像识…

权限维持--windows

隐藏文件 ①文件属性隐藏 如何排查&#xff1a; 使用dir命令无法看到有特殊属性的文件需使用/a ②真隐藏 相当于给原本的文件增加系统文件属性、存档文件属性、只读文集属性、隐藏文件属性 如何排查&#xff1a; 取消受保护的操作系统文件 ③利用ADS隐藏 使用数据流 echo &…

Docker(四) 文件和网络

1 Dockerfile 1.1 什么是Dockerfile Dockerfile是一个文本文件&#xff0c;包含一系列命令&#xff0c;这些命令用于在 Docker 镜像中自动执行操作。Dockerfile 定义了如何构建 Docker 镜像的步骤和所需的操作。 Dockerfile 中包含的命令可以设置和定制容器的环境&#xff0c;…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接&#xff1a;1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

2024年5月份最新独角数卡使用USDT详细小白教程

直观配套视频教程 2024年5月份最新独角数卡安装及USDT使用详细小白教程 1、创建服务器 Centos或者Ubuntu2、宝塔面板开心版安装寶塔 Linux 面版 8.0.5 開心版 - 2024年1月12日 - 开心专区 - 异次元 - Powered by Discuz!Centos安装命令&#xff08;默认安装是 8.0.1 直接在线升…