IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    离线私有化环境部署deepseek之ollama模型缓存

    ysicing (i@ysicing.me)发表于 2025-02-14 16:48:40
    love 0

    离线私有化环境部署 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
    }
    

    到这里基本模型缓存服务就搭建完了,但是使用需要满足以下几点需求

    1. 首先需要 ollama-registry 服务缓存相关模型
    2. 其次才能通过 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
    

    附录

    • ollama 模型缓存
    • ollama 与 oci


沪ICP备19023445号-2号
友情链接