本地部署大模型
本地部署大模型
系统:ubuntu 128h256g
显卡:4090D(48G) *2
llm模型:QwQ-32B-AWQ
模型 说明 评价 DeepSeek-R1-Distill-Qwen-32B-Int4-W4A16 Deepseek的32B,4bit量化版 70token/s,准确率很低,没法用 QwQ-32B-AWQ QwQ的32B,4bit量化版 速度非常快单用户70token。多用户并发300无压力,准确率不低,就是思考内容过多 QwQ-32B QwQ的8bit版本 25token/s,准确率高 DeepSeek-R1-Distill-Qwen-32B Deepseek的32B,8bit量化 25token/s,准确率高 Deepseek-R1 70B 70B版本 没法用,10token/s 这里也测试了几款不同的模型,效果如上,最终还是选择了准确率高的,速度快的QwQ-32B-AWQ。过度思考的问题还需要解决
embedding模型:bge-m3
rerank模型:bge-reranker-v2-m3
1、基础环境
安装docker && docker compose
推荐直接安装1panel,https://1panel.cn/
会自动安装好docker和docker compose环境
验证是否安装成功
(base) root@ubuntu:~# docker --version
Docker version 28.0.1, build 068a01e
(base) root@ubuntu:~# docker compose version
Docker Compose version v2.33.1
docker代理设置
编辑daemon.json文件添加以下内容
vi /etc/docker/daemon.json
{
"dns": [
"8.8.8.8",
"233.5.5.5"
],
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
},
"proxies": {
"http-proxy": "http://10.0.0.199:7897",
"https-proxy": "http://10.0.0.199:7897"
},
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
重新加载并重启docker
systemctl daemon-reload
systemctl restart docker
安装conda
下载miniconda安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh
激活miniconda
source ~/miniconda3/bin/activate
验证安装
conda --version
安装screen
apt install -y screen
验证安装
screen --version
安装显卡驱动
参考英伟达官方文档安装(根据实际系统版本、显卡型号选择)
使用nvidia-smi
验证,查看显卡信息
2、模型引擎安装
Ollama:性能差,使用方便,适合个人用户
vllm:性能调度好,兼容性好,支持embedding、rerank模型
Xinference平台:集成了vllm、transformer、sg-lang
vllm安装
创建一个conda环境,python版本至少3.11或者以上,vllm_env是虚拟环境的名称可以自定义。
conda create -n vllm_env python=3.12 -y
进入创建的conda环境
conda activate vllm_env
安装pytorch(CUDA 版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
安装vllm(CUDA 版本)
pip install vllm[triton]
验证vllm是否正确安装,成功会输出vllm的版本号
python -c "import vllm; print(vllm.__version__)"
3、模型权重下载
模型库 | 备注 |
---|---|
https://modelscope.cn/ | 国内环境建议用modelscpoe模型库 |
https://huggingface.co/ | 模型库很全,当下最火的开源模型站,缺点是国内下载可能需要梯子 |
安装modelscpoe
官方文档https://modelscope.cn/docs/intro/quickstart
pip install modelscope
下载模型
创建一个文件夹来存放模型
cd /mnt/vllm-models
mkdir QwQ-32B
下载模型到指定路径
modelscope download --model 'Qwen/QwQ-32B' --local_dir '/mnt/vllm-models/QwQ-32B'
--model
:模型的名称,请在modelscpoe搜索后复制过来
--local_dir
:下载到指定路径(尽量不要使用默认路径,因为模型文件较大 占根目录空间)
4、运行模型
LLM模型
这里使用QwQ-32B-AWQ举例,不通模型参数要求可能不通,请参考modelscpoe官方文档
创建一个screen进程
screen -S vllm
后续进入screen进程
screen -r vllm
进入conda环境
conda activate vllm_env
运行模型(以兼容OpenAI API方式运行)
vllm serve /mnt/vllm-models/QwQ-32B-AWQ \
--served-model-name QwQ-32B-AWQ \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2 \
--max-model-len 100000
参数解释(如有不对 请以官网文档为准):
vllm serve
:运行模型权重的路径为/mnt/vllm-models/QwQ-32B-AWQ(注意是路径,而非文件名称)
--served-model-name
:给这个模型进程命名为QwQ-32B-AWQ,这一步是为了方便与Dify对接
--host
:可以访问接口的地址,0.0.0.0表示允许所有
--port
:端口指定为8000
--tensor-parallel-size
:使用的显卡数量为2(这个应该是模型同时运行在两张显卡上 来增加效率,我实际用的时候发现 一张只需要40G显存就能跑起来的模型,会把两张48G的显存都占满,大概84G左右。 没太明白他的工作原理,但是对模型的提速确实很明显)
--gpu-memory-utilization 0.95
:将显存最大使用率设置为百分之95,不设置默认就是0.90左右。一般不用加这个参数
--swap-space
:显存爆了的时候,可以将一部分运行在内存上,分配内存为64G。这个一般也不用加 一般用不到
--max-model-len 110000
:这是上下文最大值,大部分模型默认是132k。有时候提示显存不足以运行132k,就可以把这个值改小110000就是110K左右。一般也不需要去改
运行时可以新开一个窗口观察显卡使用情况
nvidia-smi
embeding模型 && rerank模型
使用ollama、vllm、huggingface、transformer、Jina的方式,来运行embedding和rerank模型实在是太麻烦了,且需要一定的编程基础。而Xinference集成了这些引擎环境,所以这里借助Xinference来部署模型。
docker部署Xinference可以参考文档https://blog.csdn.net/jsyzliuyu/article/details/145831288
拉取镜像
docker pull xprobe/xinference:latest
启用GPU加速方式运行
docker run --name xinference -d -p 9997:9997 -e XINFERENCE_HOME=/data -v /mnt/xinference:/data --gpus all xprobe/xinference:latest xinference-local -H 0.0.0.0
安装完成后,浏览器访问http://localhost:9998 可访问WebUI进行验证
由于web没有进度条显示,所以这里选择在容器内用命令行的方式运行模型
进入容器
docker exec -it xinference bash
安装运行embeding模型
xinference launch --model-name bge-m3 --model-type embedding --replica 1 --download-hub modelscope
下载运行
xinference launch --model-name bge-reranker-v2-m3 --model-type rerank --replica 1 --download-hub modelscope
参数解释:
--model-name
:xinference上的模型名称
--model-type
:模型的类型llm、embedding、rerank
--replica 1
:副本数,不用改
--download-hub
:指定模型下载站为modelscope
--n-gpu
:指定模型以GPU方式运行,可选参数为GPU的数量auto、1、2 。如果不加该参数,则使用CPU运行(我们这里的embedding和rerank指定使用CPU运行 所以未加该参数)
也尝试用xinference并指定vllm引擎运行llm模型,但实际使用下来效果并不好。
模型速度很慢,每秒的token数只有原生vllm的三分之一。 并且显存的调用也不理想,两张GPU显存(每张48G)都只使用了30G左右。
可能是我启动参数需要调整(这个问题记录下,之后解决了就把llm模型也迁过来)
xinference launch --model-name deepseek-r1-distill-qwen --model-type LLM --model-engine vLLM --model-format pytorch --size-in-billions 32 --quantization none --n-gpu 2 --replica 1 --n-worker 1 --download-hub modelscope --reasoning-content false
5、集中调用模型的平台
评价一下用过的几个平台
平台 | 描述 | 推荐 |
---|---|---|
OpenWebUI | 界面好看,知识库也好用,支持多用户分组分权。不支持工作流 | 不需要工作流的情况下,非常推荐 |
FastGPT | 界面好看,操作直观,支持工作流,响应很快,知识库专业有提问的特点。(就是Embedding增强索引要收费????简直不能理解) | 不推荐。除非买了商业版 |
Ragflow | 界面好看,操作直观,支持工作流,知识库可以根据文件类型选择多种解析格式,但是回答响应很慢。 | 推荐 |
Dify | 功能看似很全,实际一运行,性能差,检索一趟能花一分钟。甚至直接未响应 | 非常不推荐 |
Anythingllm | 功能全,就是界面不太友好了,配置有难度。性能不错的 | 推荐 |
MaxKB | 速度快,UI简洁,知识库匹配的准确性不太行。 | 推荐 |
Dify
git克隆Dify源代码到本地,假设版本是1.1.2(也可以选择手动到github上下载zip包上传到服务器上)
git clone https://github.com/langgenius/dify.git --branch 1.1.2
进入 Dify 源代码的 Docker 目录
cd dify/docker
复制环境配置文件
cp .env.example .env
运行Dify
docker compose up -d
访问Dify
http://server_ip
修改.env环境变量值
vi .env
上传文件大小限制,单位是M,默认是15
UPLOAD_FILE_SIZE_LIMIT=10000
同时上传的文件数量,默认是5
UPLOAD_FILE_BATCH_LIMIT=100
Dify默认向量数据库是weaviate,如果想切花Milvus向量数据库需要修改以下参数
milvus数据库有问题可以参考这个issues https://github.com/langgenius/dify/issues/14770
MILVUS_URI=http://milvus-standalone:19530
MILVUS_USER=root
MILVUS_PASSWORD=Milvus
以上是几个建议修改的值参数,其他按需修改
修改完后重启Dify
docker compose down
docker compose up -d
Ragflow
确保 vm.max_map_count 不小于 262144
vi /etc/sysctl.conf
vm.max_map_count=262144
验证配置
sysctl vm.max_map_count
克隆仓库
git clone https://github.com/infiniflow/ragflow.git
克隆失败可以挂代理
export http_proxy="http://proxy_ip:port"
export https_proxy="http://proxy_ip:port"
修改环境变量安装带embeding模型的版本
vi .env
v0.17.2-slim修改为v0.17.2
安装以CPU版本运行embedding模型
cd ragflow/docker
docker compose -f docker-compose.yml up -d
Anythingllm
官网的部署命令有问题。数据库文件夹没有给权限,用下面这个命令
export STORAGE_LOCATION=$HOME/anythingllm
mkdir -p $STORAGE_LOCATION
chmod -R 777 $STORAGE_LOCATION
touch "$STORAGE_LOCATION/.env"
docker run -d -p 3006:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm
添加模型
模型供应商添加OpenAI-API-compatible和Xorbits Inference
添加运行率在vllm中的llm模型
添加embedding和rerank模型
设置系统默认模型
6、搭建知识库
文件上传:
web读取:
embedding模型 向量化文本
MaxKB各个组件参数设置建议
组件 | 参数1 | 参数2 | 参数3 |
---|---|---|---|
多路召回(rerank) | Score 0.7 | 分段Top10 | |
知识库检索 | 相似度高于 0.300 | 分段Top10 | 混合检索 |
7、工作流
8、WebUI(可选项)
- Dify的前端对话界面,过于简洁了 并且 手机端似乎有bug。不能向下滑动
- Dify并不能实现用户验证使用,且多用户分权
所以可以借助api的方式,使用其他WebUI。比如:open-webui,界面好看,可以多用户分权。
安装OpenWebUI
在安装openwebui之前还需要先安装一个插件,将dify的api转换为openai api格式,这里使用dify2openai这个项目
安装dify2openai
vi docker-compose.yml
version: '3.5'
services:
dify2openai:
container_name: dify2openai
build:
context: .
dockerfile: Dockerfile
network_mode: bridge
ports:
- "3000:3000"
restart: always
environment:
- DIFY_API_URL=https://server_ip/v1
- BOT_TYPE=Chat
dcoker compose up -d
参数解释:
DIFY_API_URL
:地址替换为Dify的地址即可,http://10.0.0.201/v1
BOT_TYPE
:API的类型,跟dify中的,Chat、agent、workflow对应,如果是workflow还需填写INPUT_VARIABLE和OUTPUT_VARIABLE。请参考这篇文档https://zhuanlan.zhihu.com/p/17873627322
安装OpenWebUI,使用官网的支持英伟达GPU的命令 一键安装即可
docker run -d -p 3001:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
浏览器访问http://server_ip:3001
对接Dify
在设置--外部连接,添加OpenAI API
添加Dify中的模型名称
对话测试
用户的创建的分权
这里每次回答都需要挺长时间,不知道是什么原因。可能跟中间转了一层API格式有关。
这个问题还没找到原因