介绍
2024 年 1 月 17 日,新一代大语言模型书生·浦语 2.0(InternLM2)正式发布。相比于第一代 InternLM,InternLM2 在推理、对话体验等方面的能力全面提升,工具调用能力整体升级,并支持 20 万字超长上下文,实现长文对话'大海捞针'。
InternLM2 包含 InternLM2-7B 和 InternLM2-20B 两种模型规格(20B 模型比 7B 模型功能更强大),每种规格又根据不同的应用场景,分为以下四种模型:InternLM2-Base、InternLM2、InternLM2-Chat-SFT 和 InternLM2-Chat。其中 InternLM2 是官方推荐使用的基础模型,InternLM2-Chat 是官方推荐使用的对话模型。下文主要介绍 InternLM2-Chat-7B 模型的部署和使用。
| 模型 | HuggingFace | ModelScope |
|---|
| InternLM2-Chat-7B | internlm/internlm2-chat-7b | Shanghai_AI_Laboratory/internlm2-chat-7b |
| InternLM2-Chat-20B | internlm/internlm2-chat-20b | Shanghai_AI_Laboratory/internlm2-chat-20b |
环境准备
部署大模型需要充足的算力资源。建议租用配备高性能 GPU 的云服务器实例。InternLM2-Chat-7B 模型消耗显存约 20 GB(受实际参数配置影响),因此租用一张 RTX 3090 或者 RTX 4090 的 GPU 实例通常能满足运行条件。若使用多卡部署,可进一步降低单卡显存压力。
系统环境建议如下:
- 操作系统:Ubuntu 20.04 或 CentOS 7 及以上版本。
- Python 版本:建议 Python 3.8 或更高版本。
- CUDA 驱动:确保已安装与 PyTorch 版本兼容的 NVIDIA CUDA Toolkit。
- 依赖管理:建议使用
conda 或 venv 创建独立虚拟环境,避免依赖冲突。
模型部署&使用
页面交互方式
提供两种主要的页面交互部署方式,选择其中一种即可。这两种方式本质区别在于前端框架不同,后端服务逻辑一致。
Gradio
Gradio 是一个用于快速构建机器学习演示界面的 Python 库。LMDeploy 封装了 Gradio 接口,通过脚本即可一键部署。
启动命令中的关键参数含义如下:
tp (tensor_parallel_size):表示使用几张 GPU 来并行运行一个模型。例如 tp=1 表示单卡,tp=2 表示双卡。
max_batch_size:批处理大小。该参数值越大,吞吐量越高,但会占用更多显存。需根据显存容量调整。
cache_max_entry_count:设置 k/v 缓存大小,直接影响显存占用。当值为 0~1 之间的小数时,表示 k/v block 使用的内存百分比;当值 >1 时,表示 k/v block 数量。
server_name:监听地址,0.0.0.0 表示允许外部访问。
server_port:服务端口,默认为 8888。
- 模型路径:本地存储模型的路径,如
./internlm2-chat-7b。
具体操作步骤如下:
- 通过 SSH 终端连接到服务器实例,新建
deploy.sh 脚本文件。
- 编写脚本内容,包含环境安装、模型拉取及服务启动命令。
- 执行
sh deploy.sh 命令启动脚本。脚本执行大约需要 5 分钟时间(取决于网络速度下载模型仓库)。
- 新开一个终端窗口,执行命令
watch -n 1 nvidia-smi 可以实时观察 GPU 资源的使用情况,确认显存是否被正常占用。
- 模型部署完成后,需在云服务商控制台配置安全组规则,开放 TCP 8888 端口,以便公网访问。
- 访问公网 IP:8888,即可进入 Web 界面使用模型。
Streamlit
官方提供了基于 Streamlit 的部署代码示例。Streamlit 适合快速构建数据应用,默认加载远程 Hugging Face 仓库中的模型。如果已将模型下载到本地,可修改源码从本地加载以加速启动。
脚本文件如下,可直接执行,一键部署:
cd ~
pip install streamlit==1.24.0
pip install transformers==4.37.0
git clone https://github.com/InternLM/InternLM.git
streamlit run ./InternLM/chat/web_demo.py
默认启动端口为 8501,同样记得在防火墙或安全组中开放该端口。交互页面简洁直观,适合轻量级测试。
代码方式
注意:代码中 ./internlm2-chat-7b 为模型本地存储路径,请根据实际情况自行调整。若未下载模型,可替换为远程仓库地址。
Transformers
使用 Hugging Face Transformers 库直接加载模型进行推理。
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
if __name__ == '__main__':
tokenizer = AutoTokenizer.from_pretrained("./internlm2-chat-7b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("./internlm2-chat-7b", device_map="auto",
trust_remote_code=True, torch_dtype=torch.float16)
model = model.eval()
response, history = model.chat(tokenizer, "你好 我是 Cleaner", history=[])
print(response)
ModelScope
使用 ModelScope(魔搭社区)SDK 下载并加载模型,国内网络环境下下载速度通常更快。
import torch
from modelscope import snapshot_download, AutoTokenizer, AutoModelForCausalLM
if __name__ == '__main__':
model_dir = snapshot_download('./internlm2-chat-7b')
tokenizer = AutoTokenizer.from_pretrained(model_dir, device_map="auto", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True,
torch_dtype=torch.float16)
model = model.eval()
response, history = model.chat(tokenizer, "你好 我是 Cleaner", history=[])
print(response)
LMDeploy
LMDeploy 是专为大模型推理优化的引擎,性能通常优于原生 Transformers。它支持多种后端配置,包括 vLLM 和 Turbomind。
from lmdeploy import pipeline, TurbomindEngineConfig
if __name__ == '__main__':
backend_config = TurbomindEngineConfig(tp=1,
max_batch_size=64,
cache_max_entry_count=0.1)
pipe = pipeline("./internlm2-chat-7b", backend_config=backend_config)
response = pipe(["你好 我是 Cleaner"])
print(response)
常见问题与优化
-
显存不足(OOM):
如果遇到 Out Of Memory 错误,尝试减小 max_batch_size 或 cache_max_entry_count 的值。对于 7B 模型,建议单卡显存至少预留 24GB 以确保稳定运行。
-
依赖冲突:
安装 lmdeploy 等库时,可能遇到 CUDA 版本不匹配问题。建议先检查 nvidia-smi 输出的驱动版本,再安装对应的 PyTorch 和 LMDeploy 版本。
-
安全性配置:
将服务暴露在公网前,建议增加身份验证机制(如 HTTP Basic Auth)或使用 Nginx 反向代理限制访问 IP,防止模型被滥用。
-
量化部署:
若显存受限,可考虑使用 LMDeploy 的 INT4 量化功能,这能在保持较高精度的同时显著降低显存占用。
总结
梳理 InternLM2 的特点,帮助想要使用大语言模型的个人开发者或者企业,在面对众多大语言模型时,能够了解大语言模型提供的能力,并结合自身的需求与成本,做出清晰明确的选择。
- 开源免费、可商用:InternLM2 采用宽松协议,允许商业场景使用。
- 超长上下文支持:支持 200K token 的输入与理解。适用于书籍等大文本数据做摘要总结、若干轮对话后回忆之前的内容(大海捞针)。
- 支持工具调用能力:能够在一次交互中多次调用工具,完成相对复杂的任务(Agent)。
- 支持微调和训练:提供专有数据集,打造个人/企业私有化大模型。
InternLM2 展现了国产大模型在技术上的进步,为开发者提供了灵活高效的部署方案。无论是通过 Web 界面快速体验,还是集成到业务系统中,都能满足多样化的需求。随着生态的完善,其应用前景将更加广阔。