第五课 LMDeploy 量化部署 LLM-VLM 实践 笔记与作业

第五课 LMDeploy 量化部署 LLM-VLM 实践 笔记与作业

一、基础理论

1.为什么要模型部署

部署定义:

在人工智能领域,模型部署是实现深度学习算法落地的关键步骤。简单来说,模型部署就是把训练好的深度学习模型在特定环境中运行的过程。

应用实例:

服务器端:CPU部署,单GPT/TPU/NPU,多卡集群部署等。
移动端/边缘端:移动机器人,手机。

2.大模型部署的痛难点

计算量巨大
在这里插入图片描述
内存开销巨大
在这里插入图片描述
访存瓶颈以及动态请求不确定性高
在这里插入图片描述

3.模型部署的方法

模型剪枝:简而言之就是减少不需要的参数。
在这里插入图片描述
知识蒸馏:就是将模型压缩训练成一个稍小模型。
在这里插入图片描述
**模型量化:**主要是降低访存量减少计算时间。
在这里插入图片描述

3、LMDeploy简介

LMDeploy简而言之,是一套解决大模型的量化、部署、服务的解决方案套件。
在这里插入图片描述
核心功能:模型高效推理;模型量化压缩;服务化部署。
在这里插入图片描述

二、课程实操

1、LMDeploy环境部署

1.1 创建开发机
使用算力平台(https://studio.intern-ai.org.cn/)创建开发机,填写开发机名称;选择镜像Cuda12.2-conda;选择10% A100*1GPU;点击“立即创建”。创建好后进入开发机,选择terminal,见下图(创建开发机详细过程见第二课相关内容)。
在这里插入图片描述
1.2 创建conda环境
使用InternStudio开发机创建conda环境(该方法的好处就在于省时省力,在本地创建conda环境需要配置torch,cuda等的版本,比较繁琐,也容易出现一些莫名的版本不兼容情况),打开命令行终端,创建一个名为lmdeploy的环境:

studio-conda -t lmdeploy -o pytorch-2.1.2

在这里插入图片描述
1.3 安装LMDeploy
激活创建的虚拟环境,安装0.3.0版本的lmdeploy。

conda activate lmdeploy
pip install lmdeploy[all]==0.3.0

在这里插入图片描述
安装完成!

2、LMDeploy模型对话

2.1 Huggingface与TurboMind说明

HuggingFace
HuggingFace是什么呢,可以理解为她是一个网站、社区以及一个大模型文件格式的集合体,其上有很多知名公司贡献的大模型代码、数据集和模型。是一个针对深度学习模型和数据集的在线托管社区,如果你有数据集或者模型想对外分享,网盘又不太方便,就不妨托管在HuggingFace。托管在HuggingFace社区的模型通常采用HuggingFace格式存储,简写为HF格式。HuggingFace社区的访问通常需要科学上网。因此建议国内可以使用阿里巴巴的MindScope社区,或者上海AI Lab搭建的OpenXLab社区,上面托管的模型也通常采用HF格式。

TurboMind
TurboMind是LMDeploy团队开发的一款关于LLM推理的高效推理引擎,它的主要功能包括:LLaMa 结构模型的支持,continuous batch 推理模式和可扩展的 KV 缓存管理器。
TurboMind推理引擎仅支持推理TurboMind格式的模型。因此,TurboMind在推理HF格式的模型时,会首先自动将HF格式模型转换为TurboMind格式的模型。该过程在新版本的LMDeploy中是自动进行的,无需用户操作。

2.2 下载模型
开发机共享目录中准备好了常用的预训练模型,可以运行如下命令查看:

ls /root/share/new_models/Shanghai_AI_Laboratory/

可以看到共享文件夹下已经有了如下系列的模型
在这里插入图片描述
InternStudio开发机上下载模型
进入一个你想要存放模型的目录,本文放置在Home目录。执行如下指令:

cd ~

由开发机的共享目录软链接模型:

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

执行完如上指令后,可以运行“ls”命令。可以看到,当前目录下已经多了一个internlm2-chat-1_8b文件夹,即下载好的预训练模型。
在这里插入图片描述

2.3 使用Transformer库运行模型
Transformer库是Huggingface社区推出的用于运行HF模型的官方库。
在2.2中,已经下载好了InternLM2-Chat-1.8B的HF模型。先用Transformer来直接运行InternLM2-Chat-1.8B模型,后面对比一下LMDeploy的使用感受。
打开VSCode。
在这里插入图片描述
在左边栏空白区域单击鼠标右键,点击Open in Intergrated Terminal。打开终端。
在这里插入图片描述在这里插入图片描述
在终端中输入如下指令,新建pipeline_transformer.py。

touch /root/pipeline_transformer.py

左侧窗口栏点击打开pipeline_transformer.py文件,将以下内容复制粘贴进入pipeline_transformer.py

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("/root/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/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)

在这里插入图片描述
按Ctrl+S键保存(Mac用户按Command+S)。
回到终端,激活conda环境。

conda activate lmdeploy

运行python代码:

python /root/pipeline_transformer.py

输出结果如下:
在这里插入图片描述
2.4 使用LMDeploy与模型对话
首先激活创建好的conda环境:conda activate lmdeploy
使用LMDeploy与模型进行对话的通用命令格式为:lmdeploy chat [HF格式模型路径/TurboMind格式模型路径]
所以本次实验使用代码:lmdeploy chat /root/internlm2-chat-1_8b
在这里插入图片描述
这里就可以与InternLM2-Chat-1.8B大模型对话了。比如我这里输入“心情抑郁怎么办?”,输入两下回车后,得到结果如下:
在这里插入图片描述
这里明显能感觉到,回答速度几乎可以说是秒回。不得不夸赞一下LMDeploy的优化能力确实不一般。
输入“exit”并按两下回车,可以退出对话。
在这里插入图片描述
有关LMDeploy的chat功能的更多参数可通过-h命令查看。

lmdeploy chat -h

3、LMDeploy模型量化(lite)

为什么要模型量化?
量化是一种以参数或计算中间结果精度下降换空间节省(以及同时带来的性能提升)的策略。
首先需要先明白两个概念:

  • 计算密集(compute-bound): 指推理过程中,绝大部分时间消耗在数值计算上;针对计算密集型场景,可以通过使用更快的硬件计算单元来提升计算速度。
  • 访存密集(memory-bound):指推理过程中,绝大部分时间消耗在数据读取上;针对访存密集型场景,一般通过减少访存次数、提高计算访存比或降低访存量来优化。
    常见的 LLM 模型由于 Decoder Only 架构的特性,实际推理时大多数的时间都消耗在了逐 Token 生成阶段(Decoding 阶段),是典型的访存密集型场景。
    那么,如何优化 LLM 模型推理中的访存密集问题呢? 我们可以使用KV8量化和W4A16量化。KV8量化是指将逐 Token(Decoding)生成过程中的上下文 K 和 V 中间结果进行 INT8 量化(计算时再反量化),以降低生成过程中的显存占用。W4A16 量化,将 FP16 的模型权重量化为 INT4,Kernel 计算时,访存量直接降为 FP16 模型的 1/4,大幅降低了访存成本。Weight Only 是指仅量化权重,数值计算依然采用 FP16(需要将 INT4 权重反量化)。
3.1 设置最大KV Cache缓存大小

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.8),运行1.8B模型。

lmdeploy chat /root/internlm2-chat-1_8b

此时显存占用情况如下图。
在这里插入图片描述
exit 退出模型,改变–cache-max-entry-count参数,设为0.5。

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

在这里插入图片描述
再次查看右上角资源监视器中的显存占用情况。可以看到显存占用降低到了6600M.
再次退出对话,把--cache-max-entry-count参数设置为0.01,约等于禁止KV Cache占用显存。

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

在这里插入图片描述
然后与模型对话,可以看到,此时显存占用仅为4560MB,代价是会降低模型推理速度。
在这里插入图片描述

3.2、使用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

执行如下命令,完成模型量化工作。

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

运行时间较长。量化工作结束后如下图:
在这里插入图片描述

新的HF模型被保存到internlm2-chat-1_8b-4bit目录。下面使用Chat功能运行W4A16量化后的模型。

lmdeploy chat /root/internlm2-chat-1_8b-4bit --model-format awq

此时与模型对话,观察显存开销,此时为7432M,如下图。
在这里插入图片描述
为了更加明显体会到W4A16的作用,exit退出对话后,我们将KV Cache比例再次调为0.01,查看显存占用情况。

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

此时与模型对话,观察显存开销,明显降低到了2472M,见下图:
在这里插入图片描述

4.LMDeploy服务(serve)

为什么需要LMDeploy服务(serve)?在实际应用过程中,大部分的应用场景是需要大模型部署在后端服务器上,而前段客户只需要通过web、手机应用等客户端来调用API接口与后端的大模型实现交互。架构如下:
在这里插入图片描述
从架构上整个服务流程分成下面几个模块。

  • 模型推理/服务。主要提供模型本身的推理,一般来说可以和具体业务解耦,专注模型推理本身性能的优化。可以以模块、API等多种方式提供。
  • API Server。中间协议层,把后端推理/服务通过HTTP,gRPC或其他形式的接口,供前端调用。
  • Client。可以理解为前端,与用户交互的地方。通过通过网页端/命令行去调用API接口,获取模型推理/服务。
    以上的划分是一个相对完整的模型,但在实际中这并不是绝对的。比如可以把“模型推理”和“API Server”合并,有的甚至是三个流程打包在一起提供服务。
4.1 启动API服务器

通过以下命令启动API服务器,推理internlm2-chat-1_8b模型:

lmdeploy serve api_server \
    /root/internlm2-chat-1_8b \
    --model-format hf \
    --quant-policy 0 \
    --server-name 0.0.0.0 \
    --server-port 23333 \
    --tp 1

其中,model-format、quant-policy这些参数是与量化推理模型一致的;server-name和server-port表示API服务器的服务IP与服务端口;tp参数表示并行数量(GPU数量)。
通过运行以上指令启动API服务器,注意请勿关闭该窗口,后面需要新建客户端连接该服务。
在这里插入图片描述
出现上图状态,说明已经建立好了服务。
注意,这一步由于Server在远程服务器上,所以本地需要做一下ssh转发才能直接访问。在你本地打开powershell,输入命令如下:

ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的ssh端口号

ssh 端口号就是下面图片开发机的SSH端口,本人的为 36116,
在这里插入图片描述
密码直接复制上图给的密码就好。待出现如下图的状态时
在这里插入图片描述
然后打开浏览器,访问http://127.0.0.1:23333。查看接口的具体使用说明,如下图所示。
在这里插入图片描述

4.2 命令行客户端连接API服务器

首先通过VS Code新建一个终端:
在这里插入图片描述
激活conda环境。conda activate lmdeploy
在这里插入图片描述
运行命令行客户端:

lmdeploy serve api_client http://localhost:23333

运行后,可以通过命令行窗口直接与模型对话:
在这里插入图片描述
这里其实VS新建的命令行终端就是前端,之前在命令行终端启动的服务就是后端。架构如下图:
在这里插入图片描述

4.3 网页客户端连接API服务器

关闭4.2使用的VSCode终端,但服务器端的终端不要关闭。
新建一个VSCode终端,激活conda环境。

conda activate lmdeploy

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

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

在这里插入图片描述
出现如上截图的情况,则运行成功。在电脑本地新建一个cmd终端,新开一个转发端口:

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

打开浏览器,访问地址http://127.0.0.1:6006;然后就可以与模型进行对话了!
在这里插入图片描述
这一步的使用架构是这样的:
在这里插入图片描述

5.Python代码集成

为什么要代码集成?简而言之,就是在一个具体项目中一行一行输入代码命令十分麻烦,需要一个python文件直接将需要执行的命令集成在一个文件里从而实现我们需要的功能。

5.1 Python代码集成运行1.8B模型

新建VScode终端,激活conda环境。

conda activate lmdeploy

新建Python源代码文件pipeline.py。

touch /root/pipeline.py

打开pipeline.py,填入以下内容。

from lmdeploy import pipeline

pipe = pipeline('/root/internlm2-chat-1_8b')
response = pipe(['Hi, pls intro yourself', '上海是'])
print(response)

保存后运行代码文件:

python /root/pipeline.py

得到如下结果。(这里跳出Segmentation fault (core dumped)的错误,不是代码问题,我查了一下服务端,说是显存超了。后面重新运行上述命令又好了。)
在这里插入图片描述
在这里插入图片描述

5.2 向TurboMind后端传递参数

在lmdeploy模型量化学习时,我们通过向lmdeploy传递附加参数,实现模型的量化推理,及设置KV Cache最大占用比例。在Python代码中,可以通过创建TurbomindEngineConfig,向lmdeploy传递参数。
以设置KV Cache占用比例为例,新建python文件pipeline_kv.py。

touch /root/pipeline_kv.py

打开pipeline_kv.py,填入如下内容:

from lmdeploy import pipeline, TurbomindEngineConfig

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

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

保存后运行python代码:

python /root/pipeline_kv.py

得到输出结果如下:
在这里插入图片描述

6.拓展部分

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

最新版本的LMDeploy支持了llava多模态模型,下面演示使用pipeline推理llava-v1.6-7b。注意,运行本pipeline最低需要30%的InternStudio开发机。在确保我们使用的开发机关闭的前提下调整配置至30%,再打开开发机进行操作实践。
激活conda环境,安装llava依赖库。

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

安装成功后如下显示:
在这里插入图片描述

新建一个python文件,比如pipeline_llava.py。

touch /root/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)

保存后运行pipeline。

python /root/pipeline_llava.py

得到输出结果如下:
在这里插入图片描述
官方的Llava模型对中文支持性不好,因此如果使用中文提示词,可能会得到出乎意料的结果,在代码里将response = pipe((‘describe this image’, image))改为response = pipe((‘请描述一下这张图片’, image)),得到的中文结果描述就会比较混乱,如下图。
在这里插入图片描述
通过Gradio来运行llava模型。新建python文件gradio_llava.py。

touch /root/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程序。

python /root/gradio_llava.py

本地打开终端,输入如下代码(我的是36116)及密码,成功后,即可通过ssh转发一下7860端口。

ssh -CNg -L 7860:127.0.0.1:7860 root@ssh.intern-ai.org.cn -p 36116

在这里插入图片描述
在这里插入图片描述

通过浏览器访问http://127.0.0.1:7860,即可使用。
初始界面如下:
在这里插入图片描述
随意上传一张图片,点击submit,就可以看看使用效果啦。我的结果如下:
在这里插入图片描述
整体来看,这个效果只是简单的描述了一下场景,只能说一般吧。比起灵笔2模型还是有点差距的。

6.2 使用LMDeploy运行第三方大模型

LMDeploy不仅支持运行InternLM系列大模型,还支持其他第三方大模型。支持的模型列表如下:
Model Size
Llama 7B - 65B
Llama2 7B - 70B
InternLM 7B - 20B
InternLM2 7B - 20B
InternLM-XComposer 7B
QWen 7B - 72B
QWen-VL 7B
QWen1.5 0.5B - 72B
QWen1.5-MoE A2.7B
Baichuan 7B - 13B
Baichuan2 7B - 13B
Code Llama 7B - 34B
ChatGLM2 6B
Falcon 7B - 180B
YI 6B - 34B
Mistral 7B
DeepSeek-MoE 16B
DeepSeek-VL 7B
Mixtral 8x7B
Gemma 2B-7B
Dbrx 132B
可以从Modelscope,OpenXLab下载相应的HF模型,下载好HF模型,下面的步骤就和使用LMDeploy运行InternLM2一样啦~

6.3 定量比较LMDeploy与Transformer库的推理速度差异

使用30%的InternStudio开发机环境,编写一个速度测试脚本感受LMDeploy与Transformer库推理速度的差异。
先来测试Transformer库推理Internlm2-chat-1.8b的速度,新建名称为benchmark_transformer的python文件,

touch /root/benchmark_transformer.py

填入以下内容:

import torch
import datetime
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("/root/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/internlm2-chat-1_8b", torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()

# warmup
inp = "hello"
for i in range(5):
    print("Warm up...[{}/5]".format(i+1))
    response, history = model.chat(tokenizer, inp, history=[])

# test speed
inp = "请介绍一下你自己。"
times = 10
total_words = 0
start_time = datetime.datetime.now()
for i in range(times):
    response, history = model.chat(tokenizer, inp, history=history)
    total_words += len(response)
end_time = datetime.datetime.now()

delta_time = end_time - start_time
delta_time = delta_time.seconds + delta_time.microseconds / 1000000.0
speed = total_words / delta_time
print("Speed: {:.3f} words/s".format(speed))

运行python脚本:

python benchmark_transformer.py

结果如下:
在这里插入图片描述
Transformer库的推理速度约为71.115 words/s,注意单位是words/s,word和token在数量上可以近似认为成线性关系。
下面来测试一下LMDeploy的推理速度,新建名称为benchmark_lmdeploy的python文件,

touch /root/benchmark_lmdeploy.py

填入一下内容:

import datetime
from lmdeploy import pipeline

pipe = pipeline('/root/internlm2-chat-1_8b')

# warmup
inp = "hello"
for i in range(5):
    print("Warm up...[{}/5]".format(i+1))
    response = pipe([inp])

# test speed
inp = "请介绍一下你自己。"
times = 10
total_words = 0
start_time = datetime.datetime.now()
for i in range(times):
    response = pipe([inp])
    total_words += len(response[0].text)
end_time = datetime.datetime.now()

delta_time = end_time - start_time
delta_time = delta_time.seconds + delta_time.microseconds / 1000000.0
speed = total_words / delta_time
print("Speed: {:.3f} words/s".format(speed))

运行脚本:

python benchmark_lmdeploy.py

得到运行结果:
在这里插入图片描述
LMDeploy的推理速度约为482.866 words/s,明显比Transformer库快的不是一点半点,大概6.5倍左右吧。

三、课程作业

基础作业(结营必做)

1、配置 LMDeploy 运行环境

见本文

二、课程实操 1、LMDeploy环境部署

内容。

2、 以命令行方式与 InternLM2-Chat-1.8B 模型对话

见本文

二、课程实操 2、LMDeploy模型对话

内容。

进阶作业

1、设置KV Cache最大占用比例为0.4,开启W4A16量化,以命令行方式与模型对话。(优秀学员必做)

在配置好LMDeploy环境以及下载好 InternLM2-Chat-1.8B模型基础上。
进入环境:

conda activate lmdeploy 

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

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

对话后结果如下:
在这里插入图片描述
退出对话,加载不设置–cache-max-entry-count 值的模型:

lmdeploy chat /root/internlm2-chat-1_8b

对话后结果如下:
在这里插入图片描述
上图显存占用为20944m,设置KV Cache最大占用比例为0.4时显存占用为12704m。可见减少KV Cache的值时可减少显存开销。

根据本文

二、课程实操 3.2节

,已经实现了 InternLM2-Chat-1.8B的W4A16量化,生成了internlm2-chat-1_8b-4bit的量化模型。
因此以命令行方式与模型对话。则需输入如下命令即可:

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

在这里插入图片描述
得到结果如下:
在这里插入图片描述

2、以API Server方式启动 lmdeploy,开启 W4A16量化,调整KV Cache的占用比例为0.4,分别使用命令行客户端与Gradio网页客户端与模型对话。(优秀学员必做)

在配置好相关环境及量化好的internlm2-chat-1_8b-4bit模型基础上,详见本文

二、课程实操1到3节

,运行如下代码:

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

这里需要注意的是,部署量化后的模型的–model-format 应为awq,而不是hf。出现如下结果,则服务端运行成功。
在这里插入图片描述
命令行客户端与模型对话
通过 VS Code 新建一个终端,激活 conda 环境

conda activate lmdeploy

运行后,可以通过命令行窗口直接与模型对话:
在这里插入图片描述
在这里插入图片描述
Gradio网页客户端与模型对话
确保服务器端的终端不要关闭。新建一个VSCode终端,激活conda环境。

conda activate lmdeploy

使用Gradio作为前端,启动网页客户端。需要说明的是,这里我gradio版本用的4.16.0,报错了,后面根据大佬提示降到了3.50.2版本,才可使用。

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

在这里插入图片描述

运行命令后,网页客户端启动。在电脑本地新建一个cmd终端,新开一个转发端口,(密码复制自己开发机SSH连接密码即可):

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

出现如下图片状态,说明连接成功。
在这里插入图片描述
打开浏览器,访问地址http://127.0.0.1:6006,就可以与模型进行对话了。
在这里插入图片描述
在服务terminal可以看到后台的请求聊天接口的日志。
在这里插入图片描述

3、使用W4A16量化,调整KV Cache的占用比例为0.4,使用Python代码集成的方式运行internlm2-chat-1.8b模型。(优秀学员必做)

新建VScode终端,激活conda环境。

conda activate lmdeploy

新建Python源代码文件pipeline-kv1.py。

touch /root/pipeline-kv1.py

填入代码:

from lmdeploy import pipeline, TurbomindEngineConfig

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

pipe = pipeline('/root/internlm2-chat-1_8b-4bit',
                backend_config=backend_config)
response = pipe(['Hi, pls intro yourself', '上海是'])
print(response)

保存后运行python代码:

python /root/pipeline-kv1.py

运行结果如下:
在这里插入图片描述

4、使用 LMDeploy 运行视觉多模态大模型 llava gradio demo。(优秀学员必做)

二、课程实操 6.1节

部分。

5、将 LMDeploy Web Demo 部署到 OpenXLab 。(待研究)
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值