ubuntu中使用ollama部署本地deepseek
ubuntu中使用ollama部署本地deepseek
一、安装Docker
1、先卸载旧版,如果没有的话,就不用执行了,直接第二步。
apt-get remove docker docker-engine docker.io containerd runc
2、在终端输入
apt update
apt-get install ca-certificates curl gnupg lsb-release
3、安装证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4、写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
5、安装
sudo apt-get install docker-ce docker-ce-cli containerd.io
中途出现问题的话,使用 sudo apt-get update 试试
二、安装ollama
docker中安装ollama
docker pull ollama/ollama
使用CPU运行
docker中仅使用CPU运行ollama
docker run -d --mount type=bind,source=/home/ubuntu,target=/root -p 11434:11434 --name ollama ollama/ollama
使用GPU运行
配置仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
安装nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkit
国内镜像好像没有这个包,若没有梯子可以手动去下载 https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/
根据自己的ubuntu版本进行选择
https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu20.04/amd64/
需要下载如何几个包
- nvidia-container-toolkit-base_1.13.5-1_amd64.deb
- libnvidia-container1_1.13.5-1_amd64.deb
- libnvidia-container-tools_1.13.5-1_amd64.deb
- nvidia-container-toolkit_1.13.5-1_amd64.deb
# 按顺序安装即可
sudo apt install -y ./nvidia-container-toolkit/nvidia-container-toolkit-base_1.13.5-1_amd64.deb
sudo apt install -y ./nvidia-container-toolkit/libnvidia-container1_1.13.5-1_amd64.deb
sudo apt install -y ./nvidia-container-toolkit/libnvidia-container-tools_1.13.5-1_amd64.deb
sudo apt install -y ./nvidia-container-toolkit/nvidia-container-toolkit_1.13.5-1_amd64.deb
docker中使用GPU运行ollama
docker run -d --gpus=all --mount type=bind,source=/home/ubuntu,target=/root -p 11434:11434 --name ollama ollama/ollama
三、准备DeepSeek模型和运行
从modelscope下载模型
打开modelscope网站,搜索DeepSeek模型,选择gguf格式的模型下载。
https://modelscope.cn/home
pip install modelscope
# 下载gguf模型文件到/home/ubuntu/DeepSeek-R1-Distill-Qwen-1.5B-GGUF目录
modelscope download --model unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF DeepSeek-R1-Distill-Qwen-1.5B-Q8_0.gguf --local_dir /home/ubuntu/DeepSeek-R1-Distill-Qwen-1.5B-GGUF
ollama使用gguf模型,需要准备一个Modelfile.txt文件
文件中写入FROM + 模型路径
FROM /home/ubuntu/ollama/DeepSeek-R1-Distill-Qwen-1.5B/DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf
使用ollama创建模型
# docker接入ollama容器中
docker exec -it ollama /bin/bash
ollama create DeepSeek-R1-Distill-Qwen-1.5B -f Modelflie.txt
运行模型
ollama run DeepSeek-R1-Distill-Qwen-1.5B
拷贝ollama下载好的模型到ollama目录下
若有其他人通过ollama已经下载好的模型,可以直接拷贝到ollama目录下
由于我们在运行ollama容器时,挂载了容器的/root目录到宿主的/home/ubuntu,所以可以直接拷贝文件。
此时,docker容器中ollama的models目录在宿主的/home/ubuntu/.ollama/目录下。我们将下载好的models文件夹拷贝进去即可
cp -r /home/ubuntu/models/ /home/ubuntu/.ollama/
或者使用rsync命令拷贝文件夹,忽略已存在的文件。
# 忽略已存在的文件,拷贝文件夹
# -a:归档模式,递归拷贝并保留符号链接、权限、时间戳等。
# -v:详细模式,显示拷贝过程中的详细信息。
# --ignore-existing:跳过目标位置中已存在的文件。
rsync -av --ignore-existing /source/directory/ /target/directory/
运行模型
# 查看模型列表
ollama list
# 运行模型
ollama run DeepSeek-R1-Distill-Qwen-1.5B
四、使用接口进行访问
/api/chat 和 /api/generate 这两个API端点的主要区别在于它们的设计目的和处理上下文的方式:
/api/generate
用途: 这个端点主要用于生成单个文本片段。它接收输入并返回基于该输入的模型生成的文本,通常不考虑之前的消息历史或对话上下文。
功能: 它可以用于各种生成任务,如文章创作、代码生成、故事编写等,其中每次请求都是独立的,不依赖于前一次请求的结果。
# POST
10.0.113.101:11434/api/generate
# 请求体json
{
"model": "DeepSeek-R1-Distill-Qwen-1.5B",
"prompt": "你好,我是",
"stream": false
}
/api/chat
用途: 这个端点用于支持对话式的交互。它通常需要一个消息列表作为输入,以维护对话的历史和上下文,确保模型能够理解并响应连续的对话。
功能: 它适合于创建聊天机器人、问答系统或任何需要多轮对话的应用场景。通过跟踪对话历史,模型可以提供更加连贯和情境相关的响应。
# POST
10.0.113.101:11434/api/chat
# 请求体json
{
"model": "deepseek-r1:70b",
"messages": [
{ "role": "assistant", "content": "ai对测绘行业有哪些影响"}
],
"stream": false
}
总结而言,/api/generate 更适合一次性生成任务,而 /api/chat 更适合需要持续对话和上下文记忆的任务。
主要事项:
ollama把本地大模型加载到内存后,一段时间不使用,ollama就会把这个大模型从内存中赶出去,为了释放内存。
这会导致每次请求都需要重新加载模型,这会导致请求时间较长。
解决办法:
方法一:使用ollama的api接口访问时,设置"keep_alive":-1
方法二:在 /etc/systemd/system/ollama.service 中加入 Environment=“OLLAMA_KEEP_ALIVE=-1”
ollama.service文件内容:
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_KEEP_ALIVE=-1"
修改后执行命令:
sudo systemctl daemon-reload
sudo systemctl enable ollama
docker环境中可以使用docker compose进行部署配置,在docker-compose.yml文件中加入环境变量即可。
version: "3.9"
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- /home/ubuntu:/home/ubuntu
- /home/ubuntu:/root
environment:
- OLLAMA_KEEP_ALIVE=-1
五、使用AnythingLLM进行交互
# docker中安装AnythingLLM
docker pull mintplexlabs/anythingllm
# docker中运行AnythingLLM
docker run -d --name anythingllm --mount type=bind,source=/home/ubuntu,target=/root -p 3001:3001 mintplexlabs/anythingllm