本地部署大模型

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
		}
	}'