MCPcopy Index your code
hub / github.com/dingodb/dingospeed

github.com/dingodb/dingospeed @dingospeed-v3.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release dingospeed-v3.0.0 ↗ · + Follow
736 symbols 1,812 edges 70 files 109 documented · 15%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DingoSpeed

English | 简体中文

DingoSpeed 是一个自托管的 Hugging Face 镜像服务,旨在为用户提供便捷、高效的模型资源访问和管理解决方案。通过本地镜像,用户可以减少对远程 Hugging Face 服务器的依赖,提高资源获取速度,同时实现数据的本地化存储和管理。

产品特性

DingoSpeed具备以下主要产品特性: * 镜像加速:将首次下载的资源做缓存,客户端下次请求时将从缓存读取并返回,极大提升下载速率; * 便捷访问:无需科学上网及复杂的网络配置,只需部署DingoSpeed服务,并将其作为代理地址,即能方便的完成下载; * 缩流减载:一次下载多次使用,减少重复下载带来的流量浪费,高效且省流; * 本地化管理:实现镜像服务本地编译、部署、监控及使用的全流程覆盖,带来灵活可控的卓越体验,避免了对外部网络和公共镜像仓库的依赖,显著提升了系统的响应速度和数据安全性。

功能清单

单节点下载

  1. [x] 实现了 HTTP RESTful API(兼容 HF Hub 规范),支持模型和数据集下载;
  2. [x] 支持在线、离线下载模式,会优先检查模型是否有更新,优先返回本地已下载的内容;
  3. [x] 支持 HTTP Range 请求,实现客户端断点续传,服务端分块下载大文件,降低内存占用;
  4. [x] 支持下载线路自动切换(huggingface.co->hf-mirror.com),自动启用代理连接;
  5. [x] 实现多版本快照存储;
  6. [x] 支持大文件分块存储、多副本存储节点;
  7. [x] 内存占用率较低,下载速度稳定;

多节点协同下载

  1. [x] 支持跨多个DingoSpeed镜像节点同步缓存数据,避免多节点重复下载同一文件;
  2. [x] 支持在多个DingoSpeed镜像节点间智能调度,返回最佳下载节点,构建点对点下载网络;
  3. [x] 支持模型、数据集预热下载,实时展示总体下载速率、进度等;
  4. [x] 支持将热点模型、数据集缓存到公共目录,方便挂载到容器使用;
  5. [x] 支持故障切换,若访问其他Dingospeed节点失败,将做回源下载;

运维监控

  1. [x] 支持实时监控下载IP、下载速度、流量大小(MB)、请求状态以及下载内容(哪种模型或数据集);
  2. [x] 实现了多种磁盘清理策略(LRU/FIFO/LARGE_FIRST)、定时任务、阈值触发;
  3. [x] 实时检测下载状态,若网络异常时触发企微告警;

系统架构

单节点系统架构图

单节点系统架构图

多节点协同系统架构图

多节点协同系统架构图

安装

项目会使用wire命令生成所需的依赖代码,安装wire命令如下:

# 导入到项目中
go get -u github.com/google/wire

# 安装命令
go install github.com/google/wire/cmd/wire

Wire 是一个灵活的依赖注入工具,通过自动生成代码的方式在编译期完成依赖注入。 在各个组件之间的依赖关系中,通常显式初始化,而不是全局变量传递。 所以通过 Wire 进行初始化代码,可以很好地解决组件之间的耦合,以及提高代码维护性。

本项目使用go mod管理依赖,需要go1.23以上版本。使用makefile管理项目,需要make命令

# 1. 安装依赖
make init

# 2. 代码生成
make wire

# 3. 编译可执行文件,当前系统版本
make build

# 4. mac上编译linux可执行文件
make macbuild

# 5. 为每个文件添加licence
make license

快速开始

将编译生成的二进制部署文件,执行./dingospeed启动。然后将环境变量HF_ENDPOINT设置为镜像站点(这里是http://localhost:8090/)。

Linux:

export HF_ENDPOINT=http://localhost:8090

Windows Powershell:

$env:HF_ENDPOINT = "http://localhost:8090"

从现在开始,HuggingFace库中的所有下载操作都将通过此镜像站点代理进行。可以安装python库试用:

pip install -U huggingface_hub
from huggingface_hub import snapshot_download

snapshot_download(repo_id='Qwen/Qwen-7B', repo_type='model',
local_dir='./model_dir', resume_download=True,
max_workers=8)

或者你也可以使用huggingface cli直接下载模型和数据集. 下载GPT2:

huggingface-cli download --resume-download openai-community/gpt2 --local-dir gpt2

下载单个文件:

huggingface-cli download --resume-download --force-download  HuggingFaceTB/SmolVLM-256M-Instruct config.json

下载WikiText:

huggingface-cli download --repo-type dataset --resume-download Salesforce/wikitext --local-dir wikitext

您可以查看路径./repos,其中存储了所有数据集和模型的缓存。

下载模型

通过将文件按一定的大小切分成数量不等的文件段,由调度工具将任务提交到协程池执行下载任务,每个协程任务将所分配的长度提交到远端请求,按照一个chunk大小来循环读取响应 结果,并将结果缓存的协程独有的工作队列,由推送协程将其推送的客户端。同时每次检查当前chunk是否满足一个block的大小,若满足则将该block写入文件。

下载模型

存储模型

仓库缓存数据文件由HEADER和数据块量两部分构成,其中HEADER作用: 1.提高缓存文件的可读性,当配置文件被修改或程序升级,都不会影响已缓存文件的读取; 2.能高效的检查块是否存在,无需读取真实的数据库,提高操作效率。

存储模型

运维监控

Dingospeed使用时,需实时监控当前运行状态,如什么时候有下载,下载哪些模型,下载速度如何以及下载IP等,Dingospeed已集成prometheus收集运行数据,通过grafana实时展示运行情况,grafana配置在config/grafana。 运维监控

运维监控

运维监控

联系我们,进交流群

Extension points exported contracts — how you extend this code

Server (Interface)
(no doc) [2 implementers]
pkg/server/server.go
Task (Interface)
Task 定义任务类型
pkg/common/pool.go
AppInfo (Interface)
(no doc) [1 implementers]
pkg/app/app.go
Cache (Interface)
(no doc) [1 implementers]
internal/data/cache.go
DownloadTask (Interface)
(no doc)
pkg/common/pool.go
Option (FuncType)
(no doc)
pkg/app/options.go

Core symbols most depended-on inside this repo

Set
called by 39
internal/data/cache.go
Get
called by 28
internal/data/cache.go
FileExists
called by 25
pkg/util/repo_util.go
GetBlockSize
called by 25
internal/downloader/file.go
Lock
called by 21
pkg/lock/distributed_lock.go
Unlock
called by 21
pkg/lock/distributed_lock.go
Repos
called by 17
internal/service/meta_service.go
Error
called by 15
pkg/error/error.go

Shape

Method 402
Function 227
Struct 97
Interface 8
FuncType 1
TypeAlias 1

Languages

Go100%

Modules by API surface

pkg/proto/manager/manager.pb.go147 symbols
pkg/proto/manager/manager_grpc.pb.go56 symbols
pkg/config/config.go52 symbols
pkg/util/repo_util.go30 symbols
pkg/util/util.go21 symbols
internal/downloader/file.go21 symbols
internal/dao/file_dao.go21 symbols
repair/data_repair.go19 symbols
pkg/util/response.go19 symbols
pkg/common/pool.go16 symbols
pkg/util/http_util.go15 symbols
pkg/app/app.go15 symbols

For agents

$ claude mcp add dingospeed \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page