一、按照教程配置环境
二、LMDeploy验证启动模型文件
此时InternStudio右上角的资源监控如下
也可以通过nvidia-smi指令查看资源使用情况
三、LMDeploy与InternLM2.5
1. LMDeploy API部署InternLM2.5
首先让我们进入创建好的conda环境,并通下命令启动API服务器,部署InternLM2.5模型:
conda activate lmdeploy
lmdeploy serve api_server \
/root/models/internlm2_5-7b-chat \
--model-format hf \
--quant-policy 0 \
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1
命令解释:
lmdeploy serve api_server
:这个命令用于启动API服务器。/root/models/internlm2_5-7b-chat
:这是模型的路径。--model-format hf
:这个参数指定了模型的格式。hf
代表“Hugging Face”格式。--quant-policy 0
:这个参数指定了量化策略。--server-name 0.0.0.0
:这个参数指定了服务器的名称。在这里,0.0.0.0
是一个特殊的IP地址,它表示所有网络接口。--server-port 23333
:这个参数指定了服务器的端口号。在这里,23333
是服务器将监听的端口号。--tp 1
:这个参数表示并行数量(GPU数量)。
在shell 连接本地端口
ssh -CNg -L 23333:127.0.0.1:23333 root@ssh.intern-ai.org.cn -p 你的ssh端口号
然后打开浏览器,访问http://127.0.0.1:23333
看到如下界面即代表部署成功。
2. 以命令行的形式连接API服务器
关闭http://127.0.0.1:23333
网页,但保持终端和本地窗口不动,在终端新建一个窗口
输入指令并两次回车
3. 以Gradio网页形式连接API服务器
保持第一个终端不动,在新建终端中输入exit
退出。
输入以下命令,使用Gradio作为前端,启动网页。
lmdeploy serve gradio http://localhost:23333 \ --server-name 0.0.0.0 \ --server-port 6006
稍待片刻,等终端如下图所示便保持两个终端不动。
出现以上界面时,关闭powershell并重新打开,重复连接ssh端口,因为此时端口发生改变。
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p <你的ssh端口号>
打开浏览器,访问地址http://127.0.0.1:6006
,然后就可以与模型尽情对话了。
四、LMDeploy Lite
1. 设置在线 kv cache int4/int8 量化
自 v0.4.0 起,LMDeploy 支持在线 kv cache int4/int8 量化,量化方式为 per-head per-token 的非对称量化。此外,通过 LMDeploy 应用 kv 量化非常简单,只需要设定 quant_policy
和cache-max-entry-count
参数。目前,LMDeploy 规定 quant_policy=4
表示 kv int4 量化,quant_policy=8
表示 kv int8 量化。
通过以下指令部署API
lmdeploy serve api_server \
/root/models/internlm2_5-1_8b-chat \
--model-format hf \
--quant-policy 4 \
--cache-max-entry-count 0.4\
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1
内存占用情况如下所示:
2. W4A16 模型量化和部署
使用1.8B进行量化和部署
lmdeploy lite auto_awq \
/root/models/internlm2_5-1_8b-chat \
--calib-dataset 'ptb' \
--calib-samples 128 \
--calib-seqlen 2048 \
--w-bits 4 \
--w-group-size 128 \
--batch-size 1 \
--search-scale False \
--work-dir /root/models/internlm2_5-1_8b-chat-w4a16-4bit
通过对比量化前后的模型的大小
五、LMDeploy与InternVL2
InternVL2-26B需要约70+GB显存,但是为了让我们能够在30%A100上运行,需要先进行量化操作,这也是量化本身的意义所在——即降低模型部署成本
1. W4A16 模型量化和部署
conda activate lmdeploy
lmdeploy lite auto_awq \
/root/models/InternVL2-26B \
--calib-dataset 'ptb' \
--calib-samples 128 \
--calib-seqlen 2048 \
--w-bits 4 \
--w-group-size 128 \
--batch-size 1 \
--search-scale False \
--work-dir /root/models/InternVL2-26B-w4a16-4bit
等待推理完成即可看到models对应的模型文件
2. W4A16 量化+ KV cache+KV cache 量化
此时显存占用约为18G
当切换到25G显存(30%A100)时,此时显存占用变为12.6G,主要受kv cache的影响
因此当使用50%A100算力时,模型运行占用显存会存在高于30%A100的情况
3. LMDeploy API部署InternVL2
通过以下命令启动API服务器,部署InternVL2模型:
lmdeploy serve api_server \
/root/models/InternVL2-26B-w4a16-4bit/ \
--model-format awq \
--quant-policy 4 \
--cache-max-entry-count 0.1 \
--server-name 0.0.0.0 \
--server-port 23333 \
--tp 1
以命令行形式连接API服务器,生成内容如下:
六、LMDeploy之FastAPI与Function call
1. API开发
导入openai模块中的OpenAI类并运行lmdeploy.py文件,结果如下
2. Function Call
使用internlm2.5封装API,计算(3+5)*2,运行结果如下