书生大模型实战营闯关 - 8GB显存玩转书生大模型demo

创建开发机

创建一个使用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还要好

相关推荐
乐呦刘、1 小时前
nature communications论文 解读
人工智能·深度学习·机器学习
wangjing_05221 小时前
C语言练习.if.else语句.strstr
c语言·开发语言
Tony_long74831 小时前
Python学习——字符串操作方法
开发语言·c#
SoraLuna2 小时前
「Mac玩转仓颉内测版26」基础篇6 - 字符类型详解
开发语言·算法·macos·cangjie
出逃日志2 小时前
JS的DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)
开发语言·前端·javascript
前端青山3 小时前
React事件处理机制详解
开发语言·前端·javascript·react.js
black0moonlight4 小时前
ISAAC Gym 7. 使用箭头进行数据可视化
开发语言·python
时光の尘4 小时前
C语言菜鸟入门·关键字·int的用法
c语言·开发语言·数据结构·c++·单片机·链表·c
程序员黄同学4 小时前
Python 中如何创建多行字符串?
前端·python
坊钰4 小时前
【Java 数据结构】时间和空间复杂度
java·开发语言·数据结构·学习·算法