一、硬件分析
硬件配置:6530*2/512G/960 NVME SSD*2+8T*3/L40*4/2700W*2
GPU分析:由于是企业应用,需要考虑多用户并发,网络上那些硬件分析对于企业来说都过于激进了。L40每块GPU有48G显存,4块加起来有192G,非常适合运行大模型。理论上最大可运行70b的FP16精度模型,模型精度对显存要求如下表:
注意:ollama pull deepseek-r1:70b-llama-distill-fp16 这个对应的是70b的fp16精度模型,下载下来的模型文件约141G;ollama pull deepseek-r1:70b默认是int4的版本,下载下来的模型文件约42G。
大模型量化技术是一种通过降低模型参数的数值精度,将高精度浮点运算(如FP32)转换为低精度整数或定点数(如INT8、INT4)的模型压缩方法。其本质是通过牺牲微小精度损失,换取模型存储空间、计算速度和能耗效率的显著提升。量化技术的劣势也比较明显,会带来精度损失与鲁棒性挑战,可能导致关键特征丢失,模型精度下降5-15%。
只有FP32下的deepseek模型才是满血版,70b的满血版需要约300G显存,以上硬件配置不够。
但尝试vllm+cuda+Ubuntu+dify部署70b的fp16精度模型,发现回答乱七八糟,不确定是部署有问题还是硬件不够。反正企业应用需要多用户并发,决定舍弃fp16精度模型,先用最基础的int4版本部署,试试看效果后再决定要不要升级到int8。
二、软件安装
软件配置:Winserver2022+ollama0.7+deepseek-r1:70b+docker4.41+dify1.4+CUDA12.8
由于大模型及向量数据库的容量需要,将960G的NVME SSD全部划分为C盘。
为什么是ollama+docker+dify?开源生态第一!如果说VLLM,n8n,anythingLLM短期内在某些方面可能有一定优势,但开源生态一旦建立起来,其后发优势将很快弥补。笔者在部署期间,ollama就进行了两次重大更新,让一两个月前进行对比的文章瞬间失效。
Windows Server 2022默认支持WSL 2(Linux 子系統),到服务器管理器中,添加角色和功能,勾上Hyper-V并安装,以后docker需要它,随便把它下面那个IIS去掉,不然后面80端口冲突:
CUDA安装:
先装英伟达L40的驱动,下载 NVIDIA 官方驱动 | NVIDIA,根据GPU型号下载安装,我是L40
装完以后,在命令行中输入"nvidia-smi",查看右上角显示的 CUDA 版本,如下图,显示为12.8
然后去下载12.8版本对应的CUDA,点击右下角download下载,可以选择网络(network)下载,也可以本地(local)下载:
安装需要等待一段时间,当安装完成后,重启电脑。输入"cmd"唤出命令行,输入"nvcc -V",如下图所示则表示安装成功:
ollama安装及大模型安装:
下载适用于Windows的安装包并安装,网址Download Ollama on Windows,一直点下一步完成。
安装完成后任务栏出现ollama,任务栏输入命令可看见版本:
命令行运行:ollama pull deepseek-r1:70b,等待模型下载成功,然后ollama run deepseek-r1:70b运行模型:
为了使ollama能使用上CUDA,几块GPU并行计算,需要配置环境变量,找到编辑系统环境变量:
保证环境变量如下:
变量名:OLLAMA_MODELS,
变量值:ollama的模型下载路径,WINDOWS2022是图上路径
变量名:OLLAMA_HOST
变量值:0.0.0.0(表示允许其他电脑访问 Ollama)
变量名:OLLAMA_NUM_GPU
变量值:4(4块GPU就填4,2块就填2)
变量名:OLLAMA_VISIBLE_DEVICES
变量值:0,1,2,3(4块GPU就这样填,2块就填0,1)
环境变量添加完成后重启电脑,当发现问大模型时出现四块GPU都有使用率时即正常:
向量模型安装:
企业知识库需要对word、excel、PDF进行向量化,当然最佳是Markdown格式,这样需要一个向量模型,一般推荐bge-m3,在终端输入ollama pull bge-m3回车安装,等待完成后再输入 ollama list 查看到 bge-m3:latest 已安装成功
docker安装:
由于docker经常被封,官网打开缓慢,我们可以在国内网站上直接下载一个Docker Desktop,不要到官网去下或者用命令下,比如Docker电脑版下载-Docker Desktop for Windows官方版下载 v4.37.1 - 3322软件站
安装完配置好国内镜像再升级到最新版本。
安装时注意把use wsl2这个√去掉,不然可能会启动不了容器:
一路安装,点击close and log out,推荐配置,不登录,完成:
完后后是这样的:
配置一下国内镜像,然后点击apply and restart:
以下可供参考:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://kqdukn27.mirror.aliyuncs.com",
"https://docker.imgdb.de",
"https://docker.1ms.run",
"https://docker.mirrors.ustc.edu.cn",
"https://reg-mirror.qiniu.com"
]
}
dify安装:
注意:如果当初没有把服务器的IIS端口关闭,安装DIFY时可能会报端口被占用的错误,这时要把IIS关闭,或者给DIFY换一个端口。
访问Dify国内的GitHub加速页面,下载最新版本的ZIP文件并解压。
进入项目根目录下的docker
文件夹,将.env.example复制并
重命名为.env
在powershell中 到dify的docker目录下运行 docker compose up -d
注意这里又是一个卡点,经常中断、经常出错,中断可以找国内的镜像加速,错误的话,看下错误代码一一排除,有点复杂。
如果遇到错误是postgres-data的,还需要改docker-compose.yaml文件的最后部分为下图所示:
volumes:
oradata:
dify_es01_data:
postgres-data:
找到services下的db,修改volumes,将./volumes/db/data改为postgres-data。
如果docker出现dify为绿色就证明启动了:
这里一定要注意上面的那个container memory usage,不能太小,20G以上,到下图地方修改:
直接访问http://localhost/,即可进入dify配置,设置好账号密码:
到模型设置这里去进行模型管理:
模型供应商搜索ollama并安装插件:
进行LLM模型配置,注意模型名称不能乱取,一定是你ollama拉取的那个模型名称:
向量模型也配置好,模型类型选text enbedding:
配置好后:
下一步就是配置知识库,并发布到企业内部系统中了。
知识库配置:
点击知识库——创建知识库,导入已有文本,上传文本文件,下一步
默认可以不用更改,设置为通用,高质量,检索为向量检索,embedding模型选择bge-m3:
一次可以上传多个文件,点击保存并处理,等待嵌入处理完成
嵌入完成后,点击知识库,可以看到我们新建的二十五项反措的知识库,我们也可以点击修改名称,并进行召回测试,看看知识库的搜索效果:
创建知识问答:
到工作室页面下点击创建空白应用
如下图所示应用类型选聊天助手,应用名称填规章制度助手,图标也可以更改,然后点击创建
然后右上角模型选刚才设置的本地70b,左边知识库选择我们刚才的创建的知识库,
输入问题,点击调试与预览即可进行测试:
发布到企业WEB应用:
知识库及应用什么的配置好,可以点击发布更新。在局域网内直接点击运行,出来的网址复制下来(如http://10.1.111.128/chat/GupdkZB16VPKreUV),即可在直接内网访问该网址,前提是服务器打开了80端口,没有打开的到这里去把入站规则80端口加上:
外网访问:
在局域网内部访问的DIFY页面,权限不好控制,外网也没法访问,一般需要嵌入到其他WEB框架中,可以更好控制账户登陆,以及企业微信等访问。
dify友善的提供的嵌入网站的方式,点击上图嵌入网站,出现下图,可参照三个模式修改你的web页面代码以实现嵌入:
当然前提是你的外网防火墙映射NAT后可以访问dify,最简单的一个html示例如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>规章制度AI助手</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<link rel="stylesheet" href="../assets/css/bootstrap.css" />
<link rel="stylesheet" href="../assets/css/ace.css" class="ace-main-stylesheet" id="main-ace-style" />
</head>
<body>
<iframe src="http://www.*****.com:8888/chatbot/******"
style="width: 100%; height: 100%; min-height: 700px"
frameborder="0"
allow="microphone"></iframe>
</body>
</html>
在上面这个页面可以控制访问权限,比如没有登陆跳转之类,或者获取企业微信权限,不在权限范围不予访问等等。
最基本的一个企业知识库到此就完成了,下一步可以进行RAG优化,也可以将模型除了静态文件之外,接入动态数据。