离线私有化环境部署deepseek之ollama模型缓存
离线私有化环境部署 deepseek 之 ollama 模型缓存
在某些特殊的环境下,导致我们使用 ollama 模型存在各种各样的问题。最常见的就是拉取不了或者拉取速度很慢。基于这点,想到了如何去镜像缓存这些。
应用场景
方便给离线环境下的用户部署私有大模型体验。
ollama 与 oci
可以跳过这部分记录早期我的探索,得出目前不支持通用 OCI 方式。
从上面 ollama 拉取模型来看,是不是很眼熟,和我们经常拉取容器镜像是不是很相似。深入研究后发现,有着容器镜像的模型名称、分层存储结构,其中 manifest 保存 layer 列表,blob 存储二进制文件。那灵机一动是不是,可以存镜像的 registry 是不是也可以存 model。
搭建镜像服务
services:
registry:
image: registry:latest
container_name: registry
restart: always
ports:
- "5000:5000"
environment:
TZ: Asia/Shanghai
基于官方的 registry 镜像跑了一个镜像仓库来模拟,将上面的文件保存为 docker-compose.yaml
运行起来
docker compose pull
docker compose up -d
下载 deepseek-r1 小模型
# 下载deepseek最小模型验证
ollama pull deepseek-r1:1.5b
# 重命名
ollama cp deepseek-r1:1.5b 127.0.0.1:5000/ollama/deepseek-r1:1.5b
推送到本地镜像仓库
ollama push 127.0.0.1:5000/ollama/deepseek-r1:1.5b --insecure
推送很成功,给人一种万事俱备,只等下载了
验证下载
ollama pull 100.90.80.29:5001/ollama/deepseek-r1:1.5b --insecure
pulling manifest
pulling aabd4debf0c8... 0% ▕ ▏ 0 B/1.1 GB
Error: http: no Location header in response
下载提示这个,去搜了一下这个报错,也有人反馈这个问题,解决也可以参考这个 ollama#7474
根据核心开发者的反馈,我大概总结了一下:
尚未公开使用 OCI 规范,因为我们正在对其进行重大修改,以确保未来的灵活性。
其实到这里使用 oci 的方式行不通了。另外官方也没有透露如何搭建私有化模型仓库。
基于 caddy+ollama 部署镜像缓存加速
主要参考了大佬 ollama 模型缓存这篇博客,有兴趣的可以看看作者的逆向分析。这里主要讲一下如何快速搭建模型缓存。
镜像版本
使用这个镜像,可能有丢丢麻烦,但是也还好,需要套两层 caddy,一个是镜像内置的 caddy,一个是外部的 caddy 代理服务。
services:
ollama-registry:
image: wbuntu/ollama-registry:v0.1
container_name: ollama-registry
restart: always
ports:
- "8080:8080"
volumes:
- '/data/ollama-models:/data'
将上面的文件保存为 docker-compose.yaml
, 执行
docker compose pull
docker compose up -d
配置 caddy 服务
ai-models.china.12306.work {
import LOG "/var/log/caddy/ai-models.log"
reverse_proxy 127.0.0.1:8080
}
到这里基本模型缓存服务就搭建完了,但是使用需要满足以下几点需求
- 首先需要 ollama-registry 服务缓存相关模型
- 其次才能通过 ollama-registry 拉取模型
# 通过ollama-registry缓存qwen2.5的模型
docker exec ollama-registry ollama pull qwen2.5:latest
# 其他服务器下载模型
ollama pull ai-models.china.12306.work/library/qwen2.5:latest
非镜像版本
要求部署了 ollama 和 caddy,方便操作 caddy 部署用户使用 root,避免权限问题.(默认情况,两者都已经跑起来了), 主要是配置 caddy。
其实就是将镜像里的 caddy 独立出来了,Caddyfile 示例如下:
ai-models.china.12306.work {
import LOG "/var/log/caddy/ai-models.log"
# root directory
root * /root/.ollama/models
# match blob request
@blobRequests path_regexp blob /v2/([^/]+)/([^/]+)/blobs/sha256:(.+)
# rewrite blob request
rewrite @blobRequests /blobs/sha256-{re.blob.3}
# add Location header on response
header @blobRequests {
Location {uri}
}
# match manifest request
@manifestRequests {
path_regexp manifest /v2/([^/]+)/([^/]+)/manifests/(.+)
}
# rewrite manifest request
rewrite @manifestRequests /manifests/registry.ollama.ai/{re.manifest.1}/{re.manifest.2}/{re.manifest.3}
# add Content-Type header on response
header @manifestRequests {
Content-Type application/vnd.docker.distribution.manifest.v2+json
}
# static file server
file_server browse
}
其他
目前,我已经缓存了 5 个通用大模式供大家下载, 如果大家还有其他模型需要加速,可以私信我。
ai-models.china.12306.work/library/qwen2.5:latest
ai-models.china.12306.work/library/qwen2.5-coder:latest
ai-models.china.12306.work/library/deepseek-r1:1.5b
ai-models.china.12306.work/library/deepseek-r1:7b
ai-models.china.12306.work/library/deepseek-r1:8b