本地大模型部署与微调新手指南
① 本地运行环境准备与工具安装
硬件怎么选
先搞清楚你的机器能跑什么模型。绝大多数近三年的消费级显卡,都能跑 7B~14B 级别的模型,关键在于选对量化版本。
速查表(Q4 量化下):
| 模型规模 | 显存需求 | 推荐显卡 |
|---|---|---|
| 7B | ~4GB | GTX 1660 / RTX 3050 |
| 14B | ~8GB | RTX 4060 / RTX 3070 |
| 27B | 15-16GB | RTX 4080 / RTX 3090 |
参数规模 × 量化位数 ÷ 8 字节 × 1.2(覆盖 KV Cache 和框架开销)≈ 显存需求。没独显也没关系------纯 CPU 也能跑,只是速度慢一些。
系统方面,Windows 10/11、macOS、Linux 都行。内存建议 16GB 起步,能流畅跑;8GB 勉强能聊天,但速度偏慢。
核心工具装什么
本地部署大模型,最常用的两套工具:
- Ollama:轻量级,一条命令搞定下载+运行,适合个人开发者快速上手
- vLLM:高性能推理引擎,吞吐量大,适合生产环境
建议新手从 Ollama 开始,等熟悉了再上 vLLM。
Ollama 安装(Windows):
去官网下载安装包,别直接双击安装 ------打开下载文件夹,地址栏输入 cmd 回车,执行:
bash
OllamaSetup.exe /DIR=D:\Ollama
这样把程序装到 D 盘,不占 C 盘空间。
装完后,把模型存储路径也改到 D 盘(模型动辄 5GB+):
- Win+R 输入
sysdm.cpl→ 高级 → 环境变量 - 系统变量 → 新建:变量名
OLLAMA_MODELS,变量值D:\ollama_models - 重启电脑,或终端执行:
bash
net stop ollama
net start ollama
验证安装:ollama --version,看到版本号就说明装好了。
Linux/macOS 用户用脚本安装:
bash
curl -fsSL https://ollama.com/install.sh | sh
macOS 还可以用 Homebrew。
② Ollama 快速部署与模型调用
拉取模型
以 Llama 3.1 8B 为例(目前性价比很高的模型):
bash
ollama pull llama3.1:8b
国内网络慢的话可以多试几次,或者换镜像源。下载完成后验证:
bash
ollama list
能看到 llama3.1:8b 就代表成功了。
其他常用模型:
bash
ollama pull qwen3.5:7b # 通义千问
ollama pull deepseek-r1:7b # DeepSeek
ollama pull phi-3:mini # 微软小模型,资源要求低
跑起来
bash
ollama run llama3.1:8b
输入问题就能对话,输入 /bye 退出。
API 调用
Ollama 默认在 http://localhost:11434 提供 API,兼容 OpenAI 格式:
python
import requests
response = requests.post(
"http://localhost:11434/api/generate",
json={"model": "llama3.1:8b", "prompt": "你好,请介绍一下自己", "stream": False}
)
print(response.json()["response"])
多模型管理
bash
ollama list # 查看已下载的模型
ollama rm <模型名> # 删除不需要的模型
ollama show <模型名> # 查看模型详情
③ vLLM 高性能服务搭建步骤
Ollama 适合个人用,但如果要建服务、处理高并发,得上 vLLM。
安装
用 pip 直接装:
bash
pip install vllm
指定版本:
bash
pip install vllm==0.6.0
需要 CUDA 11.8 或 12.1 环境。验证 CUDA 是否可用:
python
python -c "import torch; print(torch.cuda.is_available())"
返回 True 就 OK。
启动服务
bash
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B \
--port 8000 \
--max-model-len 4096
服务启动后,在 http://localhost:8000/v1 提供 OpenAI 兼容接口。
调用 vLLM 服务
python
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="empty" # vLLM 默认不校验 key
)
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B",
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)
Ollama vs vLLM 怎么选
| 维度 | Ollama | vLLM |
|---|---|---|
| 上手难度 | 极低,一条命令 | 中等,需配置 |
| 吞吐量 | 中(约 850 tokens/s) | 高(约 1200 tokens/s) |
| 显存效率 | 一般 | 高(PagedAttention 可降 30% 内存) |
| 适用场景 | 个人开发、实验 | 生产服务、高并发 |
新手先用 Ollama 跑通流程,需要上生产再切 vLLM。
④ 基础推理测试与结果验证
部署完后,先做几个基础测试,确认模型工作正常。
测试 1:基础问答
bash
ollama run llama3.1:8b
>>> 1+1等于几?
2
>>> 用一句话介绍什么是机器学习
机器学习是让计算机从数据中学习规律而不需要显式编程的技术。
回答合理、没有乱码,说明模型基本正常。
测试 2:中文能力
Ollama 默认模型大多支持中文。输入中文问题,看输出是否通顺、有没有中英文混杂。
测试 3:响应速度
bash
time ollama run llama3.1:8b "写一首五言绝句"
首 token 延迟通常在 100-300ms 之间。如果明显更慢,检查一下 GPU 是否在工作:
bash
nvidia-smi
看 GPU 利用率是不是上去了。如果利用率接近 0%,说明在跑 CPU,需要检查 CUDA 环境。
测试 4:连续对话
多轮对话看模型是否"失忆":
>>> 我叫小明
好的,小明,有什么我可以帮你的?
>>> 我叫什么名字?
你叫小明。
能记住上文信息,说明上下文窗口工作正常。
⑤ 轻量级微调数据准备方法
微调的第一步是准备数据,数据质量直接决定微调效果。
数据格式
最通用的是 JSONL 格式(每行一个 JSON 对象):
json
{"instruction": "公司的主打产品是什么?", "output": "我们主要生产智能家居设备,包括智能音箱、智能门锁和扫地机器人。"}
{"instruction": "如何申请售后服务?", "output": "1. 登录官网 → 2. 提交工单 → 3. 客服会在24小时内联系您。"}
{"instruction": "你们的退货政策是什么?", "output": "签收后7天内无理由退货,需保持商品完好。"}
一行一个问答对,用记事本就能编辑。
如果是多轮对话场景,可以用这种格式:
json
{"conversations": [{"from": "user", "value": "你好"}, {"from": "assistant", "value": "你好!有什么可以帮助你的?"}, {"from": "user", "value": "推荐一本书"}, {"from": "assistant", "value": "我推荐《三体》"}]}
数据量
新手入门不用太多,几百条高质量数据就能看到效果。建议从 200-500 条开始试。
数据清洗
几个关键步骤:
- 去重:删掉重复的问答对
- 清理特殊字符:去掉乱码、多余空格
- 长度控制:每条 instruction 控制在 50-200 字,output 控制在 100-500 字
- 检查格式:确保 JSON 格式正确(逗号、引号不能错)
可以用 Python 快速检查:
python
import json
with open("data.jsonl", "r", encoding="utf-8") as f:
for i, line in enumerate(f):
try:
data = json.loads(line)
assert "instruction" in data and "output" in data
except Exception as e:
print(f"第 {i+1} 行有问题: {e}")
数据来源
- 客服对话记录
- 产品文档、FAQ
- 自己手写问答对
- 用大模型生成种子数据后人工校对
⑥ 使用 LLaMA-Factory 进行微调实操
LLaMA-Factory 是目前对新手最友好的微调工具,封装了 LoRA、QLoRA 等多种高效微调方法。
环境安装
bash
# 创建虚拟环境
conda create -n llama_factory python=3.10
conda activate llama_factory
# 安装 PyTorch(根据 CUDA 版本选择)
pip install torch==2.0.1 --index-url https://download.pytorch.org/whl/cu118
# 安装 LLaMA-Factory
pip install llama-factory
# 或从源码安装(最新功能)
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .
验证环境:
python
python -c "import torch; print(torch.cuda.is_available())" # 应返回 True
准备配置文件
在 LLaMA-Factory 目录下新建 train_config.yaml:
yaml
model_name_or_path: meta-llama/Llama-3.1-8B # 或者本地模型路径
dataset: data.jsonl # 你的数据文件
template: llama3 # 模型模板
finetuning_type: lora # 微调方式
lora_rank: 16 # LoRA 秩
lora_target: all # 目标模块
output_dir: ./output # 输出目录
per_device_train_batch_size: 2 # 批次大小(显存小就设 1)
gradient_accumulation_steps: 4 # 梯度累积
learning_rate: 3e-5 # 学习率
num_train_epochs: 3 # 训练轮数
max_length: 2048 # 最大序列长度
logging_steps: 10 # 日志间隔
save_steps: 100 # 保存间隔
启动训练
命令行方式:
bash
llama_factory_train \
--model_name_or_path meta-llama/Llama-3.1-8B \
--dataset data.jsonl \
--output_dir ./output \
--num_train_epochs 3 \
--per_device_train_batch_size 2 \
--learning_rate 3e-5
或者用 Web UI(推荐新手):
bash
CUDA_VISIBLE_DEVICES=0 python src/train_web.py
浏览器打开 http://localhost:7860,填参数点按钮就行。
训练监控
训练时注意看几个东西:
- Loss 曲线:应该逐步下降。从 2.x 降到 1.x 甚至更低。
- 显存占用 :
nvidia-smi看,保持在 80% 以下比较稳。 - 训练速度:7B 模型用 LoRA,几百条数据通常 30-60 分钟能跑完。
合并与导出
训练完会生成 LoRA 适配器(adapter_model.bin),需要和基座模型合并才能用:
bash
python src/export_model.py \
--model_name_or_path meta-llama/Llama-3.1-8B \
--adapter_name_or_path ./output \
--export_dir ./merged_model \
--export_size 4 \
--export_legacy_format False
⑦ 微调后模型效果评估流程
评估 1:定性对比
准备一组测试问题,分别问基座模型和微调后的模型,对比回答质量。
测试问题示例:
- 领域内专业问题(5-10 个)
- 通用问题(看模型能力有没有"遗忘")
- 边界问题(看会不会乱答)
人工打分:1-5 分,看微调后平均分有没有提升。
评估 2:Loss 曲线
训练日志里的 Loss 曲线:
- 稳定下降 → 正常
- 突然飙升 → 学习率太大或数据有问题
- 不降反升 → 过拟合了,减少训练轮数
评估 3:BLEU / ROUGE(可选)
如果有标准答案,可以算 BLEU 和 ROUGE 分数:
python
from datasets import load_metric
bleu = load_metric("bleu")
rouge = load_metric("rouge")
# 对比模型输出和标准答案
评估 4:实际场景测试
把模型接进真实业务流程跑几天,看:
- 回答准确率(人工抽检)
- 用户满意度
- 有没有出现"幻觉"(编造事实)
⑧ 显存不足常见报错解决方案
报错:"CUDA out of memory"
最常见的问题。几个解决方案按优先级排列:
方案 1:换量化版本
同一个模型,Q4_K_M 版本只占约 4GB,Q8 要占约 8GB。用 Ollama 拉取时自动是量化版,如果用 Hugging Face 原版需要自己量化。
方案 2:减小 batch size
训练时把 per_device_train_batch_size 从 4 降到 2 甚至 1。
方案 3:启用梯度检查点
yaml
gradient_checkpointing: true
用时间换显存。
方案 4:使用 QLoRA
QLoRA 比 LoRA 更省显存,在 LLaMA-Factory 里设置 quantization_bit: 4。
方案 5:减小上下文长度
yaml
max_length: 1024 # 从 2048 降到 1024
上下文大小直接影响 KV Cache 占用。
方案 6:纯 CPU 推理
没显卡也能跑,只是慢:
bash
ollama run llama3.1:8b --no-gpu
报错:"Model not found"
模型名写错了,或者没下载。先 ollama list 确认已下载的模型列表。
报错:"Connection refused"
Ollama 服务没启动:
bash
ollama serve
保持这个窗口开着,别关。
⑨ 模型加载失败与依赖冲突排查
问题 1:CUDA 版本不兼容
典型表现:libcudart.so 加载失败。
解决:
nvidia-smi查看当前驱动支持的 CUDA 版本- 安装对应版本的 PyTorch:
bash
# CUDA 11.8
pip install torch==2.0.1 --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch==2.1.0 --index-url https://download.pytorch.org/whl/cu121
问题 2:模型下载卡在 99%
网络问题:
bash
Ctrl+C 取消下载
ollama pull <模型名> # 重新拉取,会断点续传
问题 3:Ollama 覆盖安装后崩溃
旧版本残留文件冲突。删干净重装:
bash
# Windows: 删除 C:\Users\<用户名>\.ollama 目录
# 然后重装 Ollama
问题 4:vLLM 模型导入失败
通常是依赖缺失或版本不匹配:
bash
pip install --upgrade vllm transformers
通用排查技巧
- 看日志:错误信息里通常有线索
- 用虚拟环境:conda 或 venv 隔离不同项目依赖
- 容器化:用 Docker 部署,环境一致性最好
⑩ 提升推理速度与节省资源技巧
技巧 1:选对量化版本
量化是把双刃剑------省显存但可能损失一点精度。
| 量化级别 | 显存占用 | 质量 | 推荐场景 |
|---|---|---|---|
| Q2_K | 最低 | 较差 | 极限省显存 |
| Q4_K_M | 适中 | 较好 | 通用首选 |
| Q5_K_M | 较高 | 好 | 对质量要求高 |
| Q8 | 高 | 最好 | 有显存富余 |
Ollama 拉取的模型默认就是量化版,直接用就行。
技巧 2:控制上下文长度
上下文越长,KV Cache 占用越大。
bash
ollama run llama3.1:8b --num-ctx 2048 # 默认 4096,改成 2048 省显存
技巧 3:GPU 利用率调优
vLLM 可以调 gpu_memory_utilization 参数:
bash
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B \
--gpu-memory-utilization 0.9 # 默认 0.9,可调高到 0.95
技巧 4:使用 vLLM 的 PagedAttention
vLLM 的分页注意力机制可将 70B 模型的 KV Cache 占用降低 35%。如果跑大模型,优先用 vLLM。
技巧 5:CUDA 图优化
vLLM 支持 CUDA 图,在固定输入模式下可提升 15% 吞吐量:
bash
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B \
--enforce-eager # 禁用 CUDA 图(调试用)
技巧 6:系统级优化
- 关闭非必要后台程序(浏览器、IDE 等)
- 电源管理设为"高性能"模式
- 虚拟内存手动设 8-16GB
- 有线网络比 Wi-Fi 稳定
技巧 7:量化微调(QLoRA)
微调时用 QLoRA 代替 LoRA,显存占用可降到传统全量微调的 1/8 甚至 1/16。LLaMA-Factory 里设置 quantization_bit: 4 即可。
WEB项目地址:演示地址
安卓APP下载地址:演示地址
总结:新手路线图
- 先跑通:Ollama 装好,拉一个 7B 模型,能对话
- 再调优:调整量化版本、上下文长度,让模型在你的机器上跑得最顺
- 后微调:准备 200-500 条数据,用 LLaMA-Factory 跑一遍 LoRA
- 最后上线:评估效果,切到 vLLM 提供 API 服务
每一步都有明确的产出,卡住了就回头看对应的章节。本地部署大模型没有想象中那么难------选对工具、用对方法,普通开发者的电脑完全够用。