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

书生·浦语大模型全链路开源体系-第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.2conda activate lmdeploypip 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/lmdeployvi pipeline_transformer.pycat pipeline_transformer.py

文件内容为:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLMtokenizer = 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/lmdeployvi pipeline_kv.pycat 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/lmdeployvi pipeline_llava.pycat pipeline_llava.py

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

from lmdeploy.vl import load_image
from lmdeploy import pipeline, TurbomindEngineConfigbackend_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/lmdeployvi gradio_llava.pycat gradio_llava.py

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

import gradio as gr
from lmdeploy import pipeline, TurbomindEngineConfigbackend_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)).textreturn [(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.mzph.cn/news/819296.shtml

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

相关文章

数据结构--栈,队列,串,广义表

3.栈 (先进后出) 栈是一种特殊的线性表,只能从一端插入或删除操作。 4.队列 4.1 4.1.1初始化 4.1.2判断队列是否为空 4.1.3判断队列是否为满 4.1.4入队 4.1.5出队 4.1.6打印队列 4.1.7销毁队列 5.串 5.1 串的定义 由零个或者任意多…

【安全】查杀linux上c3pool挖矿病毒xmrig

挖矿平台:猫池 病毒来源安装脚本 cat /root/c3pool/config.jsoncrontab -r cd /root/c3poolcurl -s -L http://download.c3pool.org/xmrig_setup/raw/master/setup_c3pool_miner.sh | LC_ALLen_US.UTF-8 bash -s 44SLpuV4U7gB6RNZMCweHxWug7b1YUir4jLr3RBaVX33Qxj…

vue实现前端打印效果

如图效果所示&#xff08;以下演示代码&#xff09; <template><div><el-button v-print"printObj" type"primary" plain click"handle">{{ text }}</el-button><div style"display: none"><div id…

224 基于matlab的优化工具箱优化函数

基于matlab的优化工具箱优化函数&#xff0c; 此工具箱中提供的算法包括&#xff1a; 灰狼优化器&#xff08;GWO&#xff09;&#xff0c;蚂蚁狮子优化器&#xff08;ALO&#xff09;&#xff0c;多功能优化器&#xff08;MVO&#xff09;&#xff0c;蜻蜓算法&#xff08;DA&…

【模拟】Leetcode 替换所有的问号

题目讲解 1576. 替换所有的问号 算法讲解 这里有两个特殊情况&#xff1a;如果&#xff1f;在第一个位置&#xff0c;只需要判断后面的符号&#xff1b; 如果&#xff1f;在最后一个位置&#xff0c;只需要判断前面的符号 class Solution { public:string modifyString(stri…

七月审稿之提升模型效果的三大要素:prompt、数据质量、训练策略(含Reviewer2和PeerRead)​

前言 我带队的整个大模型项目团队超过40人了&#xff0c;分六个项目组&#xff0c;每个项目组都是全职带兼职&#xff0c;且都会每周确定任务/目标/计划&#xff0c;然后各项目组各自做任务拆解&#xff0c;有时同组内任务多时 则2-4人一组 方便并行和讨论&#xff0c;每周文档…

OpenKylin设置root密码

前言 新安装的OpenKylin系统应该root用户没有设置密码&#xff0c;但是可以使用sudo -i 临时获取root权限&#xff0c;不影响正常使用 当前是root用户 1、终端输入passwd命令 passwd2、按照提示输入新密码和确认密码 当前非root用户 1、终端输入sudo passwd root 命令 s…

【计算机毕业设】智慧食堂管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

cookie与session及其区别

一、cookie 1. 为什么需要cookie&#xff1f; web程序使用HTTP协议进行传输&#xff0c;而HTTP协议是无状态的协议&#xff08;即对事务处理无记忆性&#xff0c;如果后续处理需要使用前面的信息&#xff0c;只能重传&#xff0c;导致每次连接传送的数据量增大&#xff09;。c…

【VUE】Vue项目打包报告生成:让性能优化触手可及

Vue项目打包报告生成&#xff1a;让性能优化触手可及 Vue.js是一款流行的前端框架&#xff0c;开发者在使用Vue.js构建项目时&#xff0c;生产环境的性能优化尤为重要。为了帮助开发者分析和优化打包出来的资源&#xff0c;生成打包报告是一个不可或缺的步骤。本文将介绍几种在…

图深度学习(一):介绍与概念

目录 一、介绍 二、图的数据结构 三、图深度学习的基本模型 四、图深度学习的基本操作和概念 五、训练过程 六、主要应用场景 七、总结 一、介绍 图深度学习是将深度学习应用于图形数据结构的领域&#xff0c;它结合了图论的概念和深度学习的技术&#xff0c;用以处理和…

如何在浏览器Web前端在线编辑PPT幻灯片?

有时候在项目中我们会遇到需要在网页在线打开并编辑PPT文档保存到本地或者服务器指定位置&#xff0c;猿大师办公助手可以很方便的调用本机Office实现在网页上编辑PPT幻灯片&#xff0c;效果与本机Office打开PPT完全一样。 猿大师办公助手支持完整嵌入模式&#xff0c;也就是本…

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你&#xff0c;找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的&#xff0c;其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别&#xff0c;实话实说感觉比现在效果好。是因为现在的注意力都在tra…

开源模型应用落地-chatglm3-6b-批量推理-入门篇(四)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

Normalizing Flows

需要学的是神经网络 f f f, 用于完成从source distribution (Pz)&#xff08;latent space&#xff0c;一般为高斯分布&#xff09;到 target distribution (Px) 的映射。 Normalizing Flows 是一种强大的生成模型&#xff0c;它通过学习一个可逆且易于计算的转换来将复杂的概…

Maven 总结

文章目录 第一章 Maven概述第一节 为什么要学习Maven&#xff1f;1、从『构建』角度解释①个人开发流程②团队开发流程 2、从『依赖』角度解释①jar包的规模②jar包的来源③jar包之间的依赖关系 第二节 What&#xff1f;什么是Maven&#xff1f;第二节 什么是Maven&#xff1f;…

FANUC机器人单轴零点标定的具体方法(全轴零点标定不方便时可采用)

FANUC机器人单轴零点标定的具体方法(全轴零点标定不方便时可采用) 前面和大家分享了FANUC机器人进行零点标定的原因和方法,具体可参考以下链接中的内容:: FANUC机器人进行零点标定的目的和具体方法步骤详解

封装原生html的table处理方法【参数类似eltable】

直接跑html即可 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>封装原生talbe</title> </…

Centos7下docker的jenkins配置启动vue、springboot生产环境

个人记录 上篇 Centos7下docker安装jenkins / Gitee上传私有仓库 安装插件 新建任务 多分支流水线 任务名称&#xff1a;ks-springboot&#xff08;后端&#xff09;/ ks-vue3&#xff08;前端&#xff09; 分支源 增加源&#xff1a;Git gitee复制git链接 https://g…

ECMA进阶1之从0~1搭建react同构体系项目1

ECMA进阶 ES6项目实战前期介绍SSRpnpm 包管理工具package.json 项目搭建初始化配置引入encode-fe-lint 基础环境的配置修改package.jsonbabel相关tsconfig相关postcss相关补充scripts脚本webpack配置base.config.tsclient.config.tsserver.config.ts src环境server端&#xff1…