文章目录
- 说明
- 下载模型
- 通过ollama下载
- 通过modelscope下载
- 部署open-webui
- 问题记录
- 临时目录空间不足
- 单机多卡部署
- 后台启动
说明
对于DeepSeek的私有化部署,现在网上已经有很全面的资料了,本文主要记录部署以及部署过程中遇到的问题。目前对于这些问题,网上的资料比较少,我也会持续更新在此过程中遇到的各种问题。
这篇文章对DeepSeek的部署说的很全面,包括ollama、open-webui、dify的安装:
https://www.cnblogs.com/shook/p/18700561
下载模型
通过ollama下载
适合部署小参数的模型,下载速度比较慢,而且不稳定。
ollama模型地址:https://ollama.com/library/deepseek-r1
下载并运行deepseek-r1-7b:
ollama run deepseek-r1:7b
该命令会自动下载并运行,如果只需要下载,使用命令:ollama pull deepseek-r1:7b
退出:Use Ctrl + d or /bye to exit.
下载完成后,可以使用以下命令查看模型信息:
通过modelscope下载
这种方式主要可以解决直接从ollama仓库下载慢、网络不稳定的问题
ollama支持两种格式的模型文件导入:gguf和safetensors,步骤都差不多,下面以gguf为例。
较大参数的模型,可以使用离线下载模型后,导入至ollama运行。
以70B-Q5_K_M为例:
下载地址:https://modelscope.cn/models/unsloth/DeepSeek-R1-Distill-Llama-70B-GGUF
下载好之后上传至服务器并创建ModelFile文件:
ModelFile中指定模型文件路径:
FROM ./DeepSeek-R1-Distill-Llama-70B-Q5_K_M.gguf
关于ModelFile更多内容见:https://github.com/ollama/ollama/blob/main/docs/modelfile.md
准备好之后,执行命令:ollama create deepseek-r1-70b -f ./ModelFile
执行完成之后,通过ollama list命令可以看到模型已导入成功。
这个过程的耗时和模型大小有关。
参考:https://github.com/ollama/ollama/blob/main/docs/import.md
部署open-webui
git地址:https://github.com/open-webui/open-webui
使用docker部署:
docker run -d -p 8080:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
第一次进来需要设置账号,我这个已经设置过了
进去之后,左上角会展示所有已经拉取过的模型
问题记录
临时目录空间不足
使用ollama create导入外部模型时,报错:临时文件夹空间不足,这个很坑,大部分人都说是通过环境变量OLLAMA_TMPDIR指定,其实并不是!
指定临时文件夹执行:TMPDIR=/mnt/largeroom/ollama/ollama/.ollama/tmp ollama create deepseek-r1-70b -f ModelFile
或者修改systemd文件,添加:Environment=“TMPDIR=/mnt/largeroom/ollama/ollama/.ollama/tmp”
参考:https://github.com/ollama/ollama/issues/8086
可以看到已经生效了:
单机多卡部署
这个也花了很多时间才解决,最新的官方文档没有对num_gpu参数的解释,我一直以为是GPU数量。
修改ModelFile,增加参数:num_gpu
FROM ./DeepSeek-R1-Distill-Llama-70B-Q5_K_M.gguf
PARAMETER num_gpu 80
验证过程中发现,当参数num_gpu设置越小,VRAM占用越小,猜想该参数可以控制GPU的负载情况,通过查阅资料和验证,发现:num_gpu参数表示加载至 GPU 的模型层数,根据机器配置,增大该参数的值,当单个GPU无法完全加载所配置的层数时,将分布在所有可用的GPU上。
可以看到显存的使用已经平均分配到每张卡上了
每个模型的层数不一样,猜测该值只要超过单卡的负载就会使用多卡,显存资源足够的情况下,不需要调优该参数。
参考:
https://github.com/ollama/ollama/blob/main/docs/faq.md#how-does-ollama-load-models-on-multiple-gpus
https://snowkylin.github.io/blogs/a-note-on-deepseek-r1.html
后台启动
nohup ollama run deepseek-r1-70b:latest --verbose --keepalive 1200m > output.log 2>&1 < /dev/null &
默认5m就自动释放了,可以通过–keepalive指定模型保留加载的时间。