书生·浦语大模型全链路开源体系-第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.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

wps使用Latex编辑公式没有Latex formula

wps使用Latex编辑公式没有Latex formula 1. 下载CTEX2. 下载LaTeXEE3. 配置Miktex4. 配置latexee5. 用管理员权限运行latexeqedit.exe6. wps插入latex公式 1. 下载CTEX 下载CTEX网址,我下载的下图这个,下载完了之后运行exe文件安装ctex。 2. 下载LaTe…

视频国标学习

总体介绍 GB/T28181协议,全名叫《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是由中国国家标准委员会发布的一种国家级的标准。它主要对视频监控系统的各个方面做了明确的规定,使得不同厂商生产的视频监控设备能够相互连通&am…

【C++】<入门>C++入门基础知识

C入门 1. 入门0. 本节知识点熟悉目的1. C关键字(C98) 2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理--名字修饰(name Ma…

IntelliJ IDEA 2023中文--让编程更高效、更智能

IntelliJ IDEA 2023是一款功能强大的集成开发环境(IDE),专为Java开发者打造。它以其智能、高效和人性化的特点,帮助开发者更快、更好地编写代码。IntelliJ IDEA 2023支持多种语言和框架,包括Java、Kotlin、Spring等&am…

SpringCloud之LoadBalancer负载均衡器的简单使用

SpringCloud之LoadBalancer负载均衡器的简单使用 loadbalancer用于对提供服务的集群做一个节点的选取规则。 如图所示&#xff0c;load balancer集成在调用方 示例 创建loadbalance-base模块,并引入相关依赖 <dependencies><dependency><groupId>org.spr…

Unity笔记之下拉刷新列表

这样的效果&#xff1b; 代码&#xff1a; using System; using System.Collections; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class ScrollRectUpdateView : Mon…

解锁创意无限,体验全新Adobe Illustrator 2021 for mac/Win中文版

在数字化创意的浪潮中&#xff0c;Adobe Illustrator 2021中文版无疑是设计师们的得力助手。这款软件集高效、便捷、创新于一体&#xff0c;无论是Mac还是Windows用户&#xff0c;都能在其中找到属于自己的创意空间。 Adobe Illustrator 2021中文版延续了其强大的矢量图形处理…

5.2 mybatis之autoMappingBehavior作用

文章目录 1. NONE关闭自动映射2. PARTIAL非嵌套结果映射3. FULL全自动映射 众所周知mybatis中标签< resultMap >是用来处理数据库库字段与java对象属性映射的。通常java对象属性&#xff08;驼峰格式&#xff09;与数据库表字段&#xff08;下划线形式&#xff09;是一 一…

万界星空科技商业开源MES+项目合作+低代码平台

今天我想和大家分享的是一套商业开源的 MES制造执行管理系统。对于制造业而言&#xff0c;MES 是一个至关重要的系统&#xff0c;它可以帮助企业提高生产效率、优化资源利用、提高产品质量&#xff0c;从而增强市场竞争力。什么是 MES&#xff1f; MES 是指通过计算机技术、自动…

【数据库】表的增删改(CUD)

目录 一、insert 插入 1.单行插入&#xff1a; 2.多行插入&#xff1a; (1) insert into 插入&#xff1a; (2) replace into 替换插入&#xff1a; (3) 图片插入 &#xff1a; 二、update 修改 三、delete 删除 一、insert 插入 语法&#xff1a; INSERT INTO table_name…

尚硅谷html5+css3(4)浮动

1.浮动的概念 <head><style>.box1 {width: 200px;height: 200px;background-color: orange;/*通过浮动可以使一个元素向其父元素的左侧或右侧移动使用float属性设置子资源的浮动可选值&#xff1a;none默认值&#xff0c;元素不浮动left向左浮动right向右浮动注意…

VSCode中vue的packag.json报错:unable to load schema from‘ http://json.schema‘...问题解决

package.json有这个报错&#xff0c;类似于这种问题一般是网络连接有问题&#xff0c;无法加载重启一下就好。 但是如果是没有网络或者云桌面等环境不能连接外网&#xff0c;就在设置中把这个设置一下&#xff0c;这样就不报错了&#xff0c;根据需要选择处理。

系统开发实训小组作业week7 —— 优化系统开发计划

目录 1. 建立规则&#xff0c;仪式&#xff0c;流程&#xff0c;模式 2. 给好行为正面的反馈 3. 明确指出不合适的行为&#xff0c;必要时调整人员 在 “系统开发实训课程” 中&#xff0c;我们小组的项目是 “电影院会员管理系统” 。在项目的开发过程中&#xff0c;我们遇…

云原生:企业数字化转型的引擎与未来

一&#xff0c;引言 随着信息技术的飞速发展&#xff0c;企业数字化转型已成为时代的必然趋势。在这场深刻的变革中&#xff0c;云原生技术以其独特的优势&#xff0c;逐渐成为推动企业数字化转型的核心动力。本文将详细探讨云原生技术的内涵、发展历程&#xff0c;以及在企业数…

ASP.NET MVC企业级程序设计 (EF+三层架构+MVP实现查询数据)

目录 效果图 实现过程 1创建数据库 2创建项目文件 3创建控制器&#xff0c;右键添加&#xff0c;控制器 ​编辑 注意这里要写Home​编辑 创建成功 数据模型创建过程之前作品有具体过程​编辑 4创建DAL 5创建BLL 6创建视图&#xff0c;右键添加视图 ​编辑 7HomeContr…

ArcGIS Server 10.8.1安装

目录 单机部署 ArcGIS Web Adaptor 优点 缺点 ArcGIS Server 使用的端口 ArcGIS GeoAnalytics Server 使用的端口 官方安装文档&#xff1a; ArcGIS Server 系统要求—ArcGIS Enterprise | ArcGIS Enterprise 文档 单机部署 ArcGIS Web Adaptor 在此示例中&#xff0c…

【Unity】RPG小游戏创建游戏中的交互

RPG小游戏创建游戏中的交互 创建可交互的物体的公共的父类&#xff08;Interactable&#xff09;InteractableObject 类NPCObject 类PickableObject 类 创建可交互的物体的公共的父类&#xff08;Interactable&#xff09; InteractableObject 类 using System.Collections; u…

【深入理解Java IO流0x0A】NIO实战-网络聊天室

本篇博客将进行NIO编程实战&#xff0c;实现一个简单聊天室。 我们来通过 SocketChannel 和 ServerSocketChannel 实现一个 0.1 版的聊天室&#xff0c;先说一下需求&#xff0c;比较简单&#xff0c;服务端启动监听客户端请求&#xff0c;当客户端向服务器端发送信息后&#x…

Unity Shader 流光 边缘光

前言 Unity2021.3.23 一、实现原理 Time控制UV的变化,再采样一张流光贴图.即可实现流光效果。 二、效果及源码展示 1.流光效果 效果描述: 1.边缘光(菲尼尔), 2.从上到下扫描光. 效果图如下: 代码如下&#xff1a; Shader "Unlit/ScanCode" {Properties{_MainTe…

SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出

目录 介绍 快速开始 引入依赖 简单导出 定义实体类 自定义转换器 定义接口 测试接口 复杂导出 自定义注解 定义实体类 数据映射与平铺 自定义单元格合并策略 定义接口 测试接口 一对多导出 自定义单元格合并策略 测试数据 简单导入 定义接口 测试接口 参…