<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Femtotron on Echo的技术博客</title><link>https://cybersecurityerial.github.io/echo_blog/tags/femtotron/</link><description>Recent content in Femtotron on Echo的技术博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 15 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://cybersecurityerial.github.io/echo_blog/tags/femtotron/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM System: 训练框架随笔 02 - Femtotron PP Schedule 模块重构日记</title><link>https://cybersecurityerial.github.io/echo_blog/posts/llm-system-training-framework-notes-02-femtotron-pp-schedule-refactor/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0800</pubDate><guid>https://cybersecurityerial.github.io/echo_blog/posts/llm-system-training-framework-notes-02-femtotron-pp-schedule-refactor/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本篇目标：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="为什么要重构"&gt;为什么要重构&lt;/h2&gt;
&lt;p&gt;因为要支持vpp（interleave 1f1b） zerobubble dualpipe dualpipev，之前的只支持1f1b，gpipe。&lt;/p&gt;
&lt;h2 id="从vpp思索stage的执行序"&gt;从vpp思索stage的执行序&lt;/h2&gt;
&lt;p&gt;在gpipe和1f1b里面，一个stage就是一个rank，但如果加上vpp，一个rank上就很多虚拟的stage了。以前设计vpp的初衷就是，一个mb在等通信的时候可以让另一mb去做计算。我们给每个物理rank都绑定了一个executor和一个active queue，为了达成这种目的，我们必须保证两个虚拟stage的active在&lt;strong&gt;指令执行顺序没有依赖&lt;/strong&gt;和&lt;strong&gt;申请的资源不会死锁&lt;/strong&gt;，这样才能让virtual stage A的通信和virtual stage B的计算相互overlap。&lt;/p&gt;
&lt;p&gt;那么上面说的这种overlap要怎么排布active才能实现呢？这个必须先定义边界。&lt;/p&gt;
&lt;h2 id="从dual奇美拉思考stage的执行序"&gt;从dual（奇美拉）思考stage的执行序&lt;/h2&gt;
&lt;p&gt;dual V的思想是让一个物理rank不会只绑定模型的一层，而是模型的某两层。这个和vpp的区别是，vpp的优化是不同mb不同时做通信and计算带来的掩盖效果吗，而dual的思想是一个rank可以做几个model layer进而降低了单任务的IDLE，pipeline从两个方向同时发任务，气泡少。可能带来的代价是任务切换带来的开销，但直觉上这部分开销不会很大。（加个TODO先，有空也会验一验）&lt;/p&gt;
&lt;p&gt;TODO: 验证 folded V / VPP 下更细粒度 action interleave 带来的 kernel launch、stream sync、activation memory 和 comm fragmentation 开销。&lt;/p&gt;
&lt;h2 id="mb编码逻辑"&gt;mb编码逻辑&lt;/h2&gt;
&lt;p&gt;随着foldv，dw分离，vpp的引入，mb的编码应该用一个结构体保存所有metadata而不是简单的id。&lt;/p&gt;
&lt;h2 id="action之痛"&gt;action之痛&lt;/h2&gt;
&lt;p&gt;做到vpp的时候，开始发现femtotron这套基于active-mb的扩展性不够好，在做dw分离的时候我把一个backward action拆成一个d action和一个w action，其实这个设计就给后面的复杂埋下了问题。或者说一开始femtotron的forward，backward，sfrb等设计就让这种设计注定变得不可扩展。因为如果一个schedule包含多种优化，一个action的含义必然是复杂的。&lt;/p&gt;
&lt;p&gt;所以没办法，先研究一下megatron是怎么实现的。&lt;/p&gt;</description></item></channel></rss>