开源之夏经验分享|Dragonfly 社区 李从旺:社区贡献也是一种影响力

news2024/11/26 5:59:05

f5c291c786aae32dd20241f9a03581e2.gif

今天,我们邀请到了开源之夏 2023 活动 Dragonfly 社区的中选学生李从旺同学,他此次承担的项目是——「PyTorch Serve 基于 Dragonfly P2P 技术分发模型」。希望通过他的开源故事,能让更多人了解到开源的魅力,也可以从不同的视角去认识 Dragonfly 项目。

关于 Dragonfly

Dragonfly 提供高效、稳定、安全的基于 P2P 技术的文件分发和镜像加速系统,并且是云原生架构中镜像加速领域的标准解决方案以及最佳实践。自 2017 年开源以来,Dragonfly 被许多大规模互联网公司选用并投入生产使用,并在 2018 年 10 月正式进入 CNCF,成为中国第三个进入 CNCF 沙箱级别的项目。2020 年 4 月,CNCF 技术监督委员会(TOC)投票决定接受 Dragonfly 作为孵化级别的托管项目。Dragonfly 在解决大规模文件分发场景下有着无可比拟的优势。P2P 技术在 AI 推理服务分发大模型场景现阶段应用较少,并且 P2P 技术经过证实也可以真正解决大文件分发过程中的性能瓶颈。在 AI 推理服务分发大模型场景,通过集成 Dragonfly P2P 技术减少源站压力,并且提高模型分发效率。结合 AI 推理领域生态拓展 Dragonfly 应用场景,服务 AI 领域并且成为重要基础设施。

项目信息

项目名称:PyTorch Serve 基于 Dragonfly P2P 技术分发模型

项目导师:戚文博

项目描述:本项目是在 PyTorch Serve 分发过程中解决推理模型拉取时,可能会存在性能带宽瓶颈的问题,所以本项目需要 Dragonfly 通过 P2P 能力提高 PyTorch Serve 模型拉取速度,主要供过 Plugin 方式将 Dragonfly P2P 能力集成到 PyTorch Serve 中。

项目链接:https://github.com/dragonflyoss/dragonfly-endpoint

项目实现思路

无论你是需要安装或是升级,对 Dragonfly 各个组件的理解很重要,这是后期顺利进行性能测试的一个前提。

Manager: 维护各 P2P 集群之间的关系,动态配置管理和 RBAC。它还包括一个前端控制台,方便用户直观地操作集群。

Scheduler: 为下载对等体选择最优的下载父对等体。异常控制 Dfdaemon 的返回源。

Seed Peer:Dfdaemon 开启的种子节点模式,可以作为 P2P 集群中的背向源下载节点,它是整个集群中下载的根节点。

Peer: 与 Dfdaemon 一起部署,基于 C/S 架构,提供 dfget 命令下载工具,dfget 守护进程运行守护进程提供任务下载功能。

架构

78d98955e79ac00629976cbbf723970a.png

TorchServe 通过集成 Dragonfly Endpoint 插件,发送模型下载请求到 Dragonfly ,Dragonfly 作为代理去对应的 Object Storage 下载模型并返回。

9cd3c5bd764f1d058cd1b55969be0ca3.png

模型下载步骤:

1、TorchServe 发起模型下载请求到 Dragonfly Peer。

2、Dragonfly Peer 会到 Dragonfly Scheduler 注册任务。

3、返回拥有资源的候选的父节点。

  • Scheduler 服务发现本地 Cache 对这个任务是缓存未命中状态,就触发从 Seed Peer 进行文件下载。

  • Seed Peer 如果对于任务也是缓存未命中状态,就会触发回源下载,即到对应的对象存储下载模型文件。

4、到对应的候选的父节点进行分片下载文件。

5、模型下载返回后,TorchServe 会进行模型注册。

在性能测试的步骤中,会对模型下载的几种情况分别进行测试,而结果显示下载性能在命中缓存的情况下确实有极大的提升。

beb970c3d31e092da81359ca87ea19fd.png

开源之夏个人随访

 自我介绍

大家好,我叫李从旺,是佐治亚理工学院电子与计算机工程专业研二的学生。去年就曾参加过开源之夏的活动,当时的任务是为 Apache APISIX 网关做插件。

 参加活动的原因

我之前参与过开源之夏,发现这个活动非常适合学生去了解以及深入参与到开源社区。众多的开源项目与技术发现可以让我们了解到行业中的最新动态,比如去年的云原生和今年的 AI 基础设施、大模型等。

同时这种实践搭配的任务难度,在导师与社区的热心帮助之下,无论是为了磨练技术、建立社区连接,还是作为新手开源入门的起点都非常合适。对我来说,第二次参与活动的主要目的是了解并学习新技术。

 申请本社区项目的原因

主要是我对 Dragonfly 的 P2P 技术很感兴趣,并且它也符合我的技术栈。我提前了解过 Dragonfly 在业界的使用情况与热度,得知它作为实用的基础设施广泛被各个公司使用,且仍然在迭代新功能,于是便有了申请的想法。其次就是我对于插件的编写比较有经验,上手本次的项目会更加顺利。

 如何克服项目过程中的困难与挑战?

主要的困难在于,之前我没想到 TorchServe 官方对于前端的插件支持较少,因此在调研初期,花费了较多时间去了解 TorchServe 的架构细节与插件的实现机制等。在插件的设计方案上也踩了不少坑:比如起初只考虑增加模型加速下载的部分,而官方 API 模型的下载与注册却是同时进行的;同时官方的代码设计中许多内部方法是不对外开放的,这样一来插件编写的方案也会有限制。这一问题的克服方法主要是反复查看官方代码、文档以及和导师沟通,不合理的方案不断地被导师淘汰,最终我找到了代码侵入最小的实现方式。

还有开源项目从零开始搭建的困难,包括目录设计、工作流的设计、测试用例、文档编写(需要不断打磨)等工作。这些非 coding 的部分往往会占据更多的时间。我的建议是——积极参考社区优秀活跃的开源项目和直接询问导师,这样效率会比用搜索引擎快得多。因为很多规范是会随时间变化的,新项目当然要符合最新的规范。

困难还出现在测试环节!整个插件的使用涉及到不同的对象存储、Dragonfly 以及 TorchServe 等多个组件;多种环境的部署以及不同的配置细节也需要付出额外的关注。当然,最大的挑战是由我硬件资源不足的电脑带来的,解决的办法主要是详细地记录步骤以及利用一些云计算资源,这对后期使用文档的撰写也非常有帮助。

 导师与社区带来的帮助

在整个开发的过程中,包括前期调研环节,导师给予我的帮助是巨大的。耐心、细心、负责是 Dragonfly 社区以及我的导师给我的最大感受了。他们不仅在技术上给出指导,在文档编写乃至后期的技术交流方面也都非常用心。开发周期内的每周例会和平时的信息反馈也都非常及时,我作为学生,体验也非常好。

 你眼中的 Dragonfly 社区印象

Dragonfly 致力于提供高效、稳定、安全的基于 P2P 技术的文件分发和镜像加速系统,并且是云原生架构中镜像加速领域的标准解决方案以及最佳实践。目前社区还在不断壮大发展中,欢迎大家一起来参与开源共建。

 超出预期的收获

在调研中,我学习到了 Dragonfly P2P 的实现原理以及 TorchServe 各个模块的实现方案。在每周例会中,也有许多来自其他社区的同学或嘉宾,让我了解到 P2P 的不同应用场景、利弊与发展;还有在业界推广中各种各样的复杂情况,如定制修改源码的方案、基于某些业界场景额外修改功能、与某些服务方案的比较等。

此外最重要的技能提升,是在规范撰写代码、细心编写文档、以及从无到有构建开源软件等方面。

本次参与项目对我个人的未来规划也十分有帮助。因为对社区的持续贡献也算是一种影响力,这一影响力的积累与提升,让我在未来的简历书写和择业方向选择上都有了更多底气。

 寄语

开源之夏是一个非常适合新手入门开源社区的好机会。选好你喜欢的社区,就大胆地去参加吧!

Dragonfly Star 一下✨:
https://github.com/dragonflyoss/Dragonfly2

   推荐阅读   

5d0e57d8a6d274eb0bc033d2c3396970.png

Dragonfly 发布 v2.1.0 版本!

d7eac4212b77b6f0ce5336dbf5e4b58e.jpeg

火山引擎基于 Dragonfly 加速实践

5a86bd85c20b61653075c6942c907a6b.png

Dragonfly 中 P2P 传输协议优化

2bfa13fbc33c74ee71d354440804ae43.png

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

a43bf5b23d6fc6c49e7be8fd015c8c46.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《视觉SLAM十四讲》-- 相机与图像

04 相机与图像 4.1 相机模型 4.1.1 针孔相机模型 针孔模型描述了一束光线通过针孔后,在针孔背面投影成像的关系(类似小孔成像原理)。 根据相似三角关系 Z f − X X ′ − Y Y ′ (3-1) \frac{Z}{f}-\frac{X}{X^{\prime}}-\frac{Y}{Y^{\p…

[架构之路-246]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:获取、分析、定义、验证

目录 前言: 架构师为什么需要了解需求分析 一、需求工程概述 1.1 概述 1.2 需求工程的两大部分 (1)需求开发:系统工程师的职责、目标系统开发角度 (2)需求管理:项目管理者的职责、项目管…

Azure - 机器学习:使用自动化机器学习训练计算机视觉模型的数据架构

目录 一、用于训练的数据架构图像分类(二进制/多类)多标签图像分类对象检测实例分段 二、用于推理的数据格式输入格式输出格式图像分类多标签图像分类对象检测实例分段 了解如何设置Azure中 JSONL 文件格式,以便在训练和推理期间在计算机视觉…

Kotlin文件和类为什么不是一对一关系

在Java中,一个类文件的public类名必须和文件名一致,如何不一致就会报异常,但是在kotlin的文件可以和类名一致,也可以不一致。这种特性,就跟c有点像,毕竟c的.h 和 .cpp文件是分开的。只要最终编译的时候对的…

工业相机基本知识理解:工业相机IO接口,功耗和供电方式

I-input 相机接收外部信号,可用于触发相机(硬触发),也可用于定制不同的 功能,例如使用不同信号宽度来改变相机的曝光时间。主要用于现场设 备控制相机使用,常常配合各种传感器使用 O-output 相机输出信号&a…

MS1112,一款16-bit 多输入内置基准模数转换器

MS1112 是一款高精度 16bit 模数转换器,具有 2 组差分输入 或 3 组单端输入通道,高达 16bits 的分辨率。内部集成 2.048V 基 准源,差分输入范围达到 2.048V 。 MS1112 使用了 I 2 C 兼容接口, 并有 2 个地址管…

【Java 进阶篇】JSTL 详解

Java JSTL(JavaServer Pages Standard Tag Library)是用于简化在 JSP 页面上的开发工作的 Java 标签库。它提供了在 JSP 页面上使用的标准标签,可以帮助开发人员更轻松地访问和操作数据,而无需编写大量的 Java 代码。Java JSTL 是…

ros1 自定义topic 主题的发布,监听以及和消息体的定义

1. 在功能包下新增msg 文件夹 在功能包的下面新建 msg 文件夹,如下图所示 2. 新增Person.msg 消息实体 右键打开命令框,输入 touch Person.msg 就会在msg 目录下新增 Person.msg 文件 在Person.msg中输入如下内容完成.msg文件的创建,msg文…

【Leetcode】【每日一题】【简单】2609. 最长平衡子字符串

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/find-the-longest-balanced-subs…

【Java】基于SpringBoot创建Web页面并热更新

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍基于SpringBoot创建Web页面并热更新。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

在微信小程序中怎么实现报名功能

在当今数字化时代,微信小程序已经成为各行各业进行营销和客户管理的必备工具。其中,报名功能作为微信小程序的一个重要应用场景,为企业或组织提供了方便、高效、实时的数据收集与管理方式。本文将为你详细介绍如何在微信小程序中实现报名功能…

shm4mn.dll没有被指定

每次打开excel,都会弹出提示“shm4mn.dll没有被指定” 网上各种方法都试了一次,没效果 解决方案: 直接在设置中删除所有添加的打印机

基于斑马算法的无人机航迹规划-附代码

基于斑马算法的无人机航迹规划 文章目录 基于斑马算法的无人机航迹规划1.斑马搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用斑马算法来优化无人机航迹规划。 1.斑马搜索算法 …

查看apk签名

cmd 命令: keytool -v -list -keystore "E:\xxx\release.jks"

01MyBatisPlus入门案例,常见注解,常用配置

一、入门案例 需求:基于课前资料提供的项目,实现下列功能: 新增用户功能根据id查询用户根据id批量查询用户根据id更新用户根据id删除用户 1.引入MybatisPlus的起步依赖 MybatisPlus官方提供的starter,其中集成了Mybatis和Myba…

Navicat16连接不上mysql

博主是因为服务里MySQL没启动, 如果确定自己的数据库正确无误的朋友就可以退出寻找其它解决办法了。 如图,一打开navicat就初始化,啥都没有,也连接不上 1,搜索里搜【服务】找到MySQL, 发现MySQL未启动。点击…

Map(关联数组)和Set(集合)

目录 Map和Set是用来专门查找的数据结构,查找效率非常高 Map是key-value模型(对应了两个东西) Set是纯key模型(只对应i一个东西) Map的使用 Map的方法 Map的put()方法 Map的get()方法 Map的getOrdefault()方法 Map的keySet()方法 Map的entrySet()方法 Entry是Map的内部接口类​…

OpenAI开发者大会掀起风暴:GPT模型价格狂降50%,应用商店即将亮相,AI技术将引爆全球!

OpenAI首届开发者大会召开了! 关键信息: GPT-4升级版GPT-4 Turbo来了,上下文窗口达到128k,为GPT-4的4倍;OpenAI还降低了几乎所有模型的API使用价格,整体便宜了一半多;GPT-4系列的多模态能力向B…

OAuth2.0双令牌

OAuth 2.0是一种基于令牌的身份验证和授权协议,它允许用户授权第三方应用程序访问他们的资源,而不必共享他们的凭据。 在OAuth 2.0中,通常会使用两种类型的令牌:访问令牌和刷新令牌。访问令牌是用于访问资源的令牌,可…

关于Python hydra库(OmegaConf)(yaml)

这为博友介绍的很清晰,就给大家引荐一下: Python hydra库(OmegaConf)(yaml)_hxxjxw的博客-CSDN博客 安装Python hydra-core我遇到的问题: which pip 确实是虚拟环境(pytorch_gpu) 依然报错 :ModuleNotF…