书生大模型实战营 重要笔记汇总

书生大模型实战营 重要笔记汇总

算力平台:
https://studio.intern-ai.org.cn/console/dashboard

闯关文档:
https://aicarrier.feishu.cn/wiki/XBO6wpQcSibO1okrChhcBkQjnsf

工具一类

端口映射+远程链接:

ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no

ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 47425


这条SSH命令用于创建一个安全的隧道,将本地计算机上的一个端口转发到远程服务器上的相同端口。下面是命令中各个部分的解释:- `ssh`: 这是启动SSH客户端的命令。- `-C`: 启用压缩,这有助于加快传输速度,特别是在网络条件不佳的情况下。- `-N`: 告诉SSH不执行远程命令,仅建立隧道。- `-g`: 允许远程主机连接到本地转发的端口。默认情况下,SSH只允许本地机器上的客户端连接到转发端口。- `-L 6006:127.0.0.1:6006`: 这是本地端口转发的参数。- `-L`: 指定本地端口转发。- `6006`: 本地机器上监听的端口号。- `127.0.0.1:6006`: 远程机器上的目标地址和端口号。这里的意思是将本地的6006端口转发到远程机器的127.0.0.1地址上的6006端口。- `root@ssh.intern-ai.org.cn`: 这是要连接的远程服务器的用户名和主机名或IP地址。在这个例子中,用户名是`root`,主机名是`ssh.intern-ai.org.cn`。- `-p`: 指定远程服务器上的SSH端口号。你需要将其替换为实际的端口号,例如`-p 22`。- `47425`: 这是要连接的远程服务器上SSH服务监听的端口号,通常默认为22 这条命令的完整形式可能是这样的:ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 22当你运行这个命令时,它会在你的本地计算机上打开6006端口,并将其转发到远程服务器上的6006端口。这意味着,如果你在本地计算机上访问`localhost:6006`,实际上流量会被转发到远程服务器上的6006端口。这种类型的隧道通常用于以下情况:- 当你想要安全地访问远程服务器上的Web应用程序或服务时。
- 当远程服务器上的服务没有直接暴露在互联网上,而是通过SSH隧道来访问时。请注意,这个命令需要你有权限访问远程服务器,并且远程服务器上的SSH服务需要允许端口转发。此外,本地计算机上的6006端口在运行命令之前应该是空闲的,没有被其他应用程序占用。

软连接

ln [参数][源文件或目录][目标文件或目录]
-s:创建软链接(符号链接)也是最常用的;、

TMUX 是一个终端多路复用器

tmux 是一个开源的终端复用器,由 Tom Lyon 在2007年创建。它允许用户在一个终端窗口内访问多个独立的终端会话,每个会话都可以独立运行、暂停、恢复和移动。以下是 tmux 的一些主要特点:

vscode debug

https://github.com/InternLM/Tutorial/tree/camp3/docs/L0/Python#441-debug%E5%8D%95%E4%B8%AApython%E6%96%87%E4%BB%B6

conda install

conda install pytorch2.1.2 torchvision0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

这个命令是用来在conda环境中安装PyTorch及相关库的,下面是命令中各个部分的解释:
- `conda install`: 这是conda用来安装软件包的基本命令。
- `torchvision==0.16.2`: 指定要安装的torchvision版本是0.16.2。torchvision是PyTorch的一个扩展包,用于处理图像和视频。
- `torchaudio==2.1.2`: 指定要安装的torchaudio版本是2.1.2。torchaudio是PyTorch的一个扩展包,用于处理音频。
- `pytorch-cuda=12.1`: 指定要安装的PyTorch版本是为CUDA 12.1编译的。`cuda`是NVIDIA的并行计算平台和编程模型,`12.1`是CUDA的版本号。
- `-c pytorch`: 指定从`pytorch`这个conda频道(channel)安装PyTorch。频道是conda用来存放软件包的地方。
- `-c nvidia`: 指定从`nvidia`这个conda频道安装CUDA相关的包。NVIDIA提供了一些与CUDA相关的conda包。
- `-y`: 这个参数表示在安装过程中自动接受所有的提示,不需要手动确认。

conda安装指定镜像源用-c
conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia -y -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
pip安装指定镜像源用-i
pip install transformers4.38 -i https://pypi.tuna.tsinghua.edu.cn/simple/

pip install

pip install -e ‘.[deepspeed]’ -i https://pypi.tuna.tsinghua.edu.cn/simple/

`pip install -e '.[deepspeed]'` 这个命令是用来安装当前目录下Python包的可编辑模式,并安装与 `deepspeed` 相关的额外依赖。下面是命令中各个部分的解释:- `pip`: 是Python的包安装器。- `install`: 告诉 `pip` 要安装一个包。- `-e``--editable`: 这个选项会让包以可编辑模式安装。这意味着你可以对源代码进行更改,而不需要重新安装包,更改将立即反映在安装的包中。- `.`: 表示当前目录,`pip` 将会查找当前目录下的 `setup.py` 文件来安装包。- `[deepspeed]`: 是一个额外的依赖项指定,它告诉 `pip` 安装包含 `deepspeed` 的依赖项。这通常在 `setup.py` 文件的 `extras_require` 字段中定义。这个命令通常用在一个Python项目的根目录下,其中包含一个 `setup.py` 文件,该文件定义了包的元数据和依赖关系。如果你正在开发一个Python包,并且想要安装它以及它的 `deepspeed` 相关依赖,以便立即测试更改,这个命令就非常有用。请注意,`deepspeed` 是微软推出的一个深度学习优化库,用于提高大规模训练任务的效率。如果你的项目中使用了 `deepspeed`,确保在 `setup.py` 中正确定义了相应的依赖项。如果你没有 `setup.py` 或者没有定义 `deepspeed` 依赖项,这个命令可能不会按预期工作。

python 包 相关:

Gradio

无需拥有深厚的前端开发知识,轻松地为模型构建界面,通过简单的 Python 代码将模型封装为 Web 应用,并与他人分享,以便他们可以直接在浏览器中与模型交互。
特别是对于机器学习模型的演示和测试。它简化了模型到 Web 应用的转换过程,并使模型的共享变得容易

你可以在 Python 文件、Jupyter Notebook 或 Google Colab 中创建 Gradio 应用。以下是一个简单的 Gradio 应用示例

import gradio as grdef greet(name):return "Hello " + name + "!"demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()

分享 Gradio 应用:
你可以通过设置 share=True 参数在 launch() 函数中创建一个公共链接,以便与他人分享你的 Gradio 应用:

demo.launch(share=True)

这将生成一个可以在互联网上访问的链接,你可以将这个链接发送给任何人,让他们在你的机器上远程使用你的 Gradio 应用。

pytorch相关

torchvision是PyTorch的一个扩展包,用于处理图像和视频。
torchaudio是PyTorch的一个扩展包,用于处理音频。

Streamlit

快速创建和分享美观、交互式的 Web 应用。使用 Streamlit,你可以将 Python 脚本转换为交互式 Web 应用,而无需前端开发经验。
Streamlit 的特点包括快速开发、高度交互性、易于共享,并且可以部署到云平台

Streamlit是一个开源的Python库,用于快速创建和分享数据驱动的Web应用程序。它特别适合于数据科学家和机器学习工程师,因为它允许他们利用Python代码快速生成交互式的Web界面,而无需具备深厚的前端开发技能。

以下是Streamlit应用程序的一些关键特点:

快速开发:Streamlit允许用户通过编写Python脚本来创建Web应用程序,从而避免了复杂的前端代码编写。

交互性:Streamlit应用程序可以包含各种交互元素,例如滑块、下拉菜单、图表和地图,允许用户与应用程序进行交互。

数据可视化:Streamlit集成了多种数据可视化库,如Matplotlib、Plotly、Bokeh等,可以轻松地将数据可视化集成到应用程序中。

易于分享:一旦应用程序开发完成,可以通过Streamlit的共享功能或部署到服务器上,与他人分享应用程序。

社区支持: Streamlit拥有一个活跃的社区,提供了大量的教程、示例和第三方扩展,可以扩展应用程序的功能。

部署简单:Streamlit应用程序可以通过多种方式部署,包括本地运行、使用Streamlit共享、或部署到云平台如Heroku、AWS等。

实时更新:Streamlit应用程序可以实时更新,这意味着用户界面会随着后端数据的变化而自动更新。

多平台支持:Streamlit应用程序可以在任何支持现代Web浏览器的设备上运行,包括桌面、平板和智能手机。

Streamlit是一个强大的工具,尤其适合需要快速迭代和原型开发的场合。它让数据科学家能够专注于数据分析和机器学习模型的开发,而不必担心Web开发的复杂性。

pip install streamlit
安装完成后,你可以创建一个 Python 脚本,例如 app.py,并使用 Streamlit 的 API 来构建你的应用。然后,通过运行以下命令来启动应用:

streamlit run app.py
这将启动一个本地服务器,并在默认的 Web 浏览器中打开你的 Streamlit 应用。

deepspeed

DeepSpeed是一个由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和速度。它通过几种关键技术来优化训练过程,包括模型分割、梯度累积、以及内存和带宽优化等,能够降低训练超大规模模型的复杂性和资源需求,使训练变得更快、更高效。DeepSpeed特别适用于需要巨大计算资源的大型模型和数据集。
在DeepSpeed中,引入了ZeRO(Zero Redundancy Optimizer)技术,是一种旨在降低训练大型模型所需内存占用的优化器,通过在分布式环境中分割优化器的状态、梯度和参数,减少冗余的内存占用,允许更大的模型和更快的训练速度。ZeRO 分为几个不同的级别,主要包括:

deepspeed_zero1 :这是ZeRO的基本版本,它优化了模型参数的存储,主要通过分区存储优化器状态来减少内存使用。每个GPU设备只保存一部分优化器状态,从而显著减少内存消耗。

deepspeed_zero2:在deepspeed_zero1的基础上,deepspeed_zero2进一步优化了梯度和优化器状态的存储,将梯度也进行分区存储。这样,每个GPU设备只需要保存一部分的优化器状态和梯度,进一步减少内存使用。

deepspeed_zero3:这是目前最高级的优化等级,它包括了deepspeed_zero1和deepspeed_zero2的优化,除了优化器状态和梯度,还将模型参数进行分区存储。每个GPU设备只需要保存一部分的优化器状态、梯度和模型参数,从而最大限度地减少内存使用。

选择哪种deepspeed类型主要取决于你的具体需求,包括模型的大小、可用的硬件资源(特别是GPU内存)以及训练的效率需求。一般来说:

如果你的模型较小,或者内存资源充足,可能不需要使用最高级别的优化。
如果你需要快速训练模型,可能需要权衡内存优化和计算效率。deepspeed_zero1提供了较低的内存占用,同时保持了较高的计算效率。
如果你正在尝试训练非常大的模型,或者你的硬件资源有限,使用deepspeed_zero2或deepspeed_zero3可能更合适,因为它们可以显著降低内存占用,允许更大模型的训练。
选择时也要考虑到实现的复杂性和运行时的开销,更高级的优化可能需要更复杂的设置,更频繁的跨GPU通信,这可能需要更高的网络带宽,并可能增加一些计算开销。

Timm

Timm( PyTorch Image Models )是一个广泛使用的开源库,它为计算机视觉任务提供了大量的预训练模型、层、实用工具、优化器、调度器、数据加载器、增强策略以及训练和验证脚本。这个库旨在简化模型的选择、创建和微调过程,让研究人员和开发者能够更容易地在自己的项目中尝试不同的模型结构和预训练权重。

Timm 库的特点包括:

提供了超过700种预训练模型,包括各种最新的视觉模型。
支持通过简单的接口快速加载模型,并可选择是否加载预训练权重。
包含了多种优化器和调度器,以及数据加载和增强的工具。
提供了灵活的模型创建和调整方法,使得用户可以根据自己的需求修改模型结构。
使用 Timm 库,你可以轻松地进行以下操作:

通过 timm.create_model 函数创建模型,并通过 pretrained=True 参数加载预训练权重。
使用 timm.list_models() 函数列出所有可用的模型名称,或者通过正则表达式匹配特定模型。
对模型进行迁移学习或微调,以适应特定的任务或数据集。
Timm 库适用于多种应用场景,包括图像分类、目标检测、语义分割等,并且可以与快速AI(fastai)等其他库集成,提供更强大的功能。

MMPose

是一个基于 PyTorch 的姿态估计开源工具箱,由 OpenMMLab 项目提供。它支持多种人体姿态分析相关任务,包括但不限于 2D 多人姿态估计、2D 手部姿态估计、2D 人脸关键点检测、全身 133 关键点姿态估计、动物关键点检测等。MMPose 旨在提供高精度和快速度的算法,同时支持多样的数据集,如 COCO、MPII 等,并且具有模块化设计,便于用户构建自定义的人体姿态分析模型。

MMPose 的主要特点包括:

基于模型训练引擎 MMEngine 的架构设计,简化了模型训练流程,统一了接口。
新增姿态编解码器模块,整合了姿态的编码和解码过程。
统一了 top-down 和 bottom-up 方法的数据接口。
新增了多个轻量化姿态估计算法,如 SimCC 和 Debias IPR。
提供了全流程可视化工具,可以展示关键点、骨骼、热力图等信息。
用户文档更加友好,帮助新老用户顺利上手 MMPose 1.0。
MMPose 1.0 版本带来了许多新特性和优化,使其成为一个设计更优雅、功能更强大的姿态估计研发框架。它支持通过 Python API 进行模型推理,也提供了 Jupyter Notebook 教程和示例,方便用户快速理解和使用 MMPose。

书生大模型体系相关

整体框架

预训练:internEvo
微调: xtuner
大模型:interLM-7B
部署:lmdeploy
应用:
lagent: 智能体框架
huixiangdou:知识库
mindsearch: 搜索应用

标注:

label LLM: 对话标注
miner u:数据提取工具(pdf,网页,电子书)
label U:数据标注。支持图片,音视频

预训练

1.并行:
数据并行
流水并行
张量并行
序列并行

2.显存优化: zero1,zero2

微调 XTuner

由 MMRazor 和 MMDeploy 联合开发。

https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/XTuner/xtuner_finetune_basic.md

🤓 傻瓜化: 以 配置文件 的形式封装了大部分微调场景,0基础的非专业人员也能一键开始微调。
🍃 轻量级: 对于 7B 参数量的LLM,微调所需的最小显存仅为 8GB : 消费级显卡✅,colab✅

xtuner 高阶教程

https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/XTuner/xtuner_finetune_advance.md

flash attention
deepseed zero

lmdeploy 部署

turbomind 推理引擎 性能更高

部署命令:使用Gradio作为前端
lmdeploy serve gradio /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-1_8b --cache-max-entry-count 0.1

启动命令行客户端。
lmdeploy serve api_client http://localhost:23333

quant_policy=4 表示 kv int4 量化,

lmdeploy lite auto_awq: lite这是LMDeploy的命令,用于启动量化过程,而auto_awq代表自动权重量化(auto-weight-quantization)。
/root/models/internlm2_5-7b-chat: 模型文件的路径。
--calib-dataset 'ptb': 这个参数指定了一个校准数据集,这里使用的是’ptb’(Penn Treebank,一个常用的语言模型数据集)。
--calib-samples 128: 这指定了用于校准的样本数量—128个样本
--calib-seqlen 2048: 这指定了校准过程中使用的序列长度—2048
--w-bits 4: 这表示权重(weights)的位数将被量化为4位。
--work-dir /root/models/internlm2_5-7b-chat-w4a16-4bit: 这是工作目录的路径,用于存储量化后的模型和中间结果。

LMDeploy 是一个用于压缩、部署和服务 LLM 的工具包,由 MMRazor 和 MMDeploy 团队开发。它具有以下核心功能:

高效的推理:LMDeploy 通过引入持久化批处理、块 KV 缓存、动态分割与融合、张量并行、高性能 CUDA 内核等关键技术,提供了比 vLLM 高 1.8 倍的推理性能。
有效的量化:LMDeploy 支持仅权重量化和 k/v 量化,4bit 推理性能是 FP16 的 2.4 倍。量化后模型质量已通过 OpenCompass 评估确认。
轻松的分发:利用请求分发服务,LMDeploy 可以在多台机器和设备上轻松高效地部署多模型服务。
交互式推理模式:通过缓存多轮对话过程中注意力的 k/v,推理引擎记住对话历史,从而避免重复处理历史会话。
优秀的兼容性:LMDeploy支持 KV Cache Quant,AWQ 和自动前缀缓存同时使用。
LMDeploy 已经支持了 InternLM-XComposer2 系列的部署,但值得注意的是 LMDeploy 仅支持了 InternLM-XComposer2 系列模型的视觉对话功能。

智能体

大模型局限性:最新信息的获取;回复的可靠性;工具使用
智能体能力:拆分任务,执行工具,返回结果。

interLM-Xcomposer2: 文本-图像模型

InternLM-XComposer2 是一款基于 InternLM2 的视觉语言大模型,其擅长自由形式的文本图像合成和理解。其主要特点包括:

自由形式的交错文本图像合成:InternLM-XComposer2 可以根据大纲、详细文本要求和参考图像等不同输入,生成连贯且上下文相关,具有交错图像和文本的文章,从而实现高度可定制的内容创建。
准确的视觉语言问题解决:InternLM-XComposer2 基于自由形式的指令准确地处理多样化和具有挑战性的视觉语言问答任务,在识别,感知,详细标签,视觉推理等方面表现出色。
令人惊叹的性能:基于 InternLM2-7B 的InternLM-XComposer2 在多个基准测试中位于开源多模态模型第一梯队,而且在部分基准测试中与 GPT-4V 和 Gemini Pro 相当甚至超过它们。

InternVL2 视觉-语言多模态大模型

是上海人工智能实验室推出的新一代视觉-语言多模态大模型,是首个综合性能媲美国际闭源商业模型的开源多模态大模型。InternVL2 系列从千亿大模型到端侧小模型全覆盖,通专融合,支持多种模态

对于InternVL这个模型来说,它vision模块就是一个微调过的ViT,llm模块是一个InternLM的模型。对于视觉模块来说,它的特殊之处在Dynamic High Resolution。

InternVL独特的预处理模块:动态高分辨率,是为了让ViT模型能够尽可能获取到更细节的图像信息,提高视觉特征的表达能力。对于输入的图片,首先resize成448的倍数,然后按照预定义的尺寸比例从图片上crop对应的区域。

Pixel Shuffle在超分任务中是一个常见的操作,PyTorch中有官方实现,即nn.PixelShuffle(upscale_factor) 该类的作用就是将一个tensor中的元素值进行重排列,假设tensor维度为[B, C, H, W], PixelShuffle操作不仅可以改变tensor的通道数,也会改变特征图的大小。

LlamaIndex

LlamaIndex 是一个开源的索引和搜索库,旨在通过将其与特定上下文数据集集成,增强大型语言模型(LLMs)的能力。它允许您构建应用程序,既利用 LLMs 的优势,又融入您的私有或领域特定信息。

Lagent

官网
https://lagent.readthedocs.io/zh-cn/latest/tutorials/action.html

是一个轻量级开源智能体框架,旨在让用户可以高效地构建基于大语言模型的智能体。同时它也提供了一些典型工具以增强大语言模型的能力。

功能: 解决LLM解决不了的问题。如文生图,查论文。

茴香豆

茴香豆 是由书生·浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具
上传或删除文件后将自动进行特征提取,生成的向量知识库被用于后续 RAG 检索和相似性比对。

通过手动添加正例(希望模型回答的问题)和反例(希望模型拒答的问题)来调优知识助手的应答效果。

对于正例相似问题,茴香豆会在知识库中尽量搜寻相关解答,在没有相关知识的情况下,会推测答案,并在回答中提示我们该回答并不准确。这保证了回答的可追溯性。

对于反例问题,茴香豆拒绝作答,这保证了在对话,尤其是企业级群聊中的闲聊、非问题和无关问题触发回答带来的回答混乱和资源浪费。

茴香豆特点:

三阶段 Pipeline (前处理、拒答、响应),提高相应准确率和安全性

打通微信和飞书群聊天,适合国内知识问答场景

支持各种硬件配置安装,安装部署限制条件少

适配性强,兼容多个 LLM 和 API

傻瓜操作,安装和配置方便

免费商用

最新的茴香豆支持了多模态的图文检索,启用该功能后,茴香豆可以解析上传的图片内容,并根据图片内容和文字提示词进行检索回答。

图文检索功能需要至少 10G 显存支持本地向量和重排模型运行

大模型基础知识 相关

数据合成手段

1.基于规则的构造

代码 公式,函数,数学题解

2.基于模型的数据扩充

代码加注释

3.基于人类反馈的数据生成

强化学习思路,RLHF路子。

prompt

1.指令清晰
2.提供参考内容:即few shot
3. 复杂任务拆解,不要让在一个要求里让完成2项任务
4. 给LLM思考过程,即cot的思维链方式

cot思维链方式:
即可以让prompt给出思考过程,也可以让把中间任务打印出来。

标准的语言解释cot是:

分解法:将复杂的任务分解为更简单的子任务 (Let’s think step by step, CoT,LangChain等思想)
解释法:让模型在回答之前进行解释,说明理由 (CoT 等方法)

prompt笔记合集:
https://langgpt.ai/

rag和sft对比。

对于文本分类,情感分析这种专业化的任务,采用sft。sft是参数更新。
对于实时新闻摘要,采用rag。 rag是非参数更新。

微调训练数据格式

data = [
{“conversation”: [{“input”: “请介绍一下你自己”, “output”: “我是{}的小助手,内在是上海AI实验室书生·浦语的1.8B大模型哦”.format(name)}]},
{“conversation”: [{“input”: “你在实战营做什么”, “output”: “我在这里帮助{}完成XTuner微调个人小助手的任务”.format(name)}]}
]

微调技术

LoRA简介
LoRA(Low-Rank Adaptation)是一种使用低精度权重对大型预训练语言模型进行微调的技术,它的核心思想是在不改变原有模型权重的情况下,通过添加少量新参数来进行微调。这种方法降低了模型的存储需求,也降低了计算成本,实现了对大模型的快速适应,同时保持了模型性能。

然而,由于使用了低精度权重,LoRA的一个潜在的缺点是在微调过程中可能会丢失一些原始模型的高阶特征信息,因此可能会降低模型的准确性。

QLoRA简介
QLoRA(Quantized LoRA)微调技术是对LoRA的一种改进,它通过引入高精度权重和可学习的低秩适配器来提高模型的准确性。并且在LoRA的基础上,引入了量化技术。通过将预训练模型量化为int4格式,可以进一步减少微调过程中的计算量,同时也可以减少模型的存储空间,这对于在资源有限的设备上运行模型非常有用。最终,可以使我们在消费级的显卡上进行模型的微调训练。

agent

“agent”(智能体)通常指的是一个能够独立执行任务、做出决策并与其环境进行交互的软件实体或系统。智能体可以简单或复杂,从自动化脚本到复杂的机器人系统,都可以被称为智能体。

显存占用计算

模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、kv cache占用的显存,以及中间运算结果占用的显存

对于一个7B(70亿)参数的模型,每个参数使用16位浮点数(等于 2个 Byte)表示,则模型的权重大小约为:
70亿个参数×每个参数占用2个字节=14GB,所以我们需要大于14GB的显存

cache-max-entry-count为0.8,即kv cache占用剩余显存的80%

对于24GB的显卡,权重占用14GB显存,剩余显存24-14=10GB,因此kv cache占用10GB*0.8=8GB,加上原来的权重14GB,总共占用14+8=22GB。

W4A16量化之后:

1.在 int4 精度下,1.5B,float16 模型权重占用:3G/4=0.75GGB
2.kv cache占用18.6GB:剩余显存24-0.75=23.25GB,kv cache默认占用80%,即23.25*0.8=18.6GB
3.其他项: 1G

20.3GB=权重占用0.75GB+kv cache占用18.6GB+其它项1GB

W4A16 量化+ KV cache+KV cache 量化
同时启用量化后的模型、设定kv cache占用和kv cache int4量化

lmdeploy serve api_server
/root/models/internlm2_5-1_8b-chat-w4a16-4bit/
–model-format awq
–quant-policy 4
–cache-max-entry-count 0.4
–server-name 0.0.0.0
–server-port 23333
–tp 1

1.在 int4 精度下,1.5B,float16 模型权重占用:3G/4=0.75GGB
2.kv cache占用18.6GB:剩余显存24-0.75=23.25GB,kv cache默认占用80%,即23.25*0.4=9.3GB
3.其他项: 1G

11GB=权重占用0.75GB+kv cache占用9.3GB+其它项1GB

kv cache

是一种缓存技术,通过存储键值对的形式来复用计算结果,以达到提高性能和降低内存消耗的目的
在大规模训练和推理中,kv cache可以显著减少重复计算量,从而提升模型的推理速度。理想情况下,kv cache全部存储于显存,以加快访存速度。

lmdeploy 对kv cache的实现
预先申请,申请剩余显存的,用cache_max_entry_count 控制kv缓存占用剩余显存的最大比例。默认的比例为0.8。

量化技术:

模型量化是一种优化技术,旨在减少机器学习模型的大小并提高其推理速度。量化通过将模型的权重和激活从高精度(如16位浮点数)转换为低精度(如8位整数、4位整数、甚至二值网络)来实现

LMDeploy 支持在线 kv cache int4/int8 量化,量化方式为 per-head per-token 的非对称量化。此外,通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policy 和cache-max-entry-count参数。目前,LMDeploy 规定 quant_policy=4 表示 kv int4 量化,

w4A16量化
使用awq算法:
w:权重 4:4bit 量化。 A: 激活值 16: 反量化为16 。
表示存储的时候量化4,计算的时候反量化为16 。

官方解释:
W4A16又是什么意思呢?
W4:这通常表示权重量化为4位整数(int4)。这意味着模型中的权重参数将从它们原始的浮点表示(例如FP32、BF16或FP16,Internlm2.5精度为BF16)转换为4位的整数表示。这样做可以显著减少模型的大小。
A16:这表示激活(或输入/输出)仍然保持在16位浮点数(例如FP16或BF16)。激活是在神经网络中传播的数据,通常在每层运算之后产生。

W4A16的量化配置意味着:
权重被量化为4位整数。
激活保持为16位浮点数。

Awq量化原理

核心观点1:权重并不等同重要,仅有0.1~1%小部分显著权重对推理结果影响较大

在线如果有办法将这0.1~1%的小部分显著权重保持FP16,对其他权重进行低比特量化,可以大幅降低内存占用问题来了:如果选出显著权重?
随机挑选 -听天由命
基于权重分布挑选-好像应该这样
基于激活值挑选-竟然是这样—最终方案

核心观点2:量化时对显著权重进行放大可以降低量化误差

外推技术

什么是外推?
长度外推性是一个训练和预测的长度不一致的问题。

外推引发的两大问题
预测阶段用到了没训练过的位置编码模型不可避免地在一定程度上对位置编码“过拟合预测注意力时注意力机制所处理的token数量远超训练时的数量导致计算注意力“熵”的差异较大

位置编码

并行化的自注意力机制并不具备区分token相对位置的能力

“mod”的主要特性是周期性,因此与周期函数cos/sin具有一定的等效性
因此,Sinusoidal位置编码可以认为是一种特殊的B进制编码

大模型外推技术-用位置编码

最终方案:
大模型其实并不知道我们输入的位置编码具体是多少“进制”的,他只对相对大小关系敏感
通过“进制转换”:来等效“内插”,即NTK-aware外推技术

Function Calling

即为让 LLM 调用外部函数解决问题,,从而拓展 LLM 的能力边界。

完整的项目

https://blog.csdn.net/duankaifei/article/details/142346409

🚀 KV cache + Turbomind 推理加速
📚 RAG 检索增强生成
🎙️ ASR 语音转文字输入
🔊 TTS 文字转语音输出
🦸 数字人解说视频生成 SD 来生成视频:comfyUI
🌐 Agent 使用网络查询实时快递等信息

图片扣字; 图片进行长边裁剪;图片检测识别

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

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

相关文章

面试中如何回答关于 `RecyclerView` 性能优化的理解和实践经验

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在面试中展示对 RecyclerView 性能优化的理解和实践经验,你可以从以下几个方面进行阐述: 1. 理解 RecyclerView 的工作…

Maven-五、属性

Maven 文章目录 Maven前言属性定义properties文件加载pom文件属性总结 前言 使用maven中的属性可以来简化我们的配置工作。 属性定义 在pom文件中可以使用**标签设置属性,属性名自定义,然后可以在使用${属性名}**文件中引用自己定义的属性。 使用属性进行配置&a…

干货 | 2024数智新时代制造业数字化创新实践白皮书(免费下载)

导读:本白皮书将对制造业发展历程、现状、趋势与核心难题做深入解读,并在此基础上提出了相应的制造行业解决方案,结合业内实践成功的客户案例来详析信息化转型的有效方法,以供生产制造行业的从业者参考交流。

【网络安全】依赖混淆漏洞实现RCE

未经许可,不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…

Java的IO流(二)

目录 Java的IO流(二) 字节缓冲流 基本使用 使用缓冲流复制文件 字符缓冲流 缓冲流读取数据原理 字符编码 字符集 转换流 序列化流与反序列化流 基本使用 禁止成员被序列化 序列号不匹配异常 打印流 基本使用 系统打印流与改变流向 Prop…

【Windows】快速帮你解决如何找到 Windows 上的 .condarc 文件

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【VLM小白指北 (1) 】An Introduction to Vision-Language Modeling

开一个新坑Vision-Language Modeling (VLM) ,原文76页,慢慢更,for beginners,但也不能之前啥都不会啊。 原文链接:An Introduction to Vision-Language Modeling Introduction 存在的问题:将语言与视觉相…

算法-K个一组翻转链表

// 要实现没k个节点进行翻转的操作,可以按照一下步骤进行 // 1.计算链表长度 // 2.分组反转 // 3. 使用一个虚拟头节点来处理边界情况 // 4.每次处理k个节点进行反转 // 5.如果剩余节点不足k个 则保持原有顺序 // 6.依次反转每组中的节点 // 1.使用prevGroupEEnd追…

【测试】——JUnit

📖 前言:JUnit 是一个流行的 Java 测试框架,主要用于编写和运行单元测试,用来管理测试用例。本文采用JUnit 5 目录 🕒 1. 添加依赖🕒 2. 注解🕘 2.1 Test🕘 2.2 BeforeAll AfterAll&…

OceanBase 3.X 高可用 (一)

OceanBase 3.X 高可用(一) 一、分布式核心 OceanBase 3.x 采用的是paxos 协议,与raft协议相比。其复杂程度高,实现技术难度大。 Paxos 协议允许事务日志乱序发送,顺序提交。raft允许事务顺序发送,顺序提…

Windows Internals 7th Edition English Download

天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享天翼云盘是中国电信推出的云存储服务,为用户提供跨平台的文件存储、备份、同步及分享服务,是国内领先的免费网盘,安全、可靠、稳定、快速。天翼云盘为用户守护数据资产。https://cloud.1…

高并发内存池(四):查缺补漏 与 申请内存过程的调试

目录 查缺补漏 问题:min函数的冲突问题 申请内存过程的调试 当前文件展示 Common.h ObjectPool.h ConcurrentAlloc.h ThreadCache.h CentralCache.h PageCache.h ThreadCache.cpp CentralCache.cpp PageCache.cpp UnitTest.cpp 单进程单span 单进程…

谷歌收录批量查询,怎么查看批量查询谷歌收录情况

在SEO(搜索引擎优化)领域,确保网站内容被谷歌等搜索引擎有效收录是提升网站可见性和流量的关键步骤。批量查询谷歌收录情况,能够帮助网站管理员快速了解哪些页面已被搜索引擎识别并编入索引,哪些页面可能存在问题需要优…

【python】石头剪刀布,模拟十次并统计获胜次数

解决问题 下面是一个使用Python编写的剪刀、石头、布游戏的程序,包含玩家与计算机对战和模拟计算机对战10次的功能。 import random def get_computer_choice(): return random.randint(0, 2) def get_user_choice(): choice input("请输入剪刀(0)…

Spring高手之路24——事务类型及传播行为实战指南

文章目录 1. 编程式事务(不推荐)2. 声明式事务(推荐)3. 事务的传播行为(复杂混合事务场景及时序图说明)3.1 NESTED和REQUIRES_NEW传播行为的区别 1. 编程式事务(不推荐) 定义&#…

MAC激活Typora以及禁止成功激活弹窗的方法

激活 Typora 首先在官网下载 Typora 的最新版 并且安装。 打开以下目录 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist/static/js/ 注意在 Applications 中,需要对 Typora 右键选择 Show Packages Contents 即可进入 Typora.app。 在该目录的文…

C++自动驾驶面试核心问题整理

应用开发 概述:比较基础,没啥壁垒,主要有linux开发经验即可 问题:基础八股,如计算机网络、操作系统、c11等基础三件套;中等难度算法题1-2道。 中间件开发(性能优化) 概述&am…

快递物流查询-快递查询-快递单号查询-快递物流单号查询-快递物流轨迹查询-快递物流查询接口

快递物流查询接口(API)是一种允许开发者通过编程方式实时查询快递物流信息的服务。这些接口通常集成了多家快递公司的物流数据,为电商平台、物流管理系统、个人用户等提供便捷的物流查询服务。以下是关于快递物流查询接口的一些详细介绍&…

哪有什么三教九流,物以类聚罢了——kmeans聚类算法

观察人类社会,亦或说车水马龙中的光怪陆离,不难发现《马原》中介绍的人类社会中的个体,总是通过某种方面的“类似”聚在一起,文学上称这种现象叫做物以类聚,人以群分。 一.引言 前文提到,每个数据项&#x…

SpringBoot项目License证书生成与验证(TrueLicense) 【记录】

SpringBoot项目License证书生成与验证(TrueLicense) 【记录】 在非开源产品、商业软件、收费软件等系统的使用上,需要考虑系统的使用版权问题,不能随便一个人拿去在任何环境都能用。应用部署一般分为两种情况: 应用部署在开发者自己的云服务…