文章目录。
- 说明。
- 下载模型。
- 部署open-webui。
- 问题记录。
- 临时目录空间不足。
- 单机多卡部署。
- 后台启动。
- 导入分段模型文件。
- Error: llama runner process has terminated: GGML_ASSERT(hparams.n_expert <= LLAMA_MAX_EXPERTS) failed。
- Error: timed out waiting for llama runner to start - progress 0.00 -。
- ollama升级后,#xff0c;该模型仅在CPU上运行。
- 模型随机回答/回答不正常。
说明。
私有化部署DeepSeek,现在互联网上有非常全面的信息,本文主要记录部署和部署过程中遇到的问题。目前,这些问题,网上信息少,在这个过程中,我会不断更新遇到的各种问题。
本文对Depseek的部署非常全面,包括ollama、open-webui、安装dify:
https://www.cnblogs.com/shook/p/18700561。
下载模型。
下载ollama。
适合部署小参数的模型,下载速度比较慢,#xff0c;而且不稳定。
ollama模型地址a;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为例。
大参数模型,离线下载模型后可使用#xff0c;输入到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。
可见已生效:

单机多卡部署。
解决这个问题需要很多时间c;最新的官方文件没有解释num_gpu参数,我一直以为是GPU的数量。
修改ModelFile,增加参数:num_gpu。
FROM ./DeepSeek-R1-Distill-Llama-70B-Q5_K_M.ggufPARAMETER num_gpu 80。
在验证过程中发现,参数num_gpu设置越小,VRAM占用越小,猜测该参数可以控制GPU的负载,通过查阅资料和验证,发现:num_gpu参数表示加载 GPU 模型层数,根据机器配置增加参数值,当一个GPU无法完全加载所配置的层数时,在所有可用的GPU上分布。
可以看出,使用显存已经平均分配到每张卡上。

每个模型的层数不同,猜测多卡只要超过单卡负载,就会使用c;如果有足够的显存资源,参数不需要调整。
参考:
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指定模型保留加载时间。
或者可以用api启动,常驻内存:
curl。--location。'172.22.244.78/api/generate'\。--header。'Content-Type: application/json'\。--data。'{ "model": "deepseek-r1:7b", "keep_alive": -1}'

导入分段模型文件。
对于一些大参数模型,gguf文件分段:

试着只指定其中一个文件导入,不会自动合并,在执行ollama之前,需要先合并 create命令。
网上数据显示,模型文件可以通过cat命令合并:cat *.gguf > combined_model.gguf,试试,合并文件,执行ollama create这两步都没问题,#xff0c;模型导入后不能正常运行。
show模型信息也有问题,而且导入后模型文件巨大:

官网在模型下载c;忽略一句话:

灌顶立即开始安装llama.cpp。
安装参考:https://blog.csdn.net/m0_61797126/article/details/140583788。
安装后可以看到很多工具:

安装完成后,使用llama-gguf-合并split,其基本使用格式为 llama-gguf-split [options] GGUF_IN GGUF_OUT。
该命令需要提供。第一个分片文件。和。合并后的模型文件名。。合并过程中,gguf-split 将自动检查分片文件的完整性,并在合并后输出合并后的模型文件。

重新编辑ModelFile文件:

指定导入命令:ollama create deepseek-r1-671b-q4 -f ModelFile。

查看模型信息:

导入成功!!!
Error: llama runner process has terminated: GGML_ASSERT(hparams.n_expert <= LLAMA_MAX_EXPERTS) failed。

我现在用的ollama版本是0.5.1,升级为0.5.7(最新版本)解决。
升级参考:https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-upgrade-ollama。
Error: timed out waiting for llama runner to start - progress 0.00 -。

设置环境变量增加超时时间(默认5m):OLLAMA_LOAD_TIMEOUT=60m。
所有环境变量和xff1a;https://github.com/ollama/ollama/blob021817e59ace5e351b35b2e6881f83a0546envconfig/config.go#L243。
ollama升级后该模型仅在CPU上运行。
ollama安装包升级后手动下载#xff0c;推理很慢GPU未使用c;
看olllama日志,显示:msg=“Dynamic LLM libraries” runners=[cpu]。

解决:将ollama/lib下的文件复制到olllama二进制文件所需的lib路径下:…/lib/ollama/。
查看ollama当前运行文件路径:

将安装包中lib目录下的内容复制到:

重新运行可见GPU占用༚


参考:
https://github.com/ollama/ollama/issues/8532#issuecomment-2616281903。

模型随机回答/回答异常。

模型官网说明:

prompt使用<|User|> <|Assistant|>只需包裹:

或者直接在Modelfile中指定:
TEMPLATE """<|User|>{ 。{ .Prompt }}<|Assistant|>"""
这样,你就不必每次都写了。以下是《红楼梦》的介绍:



总结还是挺好的,各方面都很恰当。