版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

简述

通过普通的 PC 电脑本地化部署大模型提供基于 deepseek r1 的模型能力。办公 PC 的配置如下:

CPU:i5-11400F  2.60GHz 内存:8G,集成显卡。操作系统:Debian

  • ollama 提供模型集成整合能力
  • deepseek r1 提供大模型算法能力
  • dify 提供 GUI 的整合能力

docker 环境配置

略,参考2011-Photon 容器主机配置指引debian 容器环境配置

Ollama 配置

参照官网的配置说明下载对应的版本:https://github.com/ollama/ollama/blob/main/docs/linux.md。网络环境不太稳定的情况建议考虑离线安装的方式。

1、下载 ollama 离线版本

ollama 有不同的离线版本,主要适配集成显卡、AMD显卡和 Nvidia CUDA 的显卡以及 ARM 版本。这里下载的是通用版本

2、安装并运行 ollama

代码块
languageshell
curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
tar -C /usr -xzf ollama-linux-amd64.tgz
ollama serve
ollama -v
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)

3、配置自启动服务

信息

需要注意在配置文件中增加 “Environment="OLLAMA_HOST=0.0.0.0",否则在后面的Dify GUI 配置界面会出现连接失败的错误

代码块
languageshell
cat > /etc/systemd/system/ollama.service << EOF
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
Environment="OLLAMA_HOST=0.0.0.0"
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"

[Install]
WantedBy=default.target
EOF

systemctl daemon-reload
systemctl enable ollama
systemctl start ollama

加载 deepseek r1 模型

在线更新所需的模型是最简单的

代码块
languageshell
ollama run deepseek-r1:32b
ollama list

如果正常方式下载模型的速度比较慢,可以考虑配置国内的镜像方式下载。详细的操作可以参考以下:

Ollama 的常用参数

  • OLLAMA_MODELS:模型文件存放目录,默认目录为当前用户目录(Windows 目录:C:\Users%username%.ollama\models,MacOS 目录:~/.ollama/models,Linux 目录:/usr/share/ollama/.ollama/models),如果是 Windows 系统建议修改(如:D:\OllamaModels),避免 C 盘空间吃紧
  • OLLAMA_HOST:Ollama 服务监听的网络地址,默认为127.0.0.1,如果允许其他电脑访问 Ollama(如:局域网中的其他电脑),建议设置成0.0.0.0,从而允许其他网络访问
  • OLLAMA_PORT:Ollama 服务监听的默认端口,默认为11434,如果端口有冲突,可以修改设置成其他端口(如:8080等)
  • OLLAMA_ORIGINS:HTTP 客户端请求来源,半角逗号分隔列表,若本地使用无严格要求,可以设置成星号,代表不受限制
  • OLLAMA_KEEP_ALIVE:大模型加载到内存中后的存活时间,默认为5m即 5 分钟(如:纯数字如 300 代表 300 秒,0 代表处理请求响应后立即卸载模型,任何负数则表示一直存活);我们可设置成24h,即模型在内存中保持 24 小时,提高访问速度
  • OLLAMA_NUM_PARALLEL:请求处理并发数量,默认为1,即单并发串行处理请求,可根据实际情况进行调整
  • OLLAMA_MAX_QUEUE:请求队列长度,默认值为512,可以根据情况设置,超过队列长度请求被抛弃
  • OLLAMA_DEBUG:输出 Debug 日志标识,应用研发阶段可以设置成1,即输出详细日志信息,便于排查问题
  • OLLAMA_MAX_LOADED_MODELS:最多同时加载到内存中模型的数量,默认为1,即只能有 1 个模型在内存中

Ollama 导入 GGUF 模型文件到本地磁盘

若我们已经从 HF 或者 ModeScope 下载了 GGUF 文件(文件名为:Meta-Llama-3-8B-Instruct.Q4_K_M.gguf),在我们存放Llama3-8B的 GGUF 模型文件目录中,创建一个文件名为Modelfile的文件,该文件的内容如下:

代码块
languageshell
FROM ./Meta-Llama-3-8B-Instruct.Q4_K_M.gguf

然后,打开终端,执行命令导入模型文件:ollama create 模型名称 -f ./Modelfile

>ollama create Llama-3-8B -f ./Modelfile
transferring model data
using existing layer sha256:647a2b64cbcdbe670432d0502ebb2592b36dd364d51a9ef7a1387b7a4365781f
creating new layer sha256:459d7c837b2bd7f895a15b0a5213846912693beedaf0257fbba2a508bc1c88d9
writing manifest
success

导入成功之后,我们就可以通过list命名,看到名为Llama-3-8B的本地模型了,后续可以和其他模型一样进行管理了。

Ollama 导入 safetensors 模型文件到到本地磁盘

官方操作文档:https://ollama.fan/getting-started/import/#importing-pytorch-safetensors。若我们已经从 HF 或者 ModeScope 下载了 safetensors 文件(文件目录为:Mistral-7B),然后,我们转换模型(结果:Mistral-7B-v0.3.bin);接下来,进行量化量化;最后,通过 Ollama 导入到本地磁盘,创建Modelfile模型文件:


代码块
languageshell
git lfs install
git clone https://www.modelscope.cn/rubraAI/Mistral-7B-Instruct-v0.3.git Mistral-7B
python llm/llama.cpp/convert.py ./Mistral-7B --outtype f16 --outfile Mistral-7B-v0.3.bin
llm/llama.cpp/quantize Mistral-7B-v0.3.bin Mistral-7B-v0.3_Q4.bin q4_0

FROM Mistral-7B-v0.3_Q4.bin

执行导入命令,导入模型文件:ollama create 模型名称 -f ./Modelfile

>ollama create Mistral-7B-v0.3 -f ./Modelfile
transferring model data
using existing layer sha256:647a2b64cbcdbe670432d0502ebb2592b36dd364d51a9ef7a1387b7a4365781f
creating new layer sha256:459d7c837b2bd7f895a15b0a5213846912693beedaf0257fbba2a508bc1c88d9
writing manifest
success

导入成功之后,我们就可以通过list命名,看到名为Mistral-7B-v0.3的本地模型了,后续可以和其他模型一样进行管理了。

参考

部署并配置 dify

部署 dify

通过 docker 部署是最省事的

代码块
languageshell
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up 

dify 配置

默认情况下打开 URL 即可访问

1、进入【设置】-【模型供应商】选择 ollama

2、在 配置页面输入对应的主机 URL 

3、配置后即可按需求发布应用

导入第三方应用

网上有很多已经配置好的 Dify 应用,下载后导入后即可学习。这里导入的应用是【完蛋!我被LLM包围了!】。

成功导入并调整后能正常运行,如下图所示:

要实现上述的效果,需要调整模型和对应的组件。默认的情况下它无法正常启用,会提示错误或缺少相关组件。

1、下载需要导入的应用。通过 https://github.com/svcvit/Awesome-Dify-Workflow 下载,需要导入的应用都在 DSL 目录中存储。

2、修改 docker-compose.yaml 中对应的 sandbox 镜像配置,将 image: langgenius/dify-sandbox:0.2.10 修改为 image: svcvit/dify-sandbox-py:0.1.2 

3、配置 sandbox 所需的依赖包

代码块
languageshell
cat > volumes/sandbox/dependencies/python-requirements.txt << EOF
sympy~=1.13.3
matplotlib~=3.9.3
requests~=2.32.3
EOF

4、重新启动配置文件后,容器会自动加载并更新组件和依赖包

如果导入 DSL 文件后在运行的过程中仍然提示缺少相关的组件,可以按照下面的方式更新

代码块
languageshell
vim volumes/sandbox/dependencies/python-requirements.txt
添加缺失的组件
docker stop docker-sandbox-1
docker compose up -d sandbox


目录