vllm代码更新太频繁,我该怎么办?

来自:大猿搬砖简记

大家好,大家在读vllm源码解读系列时,肯定会有以下疑惑:“vllm仓库当前主分支的代码,好像和当前文章中展示的代码,存在许多不同之处,这是为什么呢?

这是因为vllm的开源社区非常活跃,代码一直在持续更新中。更新内容包括:
- 1. 功能优化类更新。
- 2. 代码形式类更新(例如把代码写得更漂亮,更对象化等)

以我读源码时的经验为例,我在整理完调度器部分的两天后,vllm就对调度器做了一次代码重构,那次重构是以2为主,把代码写得更易读了。当然再这之后调度器也经历了很多次功能上的变更,这里就不另说了。

基于此,你肯定想问:“如果vllm代码库更新如此频繁,那么源码解读类文章是不是太old dinosaur了?这类文章能帮到我什么?“

在写源码解读系列的过程中,我曾经犹豫过,要不要换成最新代码版本,或者定期更新文章,提醒读者最近vllm的主要变动。对于后者,工作量实在太大。而对于前者,当我比较了两个月内不同的代码版本后,我的结论是:还不如固定一个代码版本,把它理明白了,然后再去回归线上的版本,这是最事半功倍的操作。

而我得出这个结论的原因是:在多个版本的比较中,我发现vllm代码架构(代码设计的核心思想、核心优化点)其实是比较稳定的。所以想细究源码细节的朋友,其实不必为源码更新速度过快而焦虑(本来大家的阅读速度也是赶不上代码库迭代的速度的),不如通过一个固定版本,先把最核心的东西提练出来,熟悉一下vllm,然后再去对比着看更新的部分,这样也能更好理解vllm为什么做了这些更新操作。

我举一个例子,2周前vllm代码中移除了逻辑块这个东西,目前只有物理块了。当大家初次看到这个更新操作时,肯定觉得这是个大变更,毕竟和paper都完全不一样了!但是如果大家读过之前的代码,就会发现,其实vllm中逻辑块和物理块都是一种“分配方案”,物理块中也不是真正存放着KV Cache,而是后面的CacheEngine根据这种“分配方案”,去实际落地KV cache的计算、读取操作等。如果说物理块是最终的分配方案的话,那么逻辑块其实是计算这种分配方案的中间结果。最新的迭代只是把原来的两步计算合并为一步计算。我们曾经在源码解读系列说过,逻辑块和物理块的映射是靠Sequence类来做的,而其实在最新版中,逻辑块只是形式上消失了,实际上它依然隐藏在Sequence类的各个属性中(例如,sequence类下可以根据token数量计算需要的逻辑块数量n_blocks,也能直接根据token位置确定它在哪块逻辑块中,诸如此类)。很多朋友如果不了解旧代码的操作,看到这样的变更可能会觉得比较奇怪,毕竟大家看完paper的第一反应都是想去看看逻辑块-物理块这种架构的操作逻辑。

最后,对于如何使用源码解读系列来帮助大家阅读vllm代码,我个人的建议是:

- 可以先阅读这篇讲解源码整体架构的文章(文章中所有的架构图皆来自vllm团队meeting ppt,链接附在文章参考部分中了)。

- 然后再下载最新的vllm代码,自行先阅读,看是否有阅读难度,如果没有,完全可以固定住你当前下载的这个版本,把它先理解透,不需为代码频繁变更而着急。

- 如果觉得理解有难度,可以先读源码解读系列,然后对照新版本,着重关注diff部分,理解做这些更新操作的意义。

- 最后,源码解读永远替代不了自己读一遍代码。

希望这篇说明能给正在为vllm代码频繁变更而头疼的朋友代码帮助~


备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群

032fa417b0c1390b9cdf841f80e7f48e.png

id:DLNLPer,记得备注呦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值