创建开发机
创建一个使用10%GPU算力,cuda12.2系统的开发机,并启动。由于开发机的IO性能较差,开发机共享盘中已经创建好了本次实验所需要的conda环境
bash
# 启动共享的conda环境
conda activate /root/share/pre_envs/icamp3_demo
部署cli模型
创建目录
创建一个目录用于存放代码
bash
mkdir -p /root/demo
touch /root/demo/cli_demo.py
编写代码
代码的主要逻辑是使用transformers加载共享目录下的internlm2-chat-1_8b模型
python
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
# 模型地址
model_name_or_path = '/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b'
# 创建tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0') # 运行在第0块显卡上
# 创建大语言模型
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0')
# 切换到评估模式,推理时不进行反向传播,可以节约内存
model = model.eval()
# 系统提示词
system_prompt = """You are an AI assistant whose name is InternLM(书生·浦语).
- InternLM(书生·浦语)is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless.
- InternLM(书生·浦语)can understand and communicate fluently in the language chosen by the user such as English and 中文.
"""
# 对话历史记录
messages = [(system_prompt, '')]
print("====================Welcome to InternLM chatbot, type 'exit' to exit.=====================")
while True:
input_text = input("\User >>> ")
input_text = input_text.replace(' ', '')
if input_text == 'exit':
break
length = 0
for response, _ in model.stream_chat(tokenizer, input_text, messages):
if response is not None:
print(response[length:], flush=True, end='')
length = len(response)
运行模型
接下来直接使用命令启动上面的模型
bash
python /root/demo/cli_demo.py
部署streamlit web demo
使用streamlit web demo来部署模型,可以给模型一个简单的web ui,交互对人类更加友好。
拉取代码
bash
cd /root/demo
git clone https://github.com/InternLM/Tutorial.git
启动streamlit服务
代码中有streamlit服务的启动脚本,我们直接运行
bash
cd /root/demo
streamlit run /root/demo/Tutorial/tools/streamlit_demo.py --server.address 127.0.0.1 --server.port 6006
ssh连接远程开发机时,配置远程6006端口转发到本地
bash
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p [你的ssh端口号]
访问streamlit服务
在本地机器上访问 http://localhost:6006
来访问demo。第一次访问后才会开始加载模型,需要等待一会。当出现以下画面时,服务已经启动成功了。
可以修改下左侧的推理参数,查看模型的输出效果。
我把最大生成长度修改为8,模型输出变化很大。
LMDeploy部署InternLM-Xcomposer2-VL-1.8B模型
InternLM-XComposer2是一款基于InternLM2的视觉大模型,擅长自由形式的文本图像合成和理解。主要特点如下:
- 自由形式的交错文本图像合成:可以根据大纲、详细文本要求和参考图像等不同的输入,生成连贯且上下文相关,具有交错图像和文本的文章,从而实现高度可定制的内容创建。
- 准确的视觉语言问题解决:基于自由形式的指令准确地处理多样化和具有挑战性的视觉语言问答任务,在识别、感知、详细标签,视觉推理等方面表现出色。
- 令人惊叹的性能:基于InternLM2-7B的InternLM2-XComposer2在多个基准测试中位于开源多模态模型第一梯队,在部分基准测试中与GPT-4v和gemini Pro相当,甚至超过它们。
LMDeploy是一个用于压缩、部署和服务LLM的工具包,由MMRazor和MMDeploy团队开发。它具有以下核心功能
- 高效的推理:LMDeploy通过引入 持久化批处理、块KV缓存、动态分割与融合、张量并行、高性能CUDA内核等关键技术,提供了比vLLM高1.8倍的推理性能。
- 有效的量化:LMDeploy支持仅权重量化和k/v量化,4bit推理性能是FP16的2.4位。量化后的模型质量已经通过OpenCompass评估确认
- 轻松的分发:利用请求分发服务,LMDeploy可以在多台机器和设置上轻松高效地部署多模型服务
- 交互式推理模式:通过缓存多轮圣诞过程中注意力的k/v,推理引擎记住对话历史,从而避免重复处理历史会话
- 优秀的兼容性:LMDeploy运行KV Cache Quant,AWQ和自动前缀缓存同时使用
LMDeploy已经支持了InternLM-XComposer2系列的部署,但要注意的是它仅支持InternLM-XComposer2系列模型的视觉对话功能。
启动gradio服务
bash
conda activate /root/share/pre_envs/icamp3_demo
lmdeploy serve gradio /share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-1_8b --cache-max-entry-count 0.1
访问gradio服务
和上面一样,在ssh连接时创建端口映射,在本地打开即可。
使用lmdeploy启动的服务,不用等待模型的首次加载,在启动阶段模型就已经加载完毕了。
响应速度非常快。
LMDeploy 部署InternVL2-2B模型
InternVL2是上海人工智能实验室推出的新一代视觉-语言多模态大模型,是首个综合性能媲美美国闭源商业模型的开源多模态大语言模型。InternVL2系列从千亿参数到端侧小模型全覆盖,通专融合,支持多种模态。
LMDeploy也支持部署InternVL2系列模型的部署
启动gradio服务
bash
conda activate /root/share/pre_envs/icamp3_demo
lmdeploy serve gradio /share/new_models/OpenGVLab/InternVL2-2B --cache-max-entry-count 0.1
访问gradio服务
和上面一样,在ssh连接时创建6006端口映射,在本地打开即可。
可以发现InternVL2模型的效果似乎比InternLM-XComposer2还要好