前置条件
- 1已注册腾讯云账号
- 2一台腾讯云轻量应用服务器或 CVM(2C4G 起步,推荐 4C8G 及以上)
- 3服务器已安装 Docker 与 docker compose 插件
- 4熟悉基础 Linux 命令
读完想动手?新用户首单 8 折上云
服务器 + 大模型 API + 对象存储,新用户首购享 20% 补贴
InternLM 书生·浦语腾讯云本地部署完整指南
InternLM(书生·浦语)是上海人工智能实验室开源的国产大模型系列。它最鲜明的标签是长文本——很早就把上下文做到 200K 级别,在长文档理解、长对话记忆、整库代码分析这类场景里,比同尺寸的通用模型强一截。
这篇给你两条路:
- 省心路径:Ollama 一条命令跑起来,适合先验证效果
- 生产路径:LMDeploy 部署,官方工具对自家模型的长上下文优化最完整
为什么选 InternLM
先说清楚它的强项和弱项,避免选错。
| 维度 | 表现 | 说明 |
|---|---|---|
| 长文本理解 | 突出 | 这是它的核心卖点,200K 级上下文 |
| 中文对话 | 良好 | 表达自然 |
| 工具调用 | 支持 | 可用,但不如 GLM 稳定 |
| 代码能力 | 中等偏上 | 长上下文让它在整库理解上有优势 |
| 生态与教程 | 中等 | 社区规模小于 Qwen / GLM |
最适合的场景:长文档问答(合同、论文、技术手册)、需要长记忆的对话助手、整库代码分析、知识库的长上下文召回。
不太适合:纯工具调用型 Agent(GLM 更稳)、纯代码生成(有更专门的模型)。
第一步:机型选型(长文本很吃内存)
这是部署 InternLM 最容易低估的地方:长上下文不是免费的。
模型权重只是基础占用,真正的内存大头是 KV Cache——上下文越长、并发越高,它涨得越快。
配置对照表
| 场景 | 推荐配置 | 模型选择 | 可用上下文 |
|---|---|---|---|
| 快速验证 | 2C4G | internlm2 7B 量化 | 短上下文(4K 内) |
| 常规对话 | 4C8G | internlm2 7B q4/q5 | 8K-16K |
| 长文档问答 | 8C16G | internlm2 7B | 32K+ |
| 生产 / 高并发 | GPU 机型 24G 显存起 | internlm2 7B/20B + LMDeploy | 长上下文 + 高并发 |
警告
⚠️ CPU 机器上跑长上下文会很慢。不是跑不了,是慢到影响体验。真要长文本生产用,上 GPU。
内存估算
粗算公式(够用):
总占用 ≈ 权重体积 + (并发数 × 上下文长度 × 单 token KV 大小)
所以并发翻倍或上下文翻倍,内存都要相应加。别按"权重 6GB 所以 8GB 内存够"来买机器,那是没算 KV Cache。
前往 腾讯云轻量应用服务器 选购页,建议直接上 8C16G,长文本场景性价比最高。
需要 GPU 的话,在 腾讯云 GPU 机型与库存 查看各档机型。
第二步:环境准备
2.1 安装 Docker
1sudo apt-get update
2sudo apt-get install -y ca-certificates curl gnupg lsb-release
3
4sudo install -m 0755 -d /etc/apt/keyrings
5curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu/gpg \
6 | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
7sudo chmod a+r /etc/apt/keyrings/docker.gpg
8
9echo \
10 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
11 https://mirrors.cloud.tencent.com/docker-ce/linux/ubuntu \
12 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
13
14sudo apt-get update
15sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
16
17sudo usermod -aG docker $USER
18newgrp docker2.2 配置镜像加速
腾讯云给每台机器分配了专属加速地址,在控制台「容器镜像服务 → 镜像加速器」查看,形如 https://xxxxxx.mirror.swr.myqcloud.com:
1sudo mkdir -p /etc/docker
2sudo tee /etc/docker/daemon.json <<'EOF'
3{
4 "registry-mirrors": [
5 "https://你的专属地址.mirror.swr.myqcloud.com"
6 ]
7}
8EOF
9sudo systemctl daemon-reload
10sudo systemctl restart docker2.3 磁盘与内存检查
1df -h /
2free -h7B 模型权重(fp16)约 15GB,量化版约 4-6GB。预留至少 30GB 可用空间。
第三步:省心路径 —— Ollama 起步
3.1 启动 Ollama
1docker run -d \
2 --name ollama \
3 --restart unless-stopped \
4 -p 11434:11434 \
5 -v /data/ollama:/root/.ollama \
6 ollama/ollama:latest
7
8curl http://127.0.0.1:11434/api/tags返回 {"models":[]} 即正常。
3.2 拉取 InternLM
1docker exec -it ollama ollama pull internlm2:7b警告
⚠️ 标签以 Ollama 官方库为准。Ollama 的模型标签会随官方更新变化,如果提示 not found,先执行
docker exec -it ollama ollama search internlm 看当前可用的标签列表,再挑一个 7B 或更小的版本。
拉取时间取决于带宽,可以另开终端看进度:
1docker logs -f ollama3.3 第一次对话
1docker exec -it ollama ollama run internlm2:7b "用三句话介绍上海人工智能实验室"3.4 OpenAI 兼容接口
1curl http://127.0.0.1:11434/v1/chat/completions \
2 -H "Content-Type: application/json" \
3 -d '{
4 "model": "internlm2:7b",
5 "messages": [{"role": "user", "content": "总结一下长文本模型的应用场景"}],
6 "temperature": 0.7
7 }'3.5 长上下文怎么设
这是 InternLM 的关键用法。Ollama 里通过 Modelfile 或请求参数控制上下文长度:
1# 方式一:启动时用环境变量指定
2docker run -d \
3 --name ollama \
4 --restart unless-stopped \
5 -p 11434:11434 \
6 -v /data/ollama:/root/.ollama \
7 -e OLLAMA_CONTEXT_LENGTH=32768 \
8 ollama/ollama:latest1// 方式二:请求里带 num_ctx(部分版本支持)
2{
3 "model": "internlm2:7b",
4 "messages": [...],
5 "options": { "num_ctx": 32768 }
6}警告
⚠️ 上下文拉满不一定好。设得越大,KV Cache 占的内存越多,机器扛不住就会 OOM 或者慢到没法用。建议从 8192 起步,实测稳定了再往上加。
第四步:生产路径 —— LMDeploy 部署
LMDeploy 是 InternLM 官方团队出的部署工具,对自家模型的长上下文优化最完整。
4.1 前提条件
- 推荐 GPU 机型(显存 24GB 起,长上下文很吃显存)
- 内存 ≥ 32GB
- 磁盘 ≥ 100GB
查看 腾讯云 GPU 机型与库存。
4.2 获取模型权重(国内走 ModelScope)
1pip install modelscope
2
3python -c "
4from modelscope import snapshot_download
5snapshot_download('Shanghai_AI_Laboratory/internlm2-chat-7b', cache_dir='/data/models')
6"或者走 HuggingFace 镜像:
1export HF_ENDPOINT=https://hf-mirror.com
2huggingface-cli download internlm/internlm2-chat-7b \
3 --local-dir /data/models/internlm2-chat-7b警告
⚠️ 权重约 15GB,下载中断可重跑(支持断点续传)。先 df -h 确认磁盘够。
4.3 用 Docker 启动 LMDeploy
1docker run -d \
2 --name lmdeploy \
3 --restart unless-stopped \
4 --gpus all \
5 -p 23333:23333 \
6 -v /data/models:/models \
7 --ipc=host \
8 openmmlab/lmdeploy:latest \
9 lmdeploy serve api_server /models/internlm2-chat-7b \
10 --server-port 23333 \
11 --model-name internlm2 \
12 --session-len 32768关键参数:
--gpus all:透传 GPU,少了会退到 CPU--session-len:会话长度(上下文上限),长文本场景的核心参数--ipc=host:多进程共享内存,必需
4.4 验证
1curl http://127.0.0.1:23333/v1/models
2
3curl http://127.0.0.1:23333/v1/chat/completions \
4 -H "Content-Type: application/json" \
5 -d '{
6 "model": "internlm2",
7 "messages": [{"role": "user", "content": "你好,做个自我介绍"}]
8 }'4.5 长文本实测(这一步别省)
部署完一定要用真实长文档测一次,别只看短问答正常就上线:
1python - <<'PY'
2import requests
3# 造一个长文本:重复拼接,模拟长文档
4doc = ("本公司年假制度规定:入职满一年可享 5 天年假,每满一年增加 1 天,上限 15 天。" * 400)
5r = requests.post("http://127.0.0.1:23333/v1/chat/completions", json={
6 "model": "internlm2",
7 "messages": [
8 {"role": "system", "content": "你是制度问答助手,只依据给定文档回答。"},
9 {"role": "user", "content": f"文档内容:\n{doc}\n\n问题:年假上限是多少天?"}
10 ],
11 "max_tokens": 200
12}, timeout=300)
13print(r.json()["choices"][0]["message"]["content"])
14PY能答出「15 天」说明长上下文真的生效了。答不出来或者报错,回头调 --session-len 和显存。
第五步:对接业务系统
5.1 Open WebUI(聊天界面)
1docker run -d \
2 --name open-webui \
3 --restart unless-stopped \
4 -p 3000:8080 \
5 -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
6 --add-host=host.docker.internal:host-gateway \
7 -v /data/open-webui:/app/backend/data \
8 ghcr.io/open-webui/open-webui:main访问 http://服务器IP:3000,首次注册即管理员。
5.2 接 Dify
在 Dify 本地部署教程 那套部署里,「设置 → 模型供应商 → OpenAI-API-compatible」:
| 字段 | Ollama | LMDeploy |
|---|---|---|
| 模型名称 | internlm2:7b | internlm2 |
| API Base | http://host.docker.internal:11434/v1 | http://host.docker.internal:23333/v1 |
| API Key | 任意填写 | 任意填写 |
警告
⚠️ Dify 在 Docker 里,localhost 指容器自己,必须用 host.docker.internal。
5.3 接知识库做长文档问答
把 InternLM 接到 RAGFlow 腾讯云部署教程 搭的知识库上,长文档场景才算真正发挥价值——它能在很长的上下文里精确定位答案,而不是只靠切分召回。
第六步:安全
6.1 别把端口直接暴露公网
1# 只监听本机
2docker run -d ... -p 127.0.0.1:11434:11434 ollama/ollama:latest6.2 防火墙
腾讯云控制台「防火墙」只放行 22 / 80 / 443,模型服务端口一律不放。
20 条故障排查
| # | 现象 | 原因 | 解决 |
|---|---|---|---|
| 1 | ollama pull 卡住 | 网络或镜像源问题 | 配 Docker 镜像加速;或走 ModelScope 下载权重 |
| 2 | 提示 model not found | 标签名已变更 | ollama search internlm 查当前可用标签 |
| 3 | 容器启动后立刻退出 | 内存不足 OOM | 执行 dmesg -T 看内核日志确认;换量化版或升配 |
| 4 | 长文本请求报超长错误 | 上下文超出设置 | 调大 --session-len 或 num_ctx |
| 5 | 长文本一跑就 OOM | KV Cache 吃满内存 | 降上下文长度;降并发;升配 |
| 6 | 长文本回答质量差 | 上下文太大导致注意力稀释 | 不必一味拉满,8192-32768 实测选最优 |
| 7 | LMDeploy 报 CUDA OOM | --session-len 太大 | 调小;或降 --cache-max-entry-count |
| 8 | LMDeploy 报共享内存错误 | 缺 --ipc=host | 加上参数 |
| 9 | 容器看不到 GPU | 没装 nvidia-container-toolkit | 装工具包并重启 docker |
| 10 | Dify 连不上 | 用了 localhost | 改 host.docker.internal |
| 11 | Open WebUI 无模型 | OLLAMA_BASE_URL 不对 | 用 host.docker.internal:11434 |
| 12 | 推理极慢 | CPU 推理 | 上 GPU;或换更小量化版 |
| 13 | 中文输出乱码 | 编码问题 | 确认请求响应均为 UTF-8;换 curl 排除客户端问题 |
| 14 | 磁盘满 | 权重 + 日志堆积 | docker system prune -a;清旧模型 |
| 15 | 重启后服务没了 | 没设 restart 策略 | --restart unless-stopped |
| 16 | 权重下载中断 | 网络波动 | 重跑命令,支持断点续传 |
| 17 | 端口被占用 | 端口冲突 | sudo lsof -i :11434 查占用;或换端口 |
| 18 | 并发一高就超时 | 单实例扛不住 | 加实例做负载均衡;或限流排队 |
| 19 | 模型加载报 safetensors 错误 | 权重不完整 | 重新下载并校验文件大小 |
| 20 | 账单意外高 | GPU 实例没销毁 | ⚠️ 控制台销毁实例,关机仍计费 |
落地建议
- 长文本是它唯一的护城河 —— 如果你的场景用不上长上下文,InternLM 相对 GLM/Qwen 没有明显优势,别为了用而用。
- 上下文别一上来拉满 —— 从 8192 起步实测,能答对再往上加。拉满只会 OOM 和变慢。
- 务必用真实长文档验收 —— 短问答正常不代表长上下文生效,第四步 4.5 那个测试别省。
- GPU 实例按量计费、用完销毁 —— 关机不等于停费,这是最容易烧钱的地方。
常见问题
QInternLM 相比 GLM、Qwen 有什么独特优势?
长文本。InternLM 系列从早期就以超长上下文(200K 级别)著称,处理长文档、长对话、整库代码理解时优势明显。如果你要做的是长文档问答或需要保留大量历史对话的场景,它比同尺寸的通用模型更合适。如果你的场景是普通对话与工具调用,可以看看 GLM-4 腾讯云部署教程;偏代码与推理则看 Qwen3 腾讯云部署教程。三者可以在同一台机器上共存。
Q2C4G 能跑起来吗?
能跑量化版,但长文本优势发挥不出来——长上下文非常吃内存,上下文越长,KV Cache 占的内存越大。想真正用上长文本能力,建议 8C16G 起步;如果要跑 20B 版本或高并发,就得上 GPU 机型。选型时把「上下文长度 × 并发数」一起算进去,别只看模型权重大小。
Q为什么推荐用 LMDeploy 而不是 vLLM?
LMDeploy 是 InternLM 官方团队(上海 AI Lab)推出的部署工具,对自家模型的适配最完整,尤其是长上下文场景下的显存优化与量化支持。vLLM 也能跑 InternLM,但部分长文本特性不一定完全对齐。如果你的模型是 InternLM,优先用 LMDeploy;如果是多模型混合部署,vLLM 的通用性更好。