AI大模型技术分享教程:用Docker本地部署ChatGLM并开放API
想在服务器上跑一个自己的大模型,又不想依赖外部API?
最省事的路径是用 Docker 部署 ChatGLM3-6B,它自带 OpenAI 兼容接口,部署完就能用标准 SDK 调用。
这篇 AI 大模型技术分享教程会带你从零走完整个流程,包括环境检查、模型下载、服务启动和接口验证。
先确认你的机器能不能跑
ChatGLM3-6B 对硬件有一定要求,部署前先做三项检查,避免跑到一半才发现资源不够。
- 操作系统:推荐 Ubuntu 20.04 或 22.04,其他主流 Linux 发行版也可以,但以下命令以 Ubuntu 为例。
- 内存与显存:纯 CPU 运行至少需要 16GB 内存,速度较慢;如果有 NVIDIA 显卡,显存建议 8GB 以上,6GB 显存可以尝试量化版本但体验会打折扣。
- 磁盘空间:模型文件约 12GB,加上 Docker 镜像和系统占用,建议预留 30GB 以上空闲空间。
用下面几条命令快速确认:
# 查看内存
free -h
# 查看磁盘
df -h /
# 查看显卡(如果有)
nvidia-smi
如果 nvidia-smi 命令不存在,说明没有安装 NVIDIA 驱动,后续只能走 CPU 模式。
安装 Docker 与 NVIDIA 容器运行时
如果服务器还没装 Docker,执行官方脚本安装:
curl -fsSL https://get.docker.com | bash -s docker
systemctl enable --now docker
有 NVIDIA 显卡的机器还需要安装 nvidia-container-toolkit,让容器能调用 GPU:
apt-get update && apt-get install -y nvidia-container-toolkit
systemctl restart docker
安装完成后用 docker run --rm --gpus all nvidia/cuda: 验证容器能否识别显卡,
12.0-base nvidia-smi
能输出显卡信息就说明配置正确。
拉取镜像并启动 ChatGLM 服务
社区维护的 chatglm3 镜像可以直接使用。
先拉取镜像:
docker pull chatglm3/chatchat:latest
然后创建数据目录并启动容器。
注意把 /data/models 换成你实际存放模型的路径:
mkdir -p /data/models
docker run -d --name chatglm \
--gpus all \
-p 8000:8000 \
-v /data/models:/app/models \
chatglm3/chatchat:latest
如果没有 GPU,去掉 --gpus all 参数即可。
容器启动后,用 docker logs -f chatglm 观察日志,看到类似 Uvicorn running on http://0.0.0.0:8000 的输出,说明 API 服务已经就绪。
首次启动时容器会自动下载模型文件,速度取决于网络环境。
如果下载卡住,可以手动把模型文件放到 /data/models 目录下,再重启容器。
验证接口是否可用
服务启动后,先用 curl 发一个最简单的请求:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "chatglm3-6b",
"messages": [{"role": "user", "content": "你好"}]
}'
如果返回 JSON 中包含 choices 字段和模型回复内容,说明接口工作正常。
你也可以用 Python 的 OpenAI SDK 调用,把 base_url 指向本地地址即可:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="none")
resp = client.chat.completions.create(
model="chatglm3-6b",
messages=[{"role": "user", "content": "用一句话介绍你自己"}]
)
print(resp.choices[0].message.content)
常见问题与避坑提醒
部署过程中最容易卡在下面几个地方,提前了解能省不少时间。
容器启动后立刻退出:先用 docker logs chatglm 看最后几行日志。
常见原因是显存不足或模型路径不对,日志中会明确提示 CUDA out of memory 或 model not found。
显存不足时可以换更小的量化模型,或者改用 CPU 模式。
端口 8000 无法从外网访问:先确认服务器防火墙和云厂商安全组是否放行了 8000 端口。
生产环境不建议直接把模型接口暴露到公网,至少加一层 Nginx 反向代理并配置访问密钥。
模型下载太慢或失败:可以在能正常访问的机器上手动下载模型文件,再通过 scp 传到服务器的 /data/models 目录,然后重新启动容器。
CPU 模式下响应很慢:这是正常现象,6B 模型在纯 CPU 上生成一段话可能需要几十秒。
如果只是测试功能,可以把请求中的 max_tokens 调小,减少等待时间。
确认服务长期稳定运行
最后做一次完整复查:docker ps 确认容器状态是 Up;
用 curl 再发一次请求确认接口有返回;
如果配置了 Nginx,从外部访问一次验证代理链路。
建议给容器加上 --restart unless-stopped 参数,避免服务器重启后服务没有自动拉起。
到这里,一个可用的本地大模型 API 就部署完成了。
后续你可以把它接入自己的应用、做提示词测试,或者在此基础上继续探索微调。
整个流程的关键在于先确认硬件条件,再按日志排查启动问题,最后用实际请求验证接口,而不是只看容器是否在运行。