赞
踩
1.首先从开源社区根据不同开源模型在各个维度上的能力选择中意的大模型
2.根据应用场景来判断是否需要对大模型进行参数微调,例如,仅仅是通用的简单对话任务则可以直接使用(至步骤5),如果应用场景比较复杂则需要对模型进行微调。
3.微调:如果算力足够则可以进行续训或全参微调,如果算力有限则可以固定一部分参数,只对部分参数修改进行部分参数微调(例如:LoRA算法)
4.微调后,如果业务场景需要与外部环境交互,例如:调用外部API,或与已有数据库进行交互,则需要构建基于大模型的智能体,如果不需要则可以在业务场景进行试用
5.评测大模型是否符合应用要求,如果符合应用要求则可以进行模型部署,否则则需要重新对模型进行微调,模型部署时也要解决一些问题,例如:以更少的资源部署模型、提升应用吞吐量
书生万卷开放数据:
OpenDataLab 开放数据平台,提供很多数据
大语言模型的下游应用中,增量续训和有监督微调是经常会用到两种方式
增量续训使用场景: 让基座模型学习到一些新知识,如某个垂类领域知识训练数据:文章、书籍、代码等
有监督微调使用场景:让模型学会理解和遵循各种指令,或者注入少量领域知识训练数据:高质量的对话、问答数据
XTuner微调框架:8G显存即可微调7B模型
国内外评测体系的整体态势:
OpenCompass评测体系
OpenCompass开源评测平台架构,亮点:
丰富模型支持:开源模型、API模型一站式评测
分布式高效评测:支持千亿参数模型在海量数据集上分布式评测
便捷的数据集接口:支持社区用户根据自身需求快速添加自定义数据集
敏捷的能力迭代:每周更新大模型能力版单,每月提升评测工具能力
为了解决上面大模型的调整,开源了LMDeploy高效的推理框架,LMDeploy 提供大模型在GPU上部署的全流程解决方案,包括模型轻量化、推理和服务。
LMDeploy的静态推理性能(固定batch,输入\输出token数量)和动态推理性能(真实对话,不定长的输入\输出)相对其他框架都有一定优势
大语言模型的局限性:最新信息和知识的获取、回复的可靠性、数学计算、工具使用和交互。基于这些需求需要让大模型驱动一个智能体,智能体通常以大模型作为核心,来进行一些规划、推理、执行(让大模型自主调用工具)
开源轻量级智能体框架Lagent
举例:1.调用python代码解释器求解数学题,2.多模态AI工具使用
多模态智能体工具箱AgentLego,聚焦在提供给大模型更多的工具集合,在AgentLego加持下,可以更加简单的将大模型与环境连接起来
基础
使用 InternLM-Chat-7B 模型生成 300 字的小故事(需截图)。
熟悉 hugging face 下载功能,使用 huggingface_hub python 包,下载 InternLM-20B 的 config.json 文件到本地(需截图下载过程)。
进阶作业(可选做)
完成浦语·灵笔的图文理解及创作部署(需截图)
完成 Lagent 工具调用 Demo 创作部署(需截图
人工智能领域中参数数量巨大、拥有庞大计算能力和参数模型的模型。
大模型通常指的是机器学习或人工智能领域中参数数量巨大、拥有庞大计算能力和参数规模的模型。这些模型利用大量数据进行训练,并且拥有数十亿甚至数千亿个参数。大模型的出现和发展得益于增长的数据量、计算能力的提升以及算法优化等因素。这些模型在各种任务中展现出惊人的性能,比如自然语言处理、计算机视觉、语音识别等。这种模型通常采用深度神经网络结构,如 Transformer、BERT、GPT( Generative Pre-trained Transformer )等。
大模型的优势在于其能够捕捉和理解数据中更为复杂、抽象的特征和关系。通过大规模参数的学习,它们可以提高在各种任务上的泛化能力,并在未经过大量特定领域数据训练的情况下实现较好的表现。然而,大模型也面临着一些挑战,比如巨大的计算资源需求、高昂的训练成本、对大规模数据的依赖以及模型的可解释性等问题。因此,大模型的应用和发展也需要在性能、成本和道德等多个方面进行权衡和考量。
特点及应用
有很多方法可以让模型在质量和多样性之间进行权衡,而不是仅受 temperature 的影响。在下一节中,我们将讨论对 temperature 选择技术的一些修改。但是,如果您对将 temperature 设置为 0 很满意,可以暂时跳过这部分内容。在 temperature 为零时这些参数不会影响模型的回复,您可以放心地设置。
主要特点
支持高性能推理. 我们现在支持了高性能推理 lmdeploy turbomind.
实现了多种类型的智能体, 我们支持了经典的 ReAct,AutoGPT 和 ReWoo 等智能体,这些智能体能够调用大语言模型进行多轮的推理和工具调用。
框架简单易拓展. 框架的代码结构清晰且简单,只需要不到20行代码你就能够创造出一个你自己的智能体(agent)。同时我们支持了 Python 解释器、API 调用和搜索三类常用典型工具。
灵活支持多个大语言模型. 我们提供了多种大语言模型支持,包括 InternLM、Llama-2 等开源模型和 GPT-4/3.5 等基于 API 的闭源模型。
浦语·灵笔是基于书生·浦语大语言模型研发的视觉-语言大模型,提供出色的图文理解和创作能力,具有多项优势:
图文交错创作: 浦语·灵笔可以为用户打造图文并貌的专属文章。生成的文章文采斐然,图文相得益彰,提供沉浸式的阅读体验。这一能力由以下步骤实现:
基础作业
进阶作业(可选做)
https://openxlab.org.cn/apps/detail/ljqiff/CarLLMTest
##LLM 的局限性:
知识时效性受限:如何让LLM能够获取最新的知识
专业能力有限:如何打造垂域大模型
定制化成本高:如何打造个人专属的LLM应用
此次课程主要针对: RAG检索增强生成
LangChain 框架是一个开源工具,通过为各种 LLM 提供通用接口来简化应用程序的开发流程,帮助开发者自由构建 LLM应用。LangChain 的核心组成模块如下:
链(Chains) :将组件组合实现端到端应用,通过一个对象封装实现一系列LLM 操作
Eg. 检索问答链,覆盖实现了 RAG (检索增强生成)的全部流程。也是此次课程中实践用到的。
加载源文件→文档分块→文档向量化
确定源文件类型,针对不同类型源文件选用不同的加载器:核心在于将带格式文本转化为无格式字符串
由于单个文档往往超过模型上下文上限,我们需要对加载的文档进行切分:一般按字符串长度进行分割,也可以手动控制分割块的长度和重叠区间长度
使用向量数据库来支持语义检索,需要将文档向量化存入向量数据库:可以使用任一一种Embedding模型来进行向量化,也可以使用多种支持语义检索的向量数据库,一般使用轻量级的Chroma
搭建知识库助手
LangChain 支持自定义LLM,可以直接接入到框架中。只需将InternLM部署在本地,并封装一个自定义LLM
类,调用本地 InternLM 即可。
LangChain提供了检索问答链模版,可以自动实现知识检索、Prompt嵌入、LLM问答的全部流程。
将基于InternLM的自定义LLM和已构建的向量数据库接入到检索问答链的上游
调用检索问答链,即可实现知识库助手的核心功能
如下图所示:
基础作业
3个epch幻觉严重,过拟合,污染原始权重
进阶作业:
MoelScope 平台。
https://www.modelscope.cn/models/ljqiff/learn4class/summary
OpenXlab
https://openxlab.org.cn/apps/detail/ljqiff/CarLLMTest
基础作业:
使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图)
本地:
网页Gradio:
API:
进阶作业(可选做):
将第四节课训练自我认知小助手模型使用 LMDeploy 量化部署到 OpenXLab 平台。
部署:
MoelScope 平台。
https://www.modelscope.cn/models/ljqiff/learn4class/summary
OpenXlab
https://openxlab.org.cn/apps/detail/ljqiff/CarLLMTest
对internlm-chat-7b模型进行量化,并同时使用KV Cache量化,使用量化后的模型完成API服务的部署,分别对比模型量化前后和 KV Cache 量化前后的显存大小(将 bs设置为 1 和 max len 设置为512)。
在自己的任务数据集上任取若干条进行Benchmark测试,测试方向包括:
(1)TurboMind推理+Python代码集成
(2)在(1)的基础上采用W4A16量化
(3)在(1)的基础上开启KV Cache量化
(4)在(2)的基础上开启KV Cache量化
(5)使用Huggingface推理
本文介绍大模型部署的背景知识,并介绍LMDeploy工具,并实现一个部署demo
显存开销大:7B的模型就需要14G显存
自回归需要缓存大量的kv,显存开销大
shape是动态的:请求数量不固定,token逐个生成
设备:难以应对巨大的存储开销
推理:token的生成如何加速;动态的shape如何解决;如何有效管理和利用内存
服务:提升系统的整体吞吐量,降低平均响应时间
模型并行
低比特量化
…
LLM在英伟达设备上的部署方案,包含模型轻量化、推理和服务
推理性能:
静态(固定batch和输出输入的token数目):小batch下性能是fp16的两倍,batch越大加速效果越不明显
动态(输入输出不定长):精度优于vLLM框架
量化的目的:减小显存占用,提升运行速度
推理的两种该情况:计算密集和访存密集
解决计算密集:采用更快的硬件计算单元提升速度,如量化
解决访存密集:提高计算访存比
Weight Only的量化可以一举两得的起到解决现存和提升推理速度的作用,内部的核心算法是AWQ算法
持续批处理:
不必batch中的所有样本都处理完才进行下一个batch
有状态的推理:
请求不带历史记录,历史记录在推理测缓存中
blocked k/vcache:
block有三种状态:Free,Activate,Cache
计算过程中动态的调整显存
高性能的cuda kernel:
不断更新最新的优化方法
通过api启动服务
创建环境
/root/share/install_conda_env_internlm_base.sh lmdeploy #复制一个base环境
conda activate lmdeploy # 激活环境
pip install packaging # 安装一个库
pip install /root/share/wheels/flash_attn-2.4.2+cu118torch2.0cxx11abiTRUE-cp310-cp310-linux_x86_64.whl # 使用预编译包提升flash_attn的安装速度
pip install 'lmdeploy[all]==v0.1.0' # 安装lmdeploy
在线转换模型权重,直接读取本地的模型权重
(也支持读取huggingface上的模型权重)
lmdeploy chat turbomind /share/temp/model_repos/internlm-chat-7b/ --model-name internlm-chat-7b
运行上述命令会在终端直接创建一个对话窗口
与在线转换的区别在于需要首先将模型转换为TurboMind格式
转换后就可以实现tensor并行
创建一个lmdeploy文件夹,并利用官方提供的模型文件进行离线转换
mkdir lmdeploy
cd lmdeploy
lmdeploy convert internlm-chat-7b /root/share/temp/model_repos/internlm-chat-7b/
转换后会在当前文件夹下生成一个workspace文件夹
随后使用lmdeploy chat turbomind ./workspace
即可启动基于TurboMind推理引擎的本地对话
可以发现同样的指令,两次生成的故事是不一样的,并且基于TurboMind推理引擎的生成速度要更快
使用以下命令启动服务
# ApiServer+Turbomind api_server => AsyncEngine => TurboMind
lmdeploy serve api_server ./workspace \
--server_name 0.0.0.0 \
--server_port 23333 \
--instance_num 64 \
--tp 1
再启动一个终端,在新终端中运行
lmdeploy serve api_client http://localhost:23333
这样就可以启动刚刚创建的API服务,不需要加载模型,速度更快
打开本地终端,输入以下指令
ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p <你的ssh端口号>
即可在本地打开http://localhost:23333
可以通过在页面上修改传入API的参数,实现对话
发现这里的模型似乎有点奇怪,问他是谁他竟然说自己是程序员哈哈
可以使用TurboMind服务作为后端或者直接用TurboMind推理作为后端
以TurboMind推理作为后端:
lmdeploy serve gradio ./workspace
此时本地需要映射6006端口ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 34027
再打开http://localhost:6006/即可
以TurboMind服务作为后端:
先启动服务:
# ApiServer+Turbomind api_server => AsyncEngine => TurboMind lmdeploy serve api_server ./workspace \ --server_name 0.0.0.0 \ --server_port 23333 \ --instance_num 64 \ --tp 1
再用gradio调用
# Gradio+ApiServer。必须先开启 Server,此时 Gradio 为 Client lmdeploy serve gradio http://0.0.0.0:23333 \ --server_name 0.0.0.0 \ --server_port 6006 \ --restful_api True
完成后打开http://localhost:6006/ 界面如下
对于Python项目,推荐使用TurboMind推理+Python的方式,直接调用,类似于
from lmdeploy import turbomind as tm
model_path = “/root/share/temp/model_repos/internlm-chat-7b/”
tm_model = tm.TurboMind.from_pretrained(model_path, model_name=‘internlm-chat-20b’)
generator = tm_model.create_instance()
query = “你好啊兄嘚”
prompt = tm_model.model.get_prompt(query)
input_ids = tm_model.tokenizer.encode(prompt)
for outputs in generator.stream_infer(
session_id=0,
input_ids=[input_ids]):
res, tokens = outputs[0]
response = tm_model.tokenizer.decode(res.tolist())
print(response)
LLM是访存密集型,量化可以降低显存,提高效率
资源足够的时候可以不需要量化,只有CPU或者文本长度很长的时候,就需要量化
将KV变成int8
第一步:计算minmax
第二步:线性映射到0-255或者-127-127的范围
第三步:修改配置文件quant_policy参数为4,表示打开KVCache的开关
可以解决20%的显存,性能有时候还有提升。
量化相当于引入了轻微的噪声,有可能会起到一定的正则化作用;同时量化后的模型可能刚好适配某个数据集
A16表示Activation保持FP16,只对权重参数进行4bit量化
本文主要介绍了模型量化和LMDeploy的基本应用,并实现了几个部署的demo
</article>
基础作业
使用 OpenCompass 评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能
进阶作业
使用 OpenCompass 评测 InternLM2-Chat-7B 模型使用 LMDeploy 0.2.0 部署后在 C-Eval 数据集上的性能
6
提示:这里可以添加本文要记录的大概内容:
介绍大模型评测的基本知识,OpenCompass工具介绍,并实现一个评测的demo
提示:以下是本篇文章正文内容,下面案例可供参考
公平统一的了解模型的效果
知识语言推理、情感倾向、长文本生成、agent、垂直领域问答
基座模型和微调后的模型有所不同
客观评测和主观评测(人工评价和模型评价)
提示词工程:换prompt看是否还能答对
成熟完善的测评平台架构
丰富的模型支持
成熟的流水线设计:开源模型和API模型都可以测评,易于拓展到自己的模型和数据集
有模型能力榜单
多模态模型有MMBench框架
专家领域也有特有的评测集
首先准备环境
conda create --name opencompass --clone=/root/share/conda_envs/internlm-base # 创建环境
conda activate opencompass # 激活环境
随后下载安装opencompass项目:
git clone https://github.com/open-compass/opencompass # 下载opencompass项目 pip install -e . # 安装opencompass项目
git连接不稳定,报错HTTP503,选择下载zip包之后上传到开发机,解压
unzip opencompass-main.zip cd opencompass-main pip install -e .
数据准备:
cp /share/temp/datasets/OpenCompassData-core-20231110.zip ./ # 拷贝数据 unzip OpenCompassData-core-20231110.zip # 解压
查看支持的数据集和模型
python tools/list_configs.py internlm ceval
python run.py --datasets ceval_gen --hf-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-path /share/temp/model_repos/internlm-chat-7b/ --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True --model-kwargs trust_remote_code=True device_map='auto' --max-seq-len 2048 --max-out-len 16 --batch-size 4 --num-gpus 1 --debug
分别指定了hf格式的模型路径、hf格式的tokenizer路径,tokenizer参数,模型参数,最大序列长度,最大token数量,batch大小,GPU数量,debug模型
也可以用python run.py configs/xxxx.py
,现将model,Dataset,infer写好,直接运行
运行结束后,可以再output/default下找到一个用时间命名的文件夹,里面存放了模型的评估结果,下图展示了单个实验的汇总评估结果。
主要介绍了模型评测的基础知识,opencompass工具的使用方法,随后实现了internlm7b模型在C-Eval数据集下的效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。