使用Ollama运行DeepSeek R1

Ollama官方提供了极为简便的运行大模型方法,例如运行DeepSeek-R1模型,则在 Ollama Library > deepseek-r1 使用页面提供的导引找到运行命令。在完成了 安装Ollama(Linux平台) 之后,就可以选择适合你主机环境的模型版本:

  • 主要根据主机的GPU显存或者内存来确定要下载的模型参数

  • 如果主机没有GPU,则自动切换在CPU上运行(速度大减)

由于我的主机使用了 Nvidia Tesla P10 GPU运算卡 ,具备24G显存,所以我这里案例是使用 32b 规格模型:

运行32b的DeepSeek-R1
ollama run deepseek-r1:32b

Ollama 会自动下载大模型文件并运行等待访问:

运行32b的DeepSeek-R1自动下载模型并启动
pulling manifest                                                                                                        
pulling 6150cb382311... 100% ▕████████████████████████████████████████████████████████▏  19 GB
pulling 369ca498f347... 100% ▕████████████████████████████████████████████████████████▏  387 B
pulling 6e4c38e1172f... 100% ▕████████████████████████████████████████████████████████▏ 1.1 KB
pulling f4d24e9138dd... 100% ▕████████████████████████████████████████████████████████▏  148 B
pulling c7f3ea903b50... 100% ▕████████████████████████████████████████████████████████▏  488 B
verifying sha256 digest
writing manifest
success
>>> 使用bash编写一个检查字符串中是否包含basic的脚本
<think>
嗯,我现在需要写一个Bash脚本来检查一个字符串里是否包含“basic”这个词。我之前学过一点Bash脚本,但不太确定该怎么开始。

首先,我要想清楚脚本应该做什么。用户会输入一个字符串,然后脚本要检查这个字符串中是否有“basic”这个词。如果有的话,就
输出包含;没有的话,就输出不包含。这可能涉及到读取用户的输入、进行条件判断以及输出结果。

那怎么读取用户的输入呢?我记得在Bash里可以用read命令来获取输入
...

思考过程有模有样,推导出的脚本是可行的(使用通配符 * ):

deepseek给出的比较字符串包含的bash脚本
#!/bin/bash

# 读取用户输入
read -p "请输入一个字符串: " str

# 将字符串转换为小写
lower_str=$(echo "$str" | tr '[:upper:]' '[:lower:]')

# 检查是否包含"basic"
if [[ "$lower_str" == *basic* ]]; then
    echo "字符串中包含'basic'"
else
    echo "不包含"
fi

而且给出了详细的解释,看来 32b 的版本比之前测试的 7b 参数好了很多,至少给出了正确的编码结果( 7b 是错误的)

备注

如果没有指定 Ollama使用NVIDIA GPU运行大模型 ,那么ollama可能完全是CPU模式运行的,所以如果主机已经安装了 NVIDIA GPUAMD GPU ,那么需要调整配置实现 Ollama使用NVIDIA GPU运行大模型Ollama使用AMD GPU运行大模型

open-webui

备注

open-webui 通过 pip 安装会依赖很多软件,不过我发现类似的 LibreChat ( Install LibreChat Locally )更为复杂,手工安装还需要部署非常沉重的依赖,如 MeiliSearch 。这种复杂的软件堆栈看起来是为了一种商业模式而建,对于个人使用非常不友好。

对于桌面应用,看起来 chatbox 社区版本已经非常合适。不过,我可能还需要继续寻找合适的轻量级WEB UI。

GitHub: open-webui/open-webui 是一个非常易于使用的AI交互界面,支持多种API,例如 Ollama 或者 OpenAI兼容 API。这是一个 Python 程序,所以通过 Python virtualenv 以及 pip 非常容易安装运行:

安装 open-webui( Python virtualenv )
cd ~
python3 -m venv open-webui

. ~/open-webui/bin/activate
pip install open-webui
  • 运行 open-webui :

运行 open-webui( Python virtualenv )
open-webui serve

备注

open-webui 只支持 OpenAIOllama 两种API,所以如果直接部署 本地化部署DeepSeek-R1 CPU架构 使用 llama.cpp ,则无法直接使用 open-webui 。解决方法目前看有3种:

  • 通过 Ollama 来运行 llama.cpp 模型,但是怎么解决自定义运行需要找到方法

  • GitHub: mpazdzioch/llamacpp-webui-glue ( Llamacpp + WebUI with automatic model switching ) 采用了一种巧妙的方法,在 open-webuillama.cpp 之间部署 OpenResty ,通过 openresty 的内置 Lua 定制一个OpenAI API转换层,来直接调用 llama.cpp 的API接口。值得学习借鉴

  • llama.cpp 项目提供了一个 llama-server ,能够使用 OpenAI 兼容API方式提供调用,也就是说,完全可以去除 ollama 直接对接 open-webui ,不过现在可能还没有很好的文档指导。我在 本地化部署DeepSeek-R1 CPU架构 中目前使用 llama-server 来提供服务,具体对接 OpenAI 兼容API的方法待实践

使用GPU

发现一个问题,虽然我的主机安装了24GB显存的 Nvidia Tesla P10 GPU运算卡 ,但是 Ollama 却用CPU完成推理,在 nvidia-smi 完全看不到GPU在工作。我可是特意选择了能够用20GB运行的 32b 参数大模型。

解决方法是 Ollama使用NVIDIA GPU运行大模型

参考