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


    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

  • 相关阅读:
    如何使用 GPU 访问运行 Docker Compose 容器
    6.6 - Windows网络相关命令
    【mybatis基础(一)】mybatis入门案例
    前端如何锁定项目的node和pnpm版本
    lc[栈与队列]---225.用队列实现栈
    Unity 读取DICOM文件,并支持移动端
    网络安全(黑客技术)学习笔记
    pthread使用
    技术干货 | AlphaFold/ RoseTTAFold开源复现(1)—推理复现
    文心一言 VS 讯飞星火 VS chatgpt (92)-- 算法导论8.3 5题
  • 原文地址:https://blog.csdn.net/SOFAStack/article/details/134279324