书生·浦语大模型全链路开源体系-第5课

news2024/11/16 16:34:44

书生·浦语大模型全链路开源体系-第5课

  • 书生·浦语大模型全链路开源体系-第5课
    • 相关资源
    • LMDeploy基础
      • 配置LMDeploy运行环境
      • 下载internlm2-chat-1_8b模型
      • 使用Transformer来直接运行InternLM2-Chat-1.8B模型
      • 使用LMDeploy以命令行方式与InternLM2-Chat-1.8B模型对话
      • 设置KV Cache最大占用比例为0.4
    • 设置KV Cache最大占用比例为0.4,开启W4A16量化,以命令行方式与模型对话。
      • 使用W4A16量化模型
      • 设置KV Cache最大占用比例为0.4,以命令行方式与模型对话
    • 以API Server方式启动 lmdeploy,开启W4A16量化,调整KV Cache的占用比例为0.4
      • 使用命令行客户端与模型对话
      • 使用网页方式与模型对话
      • 使用Gradio网页客户端与模型对话
    • 使用Python代码集成的方式运行
    • 使用 LMDeploy 运行视觉多模态大模型 llava
      • 通过命令行方式运行视觉多模态大模型 llava
      • 通过Gradio运行视觉多模态大模型 llava

书生·浦语大模型全链路开源体系-第5课

为了推动大模型在更多行业落地应用,让开发人员更高效地学习大模型的开发与应用,上海人工智能实验室重磅推出书生·浦语大模型实战营,为开发人员提供大模型学习和开发实践的平台。
本文是书生·浦语大模型全链路开源体系-第5课的课程实战。

相关资源

  • InternLM项目地址

https://github.com/InternLM/InternLM

https://github.com/InternLM/LMDeploy

  • InternLM2技术报告

https://arxiv.org/pdf/2403.17297.pdf

  • 书生·万卷 数据

https://opendatalab.org.cn/

  • 课程链接

https://www.bilibili.com/video/BV1tr421x75B/

LMDeploy基础

配置LMDeploy运行环境

执行命令,创建一个新的虚拟环境,安装必要的库。

studio-conda -t lmdeploy -o pytorch-2.1.2

conda activate lmdeploy

pip install lmdeploy[all]==0.3.0

创建conda环境。

image-20240415094441459.png

image-20240415095646800.png

安装lmdeploy库,指定版本0.3.0

image-20240415095913572.png

image-20240415100140566.png

下载internlm2-chat-1_8b模型

执行命令,下载模型。在InternLM的开发机上,可以通过以下命令直接创建软链接来下载模型。

ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b /root/models/internlm2-chat-1_8b

使用Transformer来直接运行InternLM2-Chat-1.8B模型

创建路径/root/code/lmdeploy,并在该目录下创建脚本文件pipeline_transformer.py

mkdir -p /root/code/lmdeploy && cd /root/code/lmdeploy

vi pipeline_transformer.py

cat pipeline_transformer.py

文件内容为:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("/root/models/internlm2-chat-1_8b", trust_remote_code=True)

# Set `torch_dtype=torch.float16` to load model in float16, otherwise it will be loaded as float32 and cause OOM Error.
model = AutoModelForCausalLM.from_pretrained("/root/models/internlm2-chat-1_8b", torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()

inp = "hello"
print("[INPUT]", inp)
response, history = model.chat(tokenizer, inp, history=[])
print("[OUTPUT]", response)

inp = "please provide three suggestions about time management"
print("[INPUT]", inp)
response, history = model.chat(tokenizer, inp, history=history)
print("[OUTPUT]", response)

文件创建好后,执行命令运行脚本,可以看到模型的输出结果。

python pipeline_transformer.py

image-20240415101025666.png

使用LMDeploy以命令行方式与InternLM2-Chat-1.8B模型对话

使用LMDeploy与模型进行对话的通用命令格式为:

lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]

直接输入命令开始进行对话。

lmdeploy chat /root/models/internlm2-chat-1_8b

image-20240415101943390.png

对模型进行提问。

image-20240415102017406.png

此时,可以看到显存占用 7856 MB

如果想了解lmdeploy chat的更多参数信息,可以执行命令

lmdeploy chat -h

image-20240415102216230.png

设置KV Cache最大占用比例为0.4

KV Cache是一种缓存技术,通过存储键值对的形式来复用计算结果,以达到提高性能和降低内存消耗的目的。在大规模训练和推理中,KV Cache可以显著减少重复计算量,从而提升模型的推理速度。理想情况下,KV Cache全部存储于显存,以加快访存速度。当显存空间不足时,也可以将KV Cache放在内存,通过缓存管理器控制将当前需要使用的数据放入显存。

模型在运行时,占用的显存可大致分为三部分:模型参数本身占用的显存、KV Cache占用的显存,以及中间运算结果占用的显存。LMDeploy的KV Cache管理器可以通过设置--cache-max-entry-count参数,控制KV缓存占用剩余显存的最大比例。默认的比例为0.8。

这里,我们将参数--cache-max-entry-count设置为0.4

执行命令

lmdeploy chat /root/models/internlm2-chat-1_8b --cache-max-entry-count 0.4

image-20240415102911738.png

与模型进行对话。

image-20240415102945377.png

此时,可以看到显存占用降低为 6192 MB

设置KV Cache最大占用比例为0.4,开启W4A16量化,以命令行方式与模型对话。

使用W4A16量化模型

LMDeploy使用AWQ算法,实现模型4bit权重量化。推理引擎TurboMind提供了非常高效的4bit推理cuda kernel,性能是FP16的2.4倍以上。它支持以下NVIDIA显卡:

  • 图灵架构(sm75):20系列、T4
  • 安培架构(sm80,sm86):30系列、A10、A16、A30、A100
  • Ada Lovelace架构(sm90):40 系列

运行前,首先安装一个依赖库。

pip install einops==0.7.0

然后运行命令对模型进行量化,量化后的模型输出到/root/models/internlm2-chat-1_8b-4bit

lmdeploy lite auto_awq /root/models/internlm2-chat-1_8b --calib-dataset 'ptb' --calib-samples 128 --calib-seqlen 1024 --w-bits 4 --w-group-size 128 --work-dir /root/models/internlm2-chat-1_8b-4bit

image-20240415103357158.png

image-20240415105303397.png

设置KV Cache最大占用比例为0.4,以命令行方式与模型对话

执行命令,设置KV Cache最大占用比例为0.4,以命令行方式与量化后的模型对话。

lmdeploy chat /root/models/internlm2-chat-1_8b-4bit --model-format awq --cache-max-entry-count 0.4

image-20240415110558816.png

image-20240415110620287.png

此时,可以看到显存占用进一步降低为 4936 MB

有关LMDeploy的lite功能的更多参数可通过-h命令查看。

lmdeploy lite -h

image-20240415111516979.png

以API Server方式启动 lmdeploy,开启W4A16量化,调整KV Cache的占用比例为0.4

通过以下命令启动API服务器,推理量化后的internlm2-chat-1_8b-4bit模型:

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

image-20240415111741300.png

使用命令行客户端与模型对话

执行命令,使用命令行客户端与模型对话。

lmdeploy serve api_client http://localhost:23333

image-20240415112003808.png

使用网页方式与模型对话

建立本地端口与开发机的端口映射后,通过浏览器访问相关端口,打开API页面。

image-20240415112456585.png

在接口/v1/chat/comletions中设置相应的参数,调用接口与模型对话。

image-20240415112912411.png

使用Gradio网页客户端与模型对话

使用Gradio作为前端,启动网页客户端。

lmdeploy serve gradio http://localhost:23333 --server-name 0.0.0.0 --server-port 6006

image-20240415113817803.png

在本地打开浏览器,访问Gradio界面,与模型进行对话。

image-20240415113915144.png

使用Python代码集成的方式运行

首先,创建一个文件pipeline_kv.py

mkdir -p /root/code/lmdeploy && cd /root/code/lmdeploy

vi pipeline_kv.py

cat pipeline_kv.py

在文件pipeline_kv.py中输入代码,设置cache_max_entry_count=0.4

from lmdeploy import pipeline, TurbomindEngineConfig

# 调低 k/v cache内存占比调整为总显存的 20%
backend_config = TurbomindEngineConfig(cache_max_entry_count=0.4)

pipe = pipeline('/root/models/internlm2-chat-1_8b',
                backend_config=backend_config)
response = pipe(['Hi, pls intro yourself', '成都是'])
print(response)

执行命令运行代码。

python pipeline_kv.py

image-20240415114603650.png

image-20240415114637690.png

使用 LMDeploy 运行视觉多模态大模型 llava

在conda虚拟环境中安装必要的依赖库。

pip install git+https://github.com/haotian-liu/LLaVA.git@4e2277a060da264c4f21b364c867cc622c945874

image-20240415114843321.png

image-20240415115032193.png

切换到24GB显存的开发机。

通过命令行方式运行视觉多模态大模型 llava

创建文件pipeline_llava.py

mkdir -p /root/code/lmdeploy && cd /root/code/lmdeploy

vi pipeline_llava.py

cat pipeline_llava.py

在文件pipeline_llava.py中输入代码。

from lmdeploy.vl import load_image
from lmdeploy import pipeline, TurbomindEngineConfig


backend_config = TurbomindEngineConfig(session_len=8192) # 图片分辨率较高时请调高session_len
# pipe = pipeline('liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config) 非开发机运行此命令
pipe = pipeline('/share/new_models/liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config)

image = load_image('https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg')
response = pipe(('describe this image', image))
print(response)

运行代码。

python pipeline_llava.py

image-20240415115936689.png

通过Gradio运行视觉多模态大模型 llava

创建文件 gradio_llava.py

mkdir -p /root/code/lmdeploy && cd /root/code/lmdeploy

vi gradio_llava.py

cat gradio_llava.py

在文件 gradio_llava.py中输入代码。

import gradio as gr
from lmdeploy import pipeline, TurbomindEngineConfig


backend_config = TurbomindEngineConfig(session_len=8192) # 图片分辨率较高时请调高session_len
# pipe = pipeline('liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config) 非开发机运行此命令
pipe = pipeline('/share/new_models/liuhaotian/llava-v1.6-vicuna-7b', backend_config=backend_config)

def model(image, text):
    if image is None:
        return [(text, "请上传一张图片。")]
    else:
        response = pipe((text, image)).text
        return [(text, response)]

demo = gr.Interface(fn=model, inputs=[gr.Image(type="pil"), gr.Textbox()], outputs=gr.Chatbot())
demo.launch()

运行代码。

python gradio_llava.py

image-20240415120521591.png

打开浏览器,访问Gradio界面,选择图片,进行对话。

图片描述。

image-20240415120851776.png

营销文案。

image-20240415120958701.png

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

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

相关文章

Spring Batch

Spring是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及W…

线上废品回收小程序,数字化回收模式带来的发展优势

近几年,废品回收行业的发展如火如荼,不少年轻人开始进入到市场中,进行回收创业模式。 随着废品回收市场规模的扩大,关于回收的方式也越来越多样,为居民提供了更多的便利,其中线上预约回收小程序就是一种新…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode:第 491 题 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等&…

【配电网故障定位】基于二进制蝙蝠算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#80】

文章目录 【获取资源请见文章第6节:资源获取】1. 配电网故障定位2. 二进制蝙蝠算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节:资源获取】 1. 配电网故障定位 配电系统故障定位,即在配电网络发生故障的…

基于SpringBoot的在线五子连珠的设计与实现,前端采用vue框架;后端采用SpringBoot,mybatis

介绍 基于SpringBoot的在线五子连珠的设计与实现,主要是设计一款五子棋游戏,涉及登录注册的功能,人机对战、联机对战和积分排行榜的功能。其中人机对战中,电脑采用的是采用了一种基于局面分析的评分算法来确定机器人的下一步落子…

基于Python dlib的实时人脸识别,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

CSS背景设置

目录 背景颜色 背景图片 背景平铺 背景图片位置 背景图片固定 背景样式综合书写 背景色半透明 通过 CSS 背景属性,可以给页面元素添加背景样式。背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等 背景颜色 在CSS中可以使用bac…

Count the Values of k

目录 题目总览 思路 参考代码 原题链接: CF1933C Turtle Fingers: Count the Values of k 题目总览 # Turtle Fingers: Count the Values of k ## 题面翻译 给你三个**正**整数 $a$ 、 $b$ 和 $l$ ( $a,b,l>0$ )。 可以证明,总有一种方法可以选择*…

机器学习——模型融合:Stacking算法

机器学习——模型融合:Stacking算法 在机器学习中,模型融合是一种常用的方法,它可以提高模型的泛化能力和预测性能。Stacking算法(又称为堆叠泛化)是一种强大的模型融合技术,它通过组合多个基本分类器的预…

hive了解系列一

“ 随着智能手机的普及,互联网时代红利的爆发,用户数量和产生的数据也越发庞大。为了解决这个问题,提高数据的使用价值。 Hadoop生态系统就被广泛得到应用。 在早期,Hadoop生态系统就是为处理如此大数据集而产生的一个合乎成本效益…

C# 整数转罗马数字

罗马数字包含以下七种字符:I,V,X,L,C,D和M。 例如,罗马数字2写做 II ,即为两个并列的 1。12 写做XII,即为XII。27写做 XXVII,即为XXV II 。 通常情况下,罗马数字中小的数字在大的数字…

MoJoCo 入门教程(七)XML 参考

系列文章目录 前言 表格第二列中的符号含义如下: ! 必填元素,只能出现一次 ? 可选元素,只能出现一次 * 可选元素,可多次出现 R 可选元素,可递归出现多次 一、简介 本章是 MuJoCo 中使用的 MJCF 建模语言的参考手册。…

03-JAVA设计模式-享元模式

享元模式 什么是享元模式 享元模式(Flyweight Pattern)是一种对象结构型设计模式,用于减少创建对象的数量,以减少内存占用和提高系统性能。它通过共享已经存在的对象来避免创建大量相似的对象,从而降低内存消耗。 在…

vue3.0项目生成标签条形码(插件:jsbarcode)并打印(插件:Print.js)支持pda扫码枪扫描

文章目录 功能场景生成条形码设置打印功能踩坑 功能场景 功能场景:供应链中对一些货品根据赋码规则进行赋码,赋码之后生成根据赋码结果生成条形码,执行打印功能,贴在货品之上,打印之后可以用pda的手枪进行扫描&#x…

蓝桥杯2024年第十五届省赛真题-数字接龙

思路:DFS,因为输入的i,j的顺序导致,方向向量中x是行编号,y是列编号。方向向量可能和直觉上不同。 错的 //int dx[8]{0,1,1,1,0,-1,-1,-1}; //int dy[8]{1,1,0,-1,-1,-1,0,1}; 对的 int dx[]{-1,-1,0,1,1,1,0,-1}; int…

Hotcoin4月16日上新热门资产:头部RWA技术提供方Centrifuge(CFG)

Hotcoin持续为全球600万用户发掘优质潜力资产,热门币种交易上热币。一文快速了解今日上新资产:Centrifuge(CFG) 推荐指数 8.2 交易对 CFG/USDT 交易时间 4月16日 19:00 资产赛道 RWA 项目简介 Centrifuge是一个去中心化资产融资协议,专注于释放现实世界资…

计算机视觉——基于OpenCV和Python进行模板匹配

模板匹配? 模板匹配是它允许在一幅较大的图像中寻找是否存在一个较小的、预定义的模板图像。这项技术的应用非常广泛,包括但不限于图像识别、目标跟踪和场景理解等。 目标和原理 模板匹配的主要目标是在一幅大图像中定位一个或多个与模板图像相匹配的…

05.MySQL索引事务

1. 索引 1.1 概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现 1.2 作用 数据库中的表、数据、索引之间的关系,类似于书架上的…

链表创建的陷阱与细节

链表是线性表的一种,它在逻辑结构上是连续的,在物理结构上是非连续的。 也就是说链表在物理空间上是独立的,可能是东一块西一块的。如下顺序表和链表在内存空间上的对比: 而链表的每一块空间是如何产生联系实现在逻辑结构上是连续…

pycharm永久改变sys.path

进入pycharm,选择file->settings->interpreter 在这里选择图中所示show all 再单击左上角减号右侧第三个,长得像思维导图的图标 之后添加你的路径,确认即可