Dragonfly 中 P2P 传输协议优化

智能镜像分发工具dragonfly的安装和使用 一、概述 最近在研究k8s,有时候会遇到镜像拉取缓慢的问题,尤其是必须在多个主机上复制镜像分发时效率较低,之后查阅资料发现这个dragonfly是通过p2p技术解决镜像传输和分发的问题的,在这里将我的学习过程做一个记录。 Dragonfly一个开源的基于P2P镜像及文件分发系统,由阿里巴巴开源的云原生镜像分发系统 Dragonfly,面向以 Kubernetes 为核心的分布式应用编排系统,前瞻性地解决了云原生镜像分发的下列三大难题: 效率:借助 P2P 与 CDN 技术,缩减镜像传输时间,提升分发效率, 阅读详情

文|孙珩珂

上海交通大学

本文1987字 阅读 10 分钟

01 优化背景

此前 Dragonfly 的 P2P 下载采用静态限流策略,相关配置项在 dfget.yaml 配置文件中:

# 下载服务选项。
download:  
# 总下载限速。  
totalRateLimit: 1024Mi  
# 单个任务下载限速。  perPeerRateLimit: 512Mi

其中 perPeerRateLimit 为单个任务设置流量上限, totalRateLimit 为单个节点的所有任务设置流量上限。

静态限流策略的理想情况是: perPeerRateLimit 设置为20M , totalRateLimit 设置为 100M ,且该节点目前运行了 5 个或更多的 P2P 下载任务,这种情况下可以确保所有任务总带宽不会超过 100M ,且带宽会被有效利用。

这种限流策略的缺点是:若perPeerRateLimit 设置为 20M , totalRateLimit 设置为 100M ,并且当前该节点只运行了一个下载任务,那么该任务的最大下载速度为 20M ,和最大带宽 100M 相比,浪费了 80% 的带宽。

因此,为了最大限度地利用带宽,需要使用动态限流来确保任务数量少时能能充分利用总带宽,而任务数量多时也能公平分配带宽。最终,我们设计出一套根据上下文进行动态限流的算法,其中上下文指各任务在过去一秒内使用的带宽,此外,算法还考虑到了任务数量、任务剩余大小、任务保底带宽等因素,性能相比原来的静态限流算法有显著提升。

02 相关代码分析

perPeerRateLimit 配置项最终赋值给 peerTaskConductor 的pt.limiter ,由 peerTaskConductor 的 DownloadPiece() 函数里进行限速,pt.waitLimit() 进行实际限流工作,底层调用 Go 自带的限流函数 WaitN() 。

TotalRateLimit 配置项则在创建 Daemon 时被赋值给 pieceManager 的pm.limiter ,在 pieceManager 的 DownloadPiece() 和 processPieceFromSource() 函数中用到的 pm.limiter ,而这两个函数都会由 peerTaskConductor 调用,也就是说 P2P 下载会先进行总限速,之后再进行每个任务单独限速。

根据以上分析,Dragonfly 进行任务限速的逻辑为,每个peer task(peerTaskConductor)会有单独的限速 perPeerRateLimit ,同时 pieceManager 会有 TotalRateLimit 的总限速,以此达到单任务单独限流,同时限制所有任务总带宽的效果。

03 优化方案

为了解决此前静态限流算法总带宽利用率不佳的缺点,需要将其改进为动态限流算法,即总带宽限速仍恒定,但每个任务的单独带宽限速需要根据上下文适度、定期调整,已达到最大化利用总带宽、同时相对公平分配带宽的目的。

在经过数个改版后,最终我们确定了根据上下文进行限流的 sampling traffic shaper 动态限流算法。具体方案为,每个任务的单任务限流交由 TrafficShaper 组建进行统一管理, TrafficShaper 维护当前正在运行的所有任务,并且定期(每秒)更新这些任务的带宽。

具体来说,上下文指每个任务在上一秒使用的带宽、每个任务的剩余大小、任务数量、任务保底带宽(不能低于 pieceSize )等因素, TrafficShaper 会根据这些上下文公平地、效率最大化地为每个任务分配其下一秒的带宽(具体分配方案详见下一小节),实现动态限流的效果。

04 优化实现

定义 TrafficShaper 接口如下:

// TrafficShaper allocates bandwidth for running tasks dynamically
type TrafficShaper interface {
   // Start starts the TrafficShaper
   Start()   
   // Stop stops the TrafficShaper
   Stop()   
   // AddTask starts managing the new task
   AddTask(taskID string, ptc *peerTaskConductor)
   // RemoveTask removes completed task
   RemoveTask(taskID string)   
   // Record records task's used bandwidth
   Record(taskID string, n int)
   // GetBandwidth gets the total download bandwidth in the past second
   GetBandwidth() int64
}

该接口有两种实现,第一种是 samplingTrafficShaper 即基于上下文的 traffic shaper ,第二种是 plainTrafficShaper 只记录带宽使用情况,除此之外不做任何动态限流工作,用于和 samplingTrafficShaper 对比性能提升。

同时,将相关配置项修改为如下内容:

# 下载服务选项。
download:  
# 总下载限速。
totalRateLimit: 1024Mi
# 单个任务下载限速。
perPeerRateLimit: 512Mi
# traffic shaper类型,有sampling和plain两种可选  trafficShaperType: sampling

Traffic shaper 的具体运行逻辑为,由peerTaskManager维护trafficShaper,在创建peerTaskManager时,根据配置初始化trafficShaper,并且调用Start()函数,启动trafficShaper,具体来说,新建time.NewTicker,跨度为 1 秒,也即每秒trafficShaper都会调用updateLimit()函数以动态更新所有任务的带宽限流。

updateLimit() 函数会遍历所有运行中的任务,得出每个任务上一秒消耗的带宽以及所有任务消耗的总带宽,随后根据任务上一秒使用的带宽、任务剩余大小等因素,按比例分配带宽,具体来说首先根据上一秒该任务使用带宽以及该任务剩余大小的最大值确定下一秒该任务带宽,接着所有任务带宽根据总带宽按比例缩放,得到下一秒的真实带宽;同时需要确保每个任务的带宽不低于该任务的 pieceSize ,以免出现持续饥饿状态。

在 peerTaskManager 的 getOrCreatePeerTaskConductor() 函数中,若新建任务,需要带宽,那么调用 AddTask() 更新所有任务的带宽,即按照已有任务的平均任务分配带宽,然后再根据总带宽上限将所有任务的带宽等比例进行缩放;根据平均带宽分配新任务带宽的优势为,避免了已经有一个任务占满了所有带宽,有新任务进来时,带宽会被压缩到很小 **的情况;同时,不是平均分配带宽,而是按需等比例分配,可以确保带宽需求量大的任务仍然带宽最多。在 peerTaskManager 的 PeerTaskDone() 函数中,任务完成,不再占用带宽,调用 RemoveTask() 按比例扩大所有任务的带宽。

最后, peerTaskManager 停止时,调用 Stop 函数,停止运行 traffic shaper 。

05 优化结果

测试 traffic shaper 相比原有的静态限流策略在单个任务、多个任务并发、多个任务交错等多种情况下的性能提升,测试结果如下:

 注:若不特殊注明,单任务限流为4KB/s,总限流为10KB/s

可以看到, traffic shaper 在单任务、多任务不相交、单任务低带宽等情况下相比静态限流策略性能提升明显,为 24%~59% 。在多个任务并发、多个任务交错等情况下和静态限流策略性能相当。综上,实验证明 sampling traffic shaper 能很好地解决任务数量较少时总带宽被大量浪费的情况,同时在任务数量较多以及其他复杂情况时依旧能保证和静态限流算法持平的效果。

PR 链接(已合并): https://github.com/dragonflyoss/Dragonfly2/pull/1654

本周推荐阅读

Dragonfly 基于 P2P 的文件和镜像分发系统

深入 HTTP/3(2)|不那么 Boring 的 SSL

Go 代码城市上云——KusionStack 实践

MOSN 反向通道详解

从Harbor到Dragonfly:企业级私有镜像仓库P2P加速全流程配置手册 本文详细介绍了如何通过Harbor与Dragonfly的深度集成,构建高性能P2P镜像分发网络,显著提升企业级私有镜像仓库的镜像分发效率。文章涵盖架构原理、核心组件、生产环境部署实战、Harbor集成方案、性能调优与监控等内容,帮助企业实现镜像分发时间从10分钟缩短至3分钟,同时大幅降低仓库负载和网络成本。 阅读详情

相关推荐

Dragonfly改进的JavaScript P2P传输协议

传输协议是网络通信的基础,而P2P(点对点)传输协议则是一种去中心化的方式,允许直接从对等节点之间传输数据,从而提供更高效和可靠的数据传输。在JavaScript中,Dragonfly是一种优化的P2P传输协议,它提供了一种可靠且高性能的数据传输方案。本文将介绍Dragonfly协议的优化,并提供相应的JavaScript源代码示例。开发人员可以根据实际需求,使用Dragonfly协议改进自己的JavaScript应用程序中的数据传输功能。如有任何问题,请随时提问。

python_bug262的博客 203

Dragonfly 基于 P2P 的文件和镜像分发系统

Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。Dragonfly 面向镜像分发和文件分发,结合 P2P 网络和服务器集群的思想,向用户提供稳定的,高效的下载服务。Dragonfly 希望在服务器内部构建 P2P 网络,将服务器的不同主机节点分为 Manager、Scheduler、Seed Peer 以及 Peer 四个角色,分别提供不同的功能。

渡江客涂鸦板 824

Dragonfly:Dragonfly(蜻蜓)是阿里自研的 P2P 文件分发系统,开源版的 Dragonfly 可用于 P2P 文件分发、容器镜像分发、局部限速、磁盘容量预检等。它支持多种容器技术,对容器本身无需做任何改造,镜像分发比 natvie 方式提速可高达 57 倍,Registry 网络出流量降低99.5%以上

蜻蜓 内容 贡献 常问问题 执照 商业支持 介绍 Dragonfly是一个基于P2P的智能文件分发系统。 它解决了大规模文件分发方案中的低效率,低成功率和浪费网络带宽的问题,例如应用程序部署,大规模缓存文件分发,数据文件分发,图像分发等。在阿里巴巴,系统转移20亿次并每月分配3.4PB数据,它已成为阿里巴巴最重要的基础架构之一。 可靠性高达99.9999%。 DevOps从容器技术中受益匪浅,但同时也带来了许多挑战:图像分发的效率,尤其是在您有大量应用程序且需要同时分发图像的情况下。 Dragonfly与Docker和Pouch都可以很好地工作,实际上,我们与任何其他容器技术兼容,而无需对容器引擎进行任何修改。 它提供的吞吐量是本地Docker的57倍,并节省了注册表的99.5%的带宽。 Dragonfly使设置,操作和缩放任何类型的文件/图像/数据分发变得简单且具有成本效益。

Dragonfly-一个基于p2p的高效文件传输系统

Dragonfly 是阿里开源的一款基于 P2P 的智能镜像和文件分发工具。它旨在提高文件传输的效率和速率,最大限度地利用网络带宽。尤其是在分发大量数据时,例如应用分发、缓存分发、日志分发和镜像分发。它能让所有类型的文件、镜像或数据分发变得简单而经济。

ecloud_developer的博客 1548

Win11 WSL2 Ubuntu 18.04 ROS Gazebo 图形渲染性能调优:从LLVM到NVIDIA GPU的完整指南

本文详细解决了在Win11 WSL2 Ubuntu 18.04环境中运行ROS Gazebo时图形渲染卡顿的问题。通过诊断默认LLVM软件渲染的瓶颈,指导用户更新Mesa驱动PPA源,并关键性地设置环境变量以强制启用NVIDIA GPU硬件加速,最终显著提升仿真性能与流畅度。

weixin_29204749的博客 282

AIDC智算中心建设:资源池化核心技术解析

AI 应用的POD在运行的时候,通过池化运行时访问虚拟GPU、执行AI任务,池化运行时拦截对虚拟GPU的访问请求、转递给池化服务代理执行,池化服务代理通过向智算池化控制器查询虚拟GPU所对应的真实智算资源位置、规格,按查询结果分配智算资源、执行AI任务,如果真实的智算资源位于远程计算节点,则由本地池化服务代理将访问请求转递给远程计算节点上的池化服务代理处理,相关通信经由参数面网络。

u013891230的博客 2431

Dragonfly 介绍、更新和快手中的 AI 模型分发实践

Nydus 主要职责是镜像的去重、压缩,并且在镜像启动、运行过程当中进行按需加载,可以将端到端的启动速度从分钟级提升到秒级,同时 Nydus 也是由阿里云、蚂蚁、字节跳动三家公司研发的,DragonFly P2P 的解决方案。介绍了快手 AI 平台的业务背景效果显著。

socialpath的博客 2296

CGNS快速入门到实战(二):VS配置调用CGNS静态链接库

CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库;(三)CGNS文件及案例展示。本篇文章重点讲述VS配置调用CGNS静态链接库。

ahang_99的博客 2618

技术解读|Triton Server 基于 Dragonfly 加速分发模型

Dragonfly GitHub:https://github.com/dragonflyoss/Dragonfly2本文主要解决在Triton Server模型拉取时,存在的中心化的模型仓库带宽瓶颈问题。当在 Triton Server 下载模型的时候,文件相对较大且会有并发下载模型的场景。这样很容易导致存储带宽被打满,从而引起下载过慢的情况,影响推理服务的使用。Triton Server ...

金融级分布式架构 926

从0开始学GEE python——Google Earth Engine (GEE) 和 geemap 库来获取 Sentinel-2 卫星影像,并将其可视化

这段代码的目的是从 Sentinel-2 卫星影像中获取特定地点的影像,并将其可视化在地图上。通过设置合适的波段和可视化参数,用户可以清晰地查看该地区的卫星影像。

此星光明博客 1167

DDR5内存调优实战:手把手教你搞定Write Leveling Training Mode(附时序图解析)

本文深入解析DDR5内存调优中的Write Leveling Training Mode技术,详细介绍了其核心原理、硬件准备、实战步骤及常见问题解决方案。通过JESD79-5标准定义的反馈机制,帮助硬件工程师精确对齐DQS与CK信号,提升系统稳定性和数据可靠性。附有时序图解析和代码示例,适合DDR5内存系统设计与调试参考。

weixin_29256771的博客 550

P2P镜像分发:Harbor+Dragonfly优化k8s集群镜像拉取速度(二)

Dragonfly(蜻蜓)是一款开源的基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。是由CNCF(云原生计算基金会)作为孵化级项目(阿里)。

渡江客涂鸦板 1464

Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR

本篇文章我们将深入了解 Java 语言中的类与对象,探讨构造器、`static`、`final`、包和 JAR 文件。这些概念是面向对象编程的核心,对于理解和掌握 Java 至关重要。

栗筝i的博客 5036

Dragonfly网络协议解析:HTTP和自定义协议实现终极指南

Dragonfly作为一款高性能的P2P文件分发系统,其网络协议设计是系统性能优化的关键所在。本文将深入解析Dragonfly项目中HTTP协议和自定义协议的实现原理,帮助开发者全面理解这一分布式系统的通信机制。🚀 ## 网络协议架构概览 Dragonfly的网络协议架构采用分层设计,主要分为**HTTP协议层**和**自定义协议层**。通过[pkg/protocol/distributio

gitblog_00853的博客 1008

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合ollama无限token实现7*24小时工作(附配置)

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合 ollama 无限token实现7*24小时工作,以及部署安装需要的 skills 完成复杂的工作任务(附完整可以运行的配置文件)。 很多人已经会配置安装 openclaw 了 ,但是 安装完成之后真正让电脑自动运行起来的很好,完成出色工作的更少,最常见的就是聊聊天,或者执行一些简单的命令,理解要让电脑自动化工作,openclaw、skills、大模型这三样。

代码讲故事 2963

python点云可视化

Python三种点云可视化方案:mayavi、matplotlib、CloudCompare。

叶子的博客 1万+

Dragonfly v2.2.0 is released!

Dragonfly v2.2.0 is released! ???????????? Thanks thecontributors[1]who made this release happend and welcome you to visitd7y.io[2]website.FeaturesClient written in RustThe client is written in Rust, offer...

金融级分布式架构 331

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

终极揭秘:Dragonfly2路线图深度解析,未来版本特性和技术演进方向全曝光

Dragonfly2作为基于P2P技术的高效数据分发加速解决方案,正通过其独特的内容寻址文件系统为OCI容器启动提供强大支持。本文将深入剖析Dragonfly2的未来版本特性和技术演进方向,帮助用户全面了解这一项目的发展蓝图。 ## 一、Dragonfly2架构解析:奠定技术演进基石 Dragonfly2的架构设计是其高效数据分发能力的核心基础。从架构图中可以清晰看到,整个系统由Manager

gitblog_00070的博客 370

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Dragonfly安全指南:如何确保P2P文件传输的安全性

Dragonfly是一个开源的P2P文件分发系统,专门设计用于加速大规模文件传输。在当今数据驱动的世界中,确保P2P文件传输的安全性至关重要。本指南将详细介绍如何在Dragonfly中实现安全的文件分发,保护您的数据免受潜在威胁。 ## 🔒 理解Dragonfly的安全架构 Dragonfly采用多层安全架构,确保从客户端到超级节点的每个环节都受到保护。系统通过证书管理、数据完整性验证和访问

gitblog_00976的博客 726

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

云原生时代的镜像分发工具——Dragonfly简介

欢迎关注微信公众号“云原生手记” 文章目录背景dragonfly的原理dragonfly中的概念dragonfly运行原理dfdaemondfdaemon的拦截dfdaemon拦截后作甚dfgetdfget获取blob过程supernode注册接口总结 背景 今天要分享的是Dragonfly,这是阿里开源的一款用于镜像分发的工具,大家最早了解到这款工具,可能是因为调研大规模容器镜像分发的解决方案,最初这款工具确实是用于解决镜像分发问题的,当然,现在仍用于镜像分发,但是将来这块工具的定位将是企业级文件工具。

学习学习再学习 7039

Dragonfly:革命性云原生P2P文件分发系统完整指南

在当今云原生时代,大规模文件分发已成为企业数字化转型的关键挑战。Dragonfly作为一款革命性的云原生P2P文件分发系统,通过智能对等网络技术彻底改变了传统的文件传输方式,为开发者提供了高效、可靠的解决方案。🚀 ## 什么是Dragonfly? Dragonfly是一款开源的智能P2P文件分发和镜像加速系统,专门为云原生环境设计。它通过建立对等网络,让多个节点可以同时从多个源下载文件,大幅

gitblog_07903的博客 630

3分钟掌握Dragonfly:终极P2P内容分发解决方案

在当今云原生时代,大规模文件分发已成为企业面临的重大挑战。传统下载方式在容器镜像、大文件传输时效率低下,带宽浪费严重。Dragonfly作为开源P2P内容分发系统,通过智能调度和分布式传输,将下载速度提升数倍,同时大幅降低源站压力。 ## 🔥 为什么选择Dragonfly? | 传统下载痛点 | Dragonfly解决方案 | |-------------|-----------------

gitblog_00941的博客 946

Dragonfly多机部署实战指南:构建高效P2P镜像分发网络

Dragonfly多机部署实战指南:构建高效P2P镜像分发网络 前言 在现代容器化环境中,镜像分发效率直接影响着应用的部署速度。传统中心化的镜像分发方式在面对大规模集群时常常成为性能瓶颈。Dragonfly作为一款开源的P2P文件分发系统,通过智能的P2P网络技术显著提升了镜像分发效率。本文将详细介绍如何在多机环境中部署Dragonfly系统,构建高效的镜像分发网络。 核心概念解析 在开始部署前,...

gitblog_00302的博客 572

Dragonfly性能测试完全手册:如何评估P2P下载系统的表现

Dragonfly是一个基于P2P技术的智能分发系统,能够显著提升大规模文件分发效率。本手册将为您提供完整的Dragonfly性能测试指南,帮助您全面评估系统表现。🚀 ## 为什么要进行性能测试? 在部署Dragonfly之前,了解系统的性能表现至关重要。通过性能测试,您可以: - 验证系统在高并发场景下的稳定性 - 对比传统下载工具的性能差异 - 确定最优的配置参数 - 为生产环境部署提

gitblog_00278的博客 512

用两条命令搭好本地AI环境:私有化AI工作流部署实录

想让大模型跑在自己机器上,又不想一头扎进依赖调包和网络配置?self-hosted-ai-starter-kit 正是为此准备的:n8n 官方整理的一套 Docker Compose 模板,把低代码自动化平台 n8n、本地推理引擎 Ollama、向量数据库 Qdrant、关系数据库 PostgreSQL 四个组件预先配好,改完环境变量起容器,浏览器里就能打开一个可以对话的 AI 工作流。整套环境默

gitblog_00865的博客 737

Dragonfly 发布 2.3 版本,新增持久化缓存、资源搜索及 Vortex 协议等新特性

Dragonfly 发布 2.3.0 版本,新增多个功能特性并进行安全增强。同时,子项目 Nydus 也增加多个功能特性。本篇博客将介绍最重要的变更。有关功能增强及漏洞修复的完整列表,请查看 d7y.io 官网。

2401_85046472的博客 1039
上一篇: Nydus | 容器镜像基础
下一篇: 活动延期 | Triton Meetup 2022
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值