1. GPU服务器环境准备

搭建本地大模型的第一步就是搞定GPU服务器环境。我去年第一次尝试部署GLM-4-9B模型时,光驱动安装就折腾了两天。现在把这些经验总结成可复用的操作流程,帮你少走弯路。

1.1 显卡驱动安装

显卡驱动是GPU计算的基础。以NVIDIA Tesla P40为例,安装前需要先检查系统是否自带nouveau驱动:

lspci | grep -i nvidia
lsmod | grep nouveau

如果第二条命令有输出,说明需要禁用nouveau驱动。编辑黑名单配置文件:

vi /usr/lib/modprobe.d/dist-blacklist.conf

在文件末尾添加:

blacklist nouveau
options nouveau modeset=0

保存后重启服务器。接下来安装依赖包:

yum install gcc dkms gcc-c++ -y

从NVIDIA官网下载对应驱动(以550.90.07版本为例):

wget https://cn.download.nvidia.cn/tesla/550.90.07/NVIDIA-Linux-x86_64-550.90.07.run
chmod +x NVIDIA-Linux-x86_64-550.90.07.run
./NVIDIA-Linux-x86_64-550.90.07.run --kernel-source-path=/usr/src/kernels/$(uname -r)/ -no-x-check

安装完成后验证:

nvidia-smi

这个命令会显示GPU信息、CUDA版本和显存使用情况。我遇到过驱动版本不匹配导致显存识别不全的问题,这时候需要卸载重装指定版本驱动。

1.2 Docker与NVIDIA容器工具包

现代AI应用基本都跑在容器里,所以需要安装Docker和NVIDIA容器工具包。先安装Docker:

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker

接着安装NVIDIA容器工具包。这里有个坑:直接yum安装可能会遇到依赖问题。我推荐手动下载rpm包:

wget https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo -O /etc/yum.repos.d/nvidia-container-toolkit.repo
yum install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

验证GPU容器是否正常工作:

docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi

如果看到和宿主机相同的GPU信息,说明环境配置正确。我曾经因为漏掉systemctl restart docker这一步,调试了半天容器无法识别GPU的问题。

2. Xinference模型部署

Xinference是当前最方便的本体模型部署框架之一,支持多种开源大模型。它的优势在于:

  • 一键部署LLM、Embedding、Rerank等模型
  • 提供RESTful API和WebUI
  • 支持分布式推理

2.1 部署Xinference服务

使用Docker部署最省心:

docker pull registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference
docker run -d --name xinference \
  -p 9997:9997 \
  -v /data/xinference:/root/.xinference \
  -v /data/models:/data/models \
  --gpus all \
  registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference \
  xinference-local -H 0.0.0.0

这里有两个关键点:

  1. 挂载/data/xinference目录持久化模型配置
  2. 挂载/data/models目录存放下载的模型文件

访问http://服务器IP:9997 可以看到管理界面。我第一次使用时没挂载模型目录,结果重启容器后所有模型都要重新下载。

2.2 下载GLM-4-9B-Chat模型

在Xinference界面选择"GLM-4-9B-Chat"模型,点击下载。如果服务器网络不好,可以手动下载:

git clone https://www.modelscope.cn/zhipuai/glm-4-9b-chat.git /data/models/glm-4-9b-chat

下载完成后,在Xinference界面启动模型。注意GLM-4-9B需要约20GB显存,P40显卡(24G)刚好够用。启动命令示例:

xinference launch --model-name glm-4-9b-chat --model-format pytorch --size-in-billions 9 --quantization 8-bit

如果遇到zip解压错误,设置环境变量:

export UNZIP_DISABLE_ZIPBOMB_DETECTION=TRUE

2.3 部署辅助模型

完整的知识库系统还需要:

  1. Embedding模型:将文本转换为向量
  2. Rerank模型:对检索结果重排序

推荐使用bge-large-zh-v1.5作为Embedding模型:

git clone https://www.modelscope.cn/ai-modelscope/bge-large-zh-v1.5.git /data/models/bge-large-zh-v1.5

Rerank模型选择bge-reranker-v2-m3:

git clone https://www.modelscope.cn/ai-modelscope/bge-reranker-v2-m3.git /data/models/bge-reranker-v2-m3

这两个模型对显存要求不高,8GB显存即可流畅运行。启动后可以通过nvidia-smi查看显存占用情况。

3. Dify平台集成

Dify是一个开源的LLM应用开发平台,比直接调用API更易用。它提供:

  • 可视化工作流编排
  • RAG检索增强
  • 多模型管理
  • API访问控制

3.1 Docker Compose部署

推荐使用官方提供的docker-compose方案:

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d

如果网络问题导致镜像拉取失败,可以尝试国内镜像源:

sed -i 's/ghcr.io/registry.cn-beijing.aliyuncs.com\/dify/' docker-compose.yml

部署完成后访问http://服务器IP 即可进入Dify界面。初始账号为:

  • 邮箱:admin@dify.ai
  • 密码:password

3.2 配置模型供应商

在Dify后台的"模型供应商"页面,添加Xinference作为模型源:

  1. 供应商类型选择"Xinference"
  2. 基础URL填写http://xinference服务IP:9997
  3. 模型列表会自动加载

然后为每个功能指定模型:

  • 对话模型:GLM-4-9B-Chat
  • Embedding模型:bge-large-zh-v1.5
  • Rerank模型:bge-reranker-v2-m3

测试时发现GLM-4-9B的API响应速度约3-5秒/请求,属于可接受范围。如果追求更低延迟,可以考虑量化到4-bit版本。

4. 本地知识库搭建

知识库是企业的私有AI大脑。在Dify中搭建知识库只需三步:

4.1 创建知识库

  1. 在Dify控制台点击"知识库"-"新建"
  2. 输入知识库名称(如"产品文档")
  3. 选择索引方式:
    • 密集索引:使用Embedding模型
    • 混合索引:结合关键词和向量搜索

我推荐混合索引,召回率更高。测试显示在技术文档场景下,混合索引的准确率比纯向量搜索高15%左右。

4.2 上传文档

支持多种格式:

  • PDF/Word/PPT:自动解析文本
  • Excel:按表格结构处理
  • 纯文本:保持原格式

上传后Dify会自动:

  1. 切分文本块(可调整chunk大小)
  2. 生成向量索引
  3. 构建搜索数据结构

处理100页PDF约需5分钟,主要耗时在Embedding计算。可以通过增加GPU资源加速。

4.3 测试问答

在聊天界面选择知识库后,就可以提问了。例如:

  • "产品有哪些核心功能?"
  • "如何解决XXX报错?"

系统会先检索相关文档片段,然后让大模型生成回答。实测GLM-4-9B在技术文档问答上准确率能达到80%以上,明显优于直接使用公开模型。

遇到回答不准确时,可以:

  1. 调整chunk大小(通常512-1024 tokens最佳)
  2. 增加top_k检索数量
  3. 添加问题-答案对进行微调

这套方案已经在我们的内部知识管理系统运行半年,平均每天处理300+问答请求,显著提升了技术支持效率。最关键的是所有数据都在本地,完全符合企业安全要求。

更多推荐