各位朋友,大家好,我是Chunel,很高兴在这里和大家见面了。我是从2020年开始在开源社区写代码的,很高兴这些年认识大家,也很高兴自己做的东西也被大家熟悉和喜爱,也在几乎所有设计到编程的各行各业有了多个实际落地落地案例。也听到了来自四面八方的各种声音,让我对自己和项目,都有了更明确的认识,同时更清晰的规划下一步的计划和接下来的方向。
这些年,我是有每年新年都有写文章给大家做回顾和拜新年的习惯的。今年因为各种原因,过年没有回家,而是选择了出国旅行。在国外也是一直坚持更新项目的好么,有图为证,哈哈。回来之后又是一堆事情,所以稍微耽误了一些。不过,该有的总结和展望,虽迟但到。
坚持惯例,先上地址:https://github.com/ChunelFeng/CGraph
2024年回顾 |
去年一年,CGraph 在功能、性能和稳定性上,又有了非常大的提升。我们发布了3个release版本,丰富了pipeline的执行策略、编排逻辑、执行逻辑;基于数据结构和操作系统的理论,提升了整体运行性能的同时,极大了降低了运行时的cpu负载;引入了新的编译方式;提供极简的 CGraph-lite 版本;并且对一些很细节的功能,做了增删改和性能优化,以便更好的迎合和适配大家的需求。
去年这一年,伴随着项目的完善和影响力的提升,我们同样支持了很多公司和团队的项目落地,极大的简化了大家做任务编排和算子化的难度。其中不乏一些行业头部的公司,就拿我稍微熟悉一些的智驾领域,我知道的实际落地的公司,就至少有3家,并且都丝滑落地,一致好评。看一张我们的用户提供的构图,这些逻辑如果自己直接写的话,那会有多大的工作量?更可怕的是,后期会有多大的维护和交接工作量,你懂的。
我们还坚持做一些技术输出的工作,CGraph项目自身,我通过迭代文档和视频,来介绍最新的功能点和优化点。同时我们也组织了9次社区内的技术分享,内容设计编译器、端开发、图调度、nlp、大模型推理和部署等多个领域,感谢大家的整理和分享。我也肉身入局,约见了多位来着社区的朋友,和大家面对面进行深入浅出的交流。也希望接下来一年有机会,给大家分享一点我的所知所想。
CGraph的python版本 |
单独列出来说PyCGraph 的事情,因为这个事情对项目的昨天、今天和明天都有事关重大。早在2年前,我们小团队就一起做过这方面的尝试,但限于自身水平和对cpp with python 交互的理解,结果并没有太多水花。今年是蛇年,我们又重燃了 CGraph 的python版本的兴趣,并且随着A神和守夜大佬的加入和指导,我们也解决了之前遇到的几乎所有难题,前景一下子就光明了起来。举杯敬大家。
其实我们也知道,如果还一直focus在调度、切换、图结构、操作系统这些方面继续深耕和优化的话,我们可能还能做出来一些提升(当然,这些内容我们肯定也会持续的学习和进行),但对项目、对用户的帮助和体感已经没有那么大了,而且这是一条非常非常艰辛的道路。就好比跑步吧,如果你100米跑到了10s,已经是非常牛批了。如果你还想再进一步,那将会是非常艰难的。但如果你在继续训练跑步的基础上,又去练习跳高和跳远,那你就将在有速度优势的基础上,快速的掌握一大波新的运动技能和技巧。至于下一步,你的新技巧甚至可能形成反哺(or 倒逼?哈哈),帮你进一步在跑步方面突破。
如果说上面的例子不是很准确,那我再举一个例子。如果你想在篮球方面做到世界第一人,那一定是非常难的对吧。但如果你想在唱、跳、rap、篮球这四个领域的综合维度做到第一,那… 好了,不说了,去踩缝纫机了。
至于现状,我们来通过一个非常简单的demo展示一下 PyCGraph 的用法
import time
from datetime import datetime
from PyCGraph import GNode, GPipeline, CStatus
class MyNode1(GNode):
def run(self):
print("[{0}] {1}, enter MyNode1 run function. Sleep for 1 second ... ".format(datetime.now(), self.getName()))
time.sleep(1)
return CStatus()
class MyNode2(GNode):
def run(self):
print("[{0}] {1}, enter MyNode2 run function. Sleep for 2 second ... ".format(datetime.now(), self.getName()))
time.sleep(2)
return CStatus()
if __name__ == '__main__':
pipeline = GPipeline()
a, b, c, d = MyNode1(), MyNode2(), MyNode1(), MyNode2()
pipeline.registerGElement(a, set(), "nodeA")
pipeline.registerGElement(b, {a}, "nodeB")
pipeline.registerGElement(c, {a}, "nodeC")
pipeline.registerGElement(d, {b, c}, "nodeD")
pipeline.process()
哈哈,单纯看demo,是不是感觉很熟悉。我们尽可能1比1的复刻 cpp版本的接口和功能用法,减少大家的使用成本和入门负担。也会尽可能做到让大家在工程中同时使用cpp和python混合开发。
其实这并不简单,其中涉及到 python本身就没有的模板概念,python中对象的申请和析构,cpp中如何提供对应的适配 等一系列问题。上述问题,当前我们都有了相应的解法,我们也会持续pk接下来的遇到的一切问题,目标就是今年可以完成 CGraph中所有功能的 python 版本迁移。
我们最近也会很快推出最新的 v3.0.0 版本,让大家先把体验起来。也欢迎大家多多给出意见和帮助。有了python版本,之前大家多次提到的配置生成,方案管理等内容,就会简单多了,不是么?还有就是大家如果想做一些后台服务部署、或者算法验证啥的,那不就是一个 pip install xxx + PyCGraph 就可以解决的事情了么,哈哈。现在的我,甚至相信,今后大家会更多的使用和喜欢 PyCGraph,而不是 CGraph本身,嘿嘿。
2025年展望 |
新的一年,自己的事情也非常多,也有了很多计划的改变,开始想着去尝试一些之前没尝试过的内容。比如,我会想,是不是的经商or投资头脑太差了,需要恶补一下。我也会想,自己这些年,周末天天在咖啡厅里闷头敲代码,看似一直在刷性能,学技术,但这是不是就是自己的舒适区。要不要去接触一些别的内容,比如学一学调酒?
这个时候就需要有各个领域的朋友和大佬,带一带了。希望大家不嫌弃小白,可以带我入局。毕竟,我不会,但我愿意学啊,哈哈哈。
接下来的一年,我会遇到自己职业生涯中的最大挑战和危机。好在自己所在的团队和方向都很不错,在行业里也很有竞争力,期待和大家一起乘风破浪,继续征程,攻克难关。在开源社区,我们要努力去实现下一篇爽文的内容:【爱上CGraph是每个码农的宿命】。我知道,我们需要的不仅是 Python,更需要有 Passion 和 Patient ,这就是我常说的3P原则吧
最后祝愿大家在新的一年里,一切都好,小纯在这里给你比心了。
[2025.03.02 by Chunel]
推荐阅读
- 纯序员给你介绍图化框架的简单实现——执行逻辑
- 纯序员给你介绍图化框架的简单实现——循环逻辑
- 纯序员给你介绍图化框架的简单实现——参数传递
- 纯序员给你介绍图化框架的简单实现——条件判断
- 纯序员给你介绍图化框架的简单实现——面向切面
- 纯序员给你介绍图化框架的简单实现——函数注入
- 纯序员给你介绍图化框架的简单实现——消息机制
- 纯序员给你介绍图化框架的简单实现——事件触发
- 纯序员给你介绍图化框架的简单实现——超时机制
- 纯序员给你介绍图化框架的简单实现——线程池优化(一)
- 纯序员给你介绍图化框架的简单实现——线程池优化(二)
- 纯序员给你介绍图化框架的简单实现——线程池优化(三)
- 纯序员给你介绍图化框架的简单实现——线程池优化(四)
- 纯序员给你介绍图化框架的简单实现——线程池优化(五)
- 纯序员给你介绍图化框架的简单实现——线程池优化(六)
- 纯序员给你介绍图化框架的简单实现——性能优化(一)
- 纯序员给你介绍图化框架的简单实现——性能优化(二)
- 纯序员给你介绍图化框架的简单实现——距离计算
- CGraph 主打歌——《听码农的话》
- 聊聊我写CGraph的这一年
- 从零开始主导一款收录于awesome-cpp的项目,是一种怎样的体验?
- 炸裂!CGraph性能全面超越taskflow之后,作者却说他更想…
- 以图优图:CGraph中计算dag最大并发度思路总结
- 一文带你了解练习时长两年半的CGraph
- CGraph作者想知道,您是否需要一款eDAG调度框架
- 降边增效:CGraph中冗余边剪裁思路总结
个人信息
- 微信: ChunelFeng
- 邮箱: chunel@foxmail.com
- 个人网站:www.chunel.cn
- github地址: https://github.com/ChunelFeng