秋招八股准备
不得不向八股文低头了喵。本文应该会持续更新一段时间。
PythonPython 如果函数没有使用 return 语句,则返回的是如果一个 Python 函数没有显式地使用 return 语句,或者执行到了函数的末尾也没有遇到 return 语句,那么函数将默认返回 None。
Python 的 passpass 不做任何事情,一般用做占位语句。pass 的唯一作用就是作为占位符。当你定义一个函数、类、循环或条件语句的结构,但暂时还没想好具体实现时,可以使用 pass 来保证程序语法正确,可以正常运行。
Python 的 yieldyield 关键字的主要作用是将一个普通的函数转变为一个“生成器”(Generator)。一个包含 yield 的函数在被调用时,不会立即执行,而是返回一个生成器对象。这个生成器是一个可以迭代的对象,它“懒惰地”计算值,只有在你请求时才生成下一个值。
当函数执行到 yield 时,它也会返回一个值,但函数会在此处暂停,并保存当前所有的状态(包括局部变量、执行位置等)。下次从这个生成器请求值时,函数会从它上次暂停的地方(上次 yield 语句的下一行代码处)无缝 ...
广西之行
先占坑。
知识管理的方法论
本文略记博主个人的知识管理体系。
首先,明确一点需求:除了隐性知识之外,我所有的知识,在接入互联网的情况下,都应该是可访问的。因此知识必须是电子化的。曾经的纸质笔记可以扫描为 pdf 电子化。
接下来,我们定义何为隐性知识,之后我们不会再讨论它。隐性知识是指那些不宜公开的知识,或者不值得记录的知识。例如,在公司获得的业务经验,或根据保密条款之义务,不能公开但被确实掌握的知识,这些属于不宜公开的知识。再如,一些非常基础的知识,例如义务教育阶段知识、基础的微积分等已经“固化”到脑子里的知识,再花时间记录有些不值当,这些属于不值得记录的知识。
剩下的知识虽然可以公开,但为管理之方便,分为两类:public, private. Public 的知识所有人可以访问,Private 的知识只有我本人可以访问。截至文章写作时,我把它们分为五大类:Blog, Github, Zotero, Baidu Pan, Chrome Bookmarks.
最直观的,Blog,也就是这个博客。可以看到,里面有非常多的笔记,内容较为详实,以下举例:TRPO 笔记、深度学习小记、数据分析业务、工程数学。这种组织形 ...
论文阅读 A Deep Reinforcement Learning Framework for Optimizing Congestion Control in Data Centers
paper: A Deep Reinforcement Learning Framework for Optimizing Congestion Control in Data Centers
这篇论文提出了一个将拥塞控制与强化学习结合在一起的框架。
摘要研究痛点:传统的拥塞控制协议针对特定网络环境设计,其静态参数无法适应现代数据中心极度动态的流量变化 。虽然纯在线强化学习(Online Learning)被寄予厚望,但数据中心的拥塞控制周期在微秒级别,机器无法在如此严苛的时间尺度内收敛并做出准确的控制动作 。
核心创新:提出了一种混合架构。在微秒级的底层控制上,依然依赖专家设计的传统协议;而在秒/小时级别的高层控制上,利用多智能体强化学习(MARL)来动态调整传统协议的关键参数 。
实验结果:以 BBR 算法作为案例(调整其 RTT 和带宽的采样窗口),该系统能显著减少静态参数带来的性能惩罚,将收敛时间缩短了 2.7 倍,并将往返时间(RTT)降低了 40% 。
背景与相关工作传统方案的局限:随着网络带宽延迟乘积(BDP)的增加,从早期的 NewReno 到后来的 BIC 和 CU ...
TRPO 笔记
请注意,《工程数学》中的某些内容是本文的前置知识。
代码实践https://github.com/boyu-ai/Hands-on-RL/blob/main/%E7%AC%AC11%E7%AB%A0-TRPO%E7%AE%97%E6%B3%95.ipynb
我们以车杆(CartPole)环境为例。
view(-1) 和 cat在数学推导中,我们通常把神经网络的所有参数 $\theta$ 当作一个超大的、一维的列向量。例如公式里的梯度 $g$ 和海森向量积 $H \cdot v$,这里的 $v$ 和 $g$ 都是一维向量。
但是,在 PyTorch 的底层实现中,神经网络的参数是以多个不同形状的张量(Tensor)构成的列表。比如:
第一层权重矩阵可能是 [64, 3] 的矩阵
第一层偏置可能是 [64] 的向量
第二层权重矩阵可能是 [2, 64] 的矩阵
1234kl_grad = torch.autograd.grad(kl, self.actor.parameters(), ...
乙巳年记
const_list = {F, M, B, Z, zd, zr, wc, qz}
本博客的年度总结从太阳历换成月亮历了,望周知,主要是实在太忙,只有过年才能得闲。在时间跨度上,这个文章也会记载丙午新年期间的事。
弃我去者
昨日之日不可留
乱我心者
今日之日多烦忧
书、影视乙巳年并没有看多少书,太忙了。
踏切时间
还行,挺有意思的。
唐探1900
低自尊水平的控诉是廉价的。
辉夜姬物语
最重要的两个主旨是,一,人要知道自己想要什么;二,不要假定别人的幸福。 辉夜姬不明白自己想要什么,辉夜姬的养父假定了辉夜姬的幸福。另一点,作为月宫神明的孩子,辉夜姬可以称为纯洁无垢之物。幼稚纯洁对一个孩子或许是赞美,但在成长的过程中会渐渐成为一种危险的特质,只是行走在光明中,没有见过黑暗,就会不知道边界在哪里,作为一种谶言,无垢之子几乎一定会滑落到可悲可叹的境地。
东京残响
还行。
...
RDMA 杂记
本文旨在厘清一些概念上的细节,尽管更高抽象层次上的工作内容无此要求,但当我们深入到仿真代码中试图 debug 或者研究 rdma 的其他内容时,这是必要的。
什么是“流”在 RDMA 中,什么是“流”?这个概念为何提出?有没有对应的物理实体,还是仅仅是方便理解的抽象概念?在普通的 TCP/IP 网络中,有没有类似的“流”的概念?
在 RDMA 中,什么是“流” (Flow)在 RDMA(特别是目前数据中心主流的 RoCEv2)语境下,“流”通常指的是一对 Queue Pair (QP) 之间的通信连接。
更具体地说,一个 RDMA 流由以下特征定义:
五元组 (5-tuple):由于 RoCEv2 封装在 UDP/IP 之上,网络设备(交换机)看到的“流”是由 Source IP, Dest IP, Protocol (UDP), Src Port, Dst Port 决定的。
注意:在 RoCEv2 中,Dst Port 通常固定为 4791 (RoCEv2),而 Src Port 通常由硬件根据流的特征(如 QP Number)计算哈希值生成,专门用于让交换机做 ECMP(等价多 ...
论文阅读 ACC:automatic ECN tuning for high-speed datacenter networks
paper: ACC: automatic ECN tuning for high-speed datacenter networks
Introduction & Background核心问题在高速数据中心网络(25Gbps ~ 100Gbps+)中,RDMA 被广泛使用以降低延迟。目前的拥塞控制机制(如 DCQCN)依赖于交换机上的 ECN(显式拥塞通知)标记。
现状: 现有的方案通常使用静态的 ECN 阈值($K_{min}, K_{max}, P_{max}$)。
挑战:
流量动态性: 流量模式随时间剧烈变化(例如:白天是延迟敏感的 OLTP,晚上是吞吐量敏感的 OLAP),静态设置无法同时满足低延迟和高吞吐的需求 。
手动调优困难: 这种微调通常需要数周时间,且网络中存在异构设备(不同厂商的网卡和交换机),使得统一配置变得不可能 。
目标: 实现“零配置(Zero-configuration)”,即通过机器学习自动在交换机运行时动态调整 ECN 阈值。
现有方法的局限性 (Observations)论文通过实验指出了静态设置的三大缺陷:
不同流量模式需要不同 ...
并行任务、集群并行
存在 AIGC,但是它们都经过验证。
并行任务处理关于此内容的 C++ 方式,可翻阅本博客的其他文章。
如何监控和管理子进程在 Python 中,subprocess 模块是执行外部命令和管理子进程的标准库。
启动进程:
subprocess.run(): 这是一个高级函数,它会启动一个命令,等待它完成,然后返回一个包含其退出码、标准输出和标准错误的 CompletedProcess 对象。这是一个阻塞操作,在子进程结束前,你的 Python 脚本会一直等待。
subprocess.Popen(): 这是一个更底层的接口,它会立即启动一个命令而不会等待它完成。它返回一个 Popen 对象,你可以用这个对象来与进程交互,比如等待它 (.wait())、检查它的状态 (.poll())、或者读取它的输出流。这是实现并行处理的基础。
监控进程是否结束:
process.wait(): 这是一个阻塞方法。调用它会暂停你的脚本,直到这个特定的子进程结束。
process.poll(): 这是一个非阻塞方法。调用它会立即返回进程的状态:如果进程仍在运行,返回 None;如果进程已经结束, ...
强化学习笔记
这不是一个完整的笔记,而是作为一个 attached link 附在 Zotero 上以做补充。
使用的教材:https://github.com/MathFoundationRL/Book-Mathematical-Foundation-of-Reinforcement-Learning/tree/main
Bellman equation关于式 2.7 的一些解释。
数学这两个式子相等,是因为它们本质上是对同一组项进行求和,只是交换了求和的顺序。
在数学中,对于有限项的(或者绝对收敛的)双重求和,求和的顺序是可以任意交换的,这基于加法的交换律和结合律。
1. 第一个式子:
\sum_{s' \in S} v_\pi(s') \sum_{a \in A} p(s'|s, a)\pi(a|s)
我们看内部的和 $\sum_{a \in A} \dots$ 。$v_\pi(s’)$ 位于这个和的外部。
由于 $v_\pi(s’)$ 不依赖于求和变量 $a$,我们可以将其移到内部求和的里面(把它当作一个系数):\sum_{s' \in S} \left( \sum_{a \in A} v_ ...










