本地部署大模型
67 次阅读
本文以Qwen3.8-27B为例,讲解如何在本地部署大模型。
一、选定模型和推理引擎
不同格式的模型文件需要用不同的推理引擎加载,选择合适的推理引擎。常见的有如下,这里选择GGUF,用ollama加载
| 量化格式 | 全称 | 原生主推推理引擎 | 兼容支持引擎 | 硬件特点 |
|---|---|---|---|---|
| GGUF | GPT‑Generated Unified Format | llama.cpp、Ollama | LM‑Studio、Xinference;vLLM(间接支持) | CPU、GPU、苹果硅都可跑,支持层卸载,显存不够可以溢出到内存 |
| GPTQ | GPT‑Quantization | AutoGPTQ、vLLM、TGI | Text‑Generation‑WebUI、Aphrodite | 仅 NVIDIA GPU;老工业 4bit 量化方案,生态成熟 |
| AWQ | Activation‑aware Weight Quantization | AutoAWQ、vLLM、LMDeploy、TensorRT‑LLM | SGLang、Aphrodite | 仅 NVIDIA GPU;同等位宽精度损失比 GPTQ 更小,适合生产服务 |
同一款大模型有许多量化版本,根据自己本地硬件情况,需求情况(参数量、上下文窗口)选定所需模型,这里选择Qwen3.8-27B-Q4_K_M.gguf
二、环境准备
准备宿主机目录:
mkdir /programs/ollama
#运行启动命令自动创建,存放Ollama模型注册信息、mainfest、缓存等
mkdir /programs/ollama/.ollama
#存放GGUF、modelfile文件
mkdir /programs/ollama/models
拉取并运行Ollama Docker容器,因为本次部署在内网环境,所以在本地拉取后先要上传到私有仓库,再从仓库拉取到服务器
# 1.给镜像打标签 tag 【非常关键,不打标签push会失败】
# 格式:docker tag 本地镜像名:tag 仓库地址/用户名/镜像名:版本
docker tag ollama/ollama:latest myhub/ollama:v1
# 2.登录镜像仓库
docker login 仓库地址
# 3.推送镜像
docker push myhub/ollama:v1
# 4.拉取镜像
docker pull myhub/ollama:v1
# 5.启动Ollama
doker run -d \
--name ollama \
--restart unless-stopped \
--gpus '"device==1"' \
-p 11434:11434 \
-e OLLAMA_FINISH_ATTENTION=1 \
-e OLLAMA_KV_CACHE_TYPE=q8_0 \
-v /programs/ollama/.ollama:root/.ollama \
-v /programs/ollama/ollama/models:/models \
myhub/ollama:v1
说明:
| 参数 | 作用 |
|---|---|
| docker run | 基于指定镜像启动一个新容器 |
| -d | 后台运行(detached mode)只返回容器ID,可通过docker logs -f ollama查看日志 |
| --name ollama | 给容器固定名字为ollama,可以根据name操作容器,无需记住容器ID |
| --restart unless stopped | 容器重启策略:docker服务重启或机器重启后,容器会自动启动;但如果手动执行docker stop ollama则不会自动拉起 |
| --gpu ' "device=1" ' | 将宿主机编号为1的NVIDIA GPU分配给容器使用;可通过nvidia-smi确认gpu编号 |
| -p 11434:11434 | 端口映射,格式为 宿主机端口:容器端口,启动后可从宿主机访问localhost:11434 |
| -e OLLAMA_FINISH_ATTENTION=1 | 向容器传入环境变量,尝试启用Flash Attention。可以降低Attention计算的显存占用、提升推理速度 |
| -e OLLAMA_KV_CACHE_TYPE=q8_0 | 设置KV Cache的量化格式为q8_0。KV Cache是大模型上下文推理时的缓存;使用8位量化能明显减少现存使用,通常质量影响较小,但较与全精度缓存可能有轻微精度损失 |
| -v /programs/ollama/.ollama:root/.ollama | 挂载数据卷:将宿主机目录**/programs/ollama/.ollama挂到容器中/root/.ollama**。ollama默认在此处保存下载的模型、配置和相关数据。即使删除或关闭容器,模型仍然保留在宿主机 |
| -v /programs/ollama/ollama/models:/models | 将宿主机**/programs/ollama/ollama/models:/models挂到容器/models**目录 |
| myhub/ollama:v1 | 要运行的docker镜像名称 |
检查容器:
docker ps
三、准备主模型和视觉投影模型
包括两个文件
| 文件 | 作用 |
|---|---|
| Qwen3.8-27BQ4_K_M.gguf | Qwen3.8-27B主语言模型,Q4_K_M量化 |
| mmproj-F16.gguf | 图像视觉投影模型,用于支持图片输入 |
将两个模型从本地复制到服务器:
scp 本地路径 用户名@服务器地址:服务器路径
scp /download/Qwen3.8‑27b-Q4_K_M.gguf root@10.0.0.50:/programs/ollama/models
scp /download/mmproj-F16.gguf root@10.0.0.50:/programs/ollama/models
最终目录:
/programs/ollama/models/
|----Qwen3.8‑27b-Q4_K_M.gguf
|----mmproj-F16.gguf
四、创建modelfile
在目录下创建modelfile文件
/programs/ollama/models/modelfile
内容为:
FROM /programs/models/ #必须指向目录,若指向单个模型则无法启用视觉能力
PARAMETER num_ctx 32768 #设置上下文参数 32768 tokens ≈ 32k
PARAMETER temperture 0.3 #控制输出随机性,值越低越稳定,越高越有创造性
PARAMETER top_p 0.9 #核采样阈值,模型只会从累计概率达到90%的候选词中选择
五、导入模型
使用模型名字创建
docker exec -it ollama ollama create Qwen3.8‑27b-Q4_K_M -f /models/modelfile
#查看已安装模型
docker exec -it ollama ollama list
#查看模型详细信息
docker exec -t ollama ollama show Qwen3.8‑27b-Q4_K_M
详细信息应该包含:
Model
architecture qwen35
parameter 27.3B
context length 262144
embedding length 5120
quantization Q4_K_M
Capablities
tools
thinking
completion
vision
Projector
architecture clip
parameter 460.73M
embedding length 1152
dimensions 5120
重点:出现vision和Projector就表示视觉功能已启用
至此,模型已经部署完毕
六、运行测试
进入容器并运行模型:
#进入容器
docker exec -it ollama bash
#运行模型
ollama run Qwen3.8-Q4_K_M
当看到 >>>send a message 就可以交互提问了
也可以用OpenAI接口提问,并验证图片识别:
curl http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen3.8-27B-Q4_K_M",
"message":[
{
"role": "user",
"content": "请描述这张图片",
"images": [
"'"$(base64 -w 0 /models/test.jpg)"'"
]
}
],
"stream":flase,
"options":{
"num_ctx":32768
}
}'