NCCL+PyTorch源码阅读(一):通信环建立中的根结点
前言:本文是对 知乎@张宇杭 系列文章的补充,只对核心逻辑进行拆解。阅读后可继续通过 知乎@张宇杭 的 NCCL 源码阅读补充更多知识。
在使用 PyTorch 作为深度学习框架时,如果涉及模型的切分,需要创建一个“通信组”(process_group)。后续的所有模型操作需要在通信组内进行同步操作。以 DP 为例,我们在模型构建时会使用:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import torchimport torch.nn as nnfrom torch.utils.data import DataLoader, TensorDatasetfrom torch.utils.data.distributed import DistributedSamplerimport torch.distributed as distclass TinyModel(nn.Module): def __init__(self): super( ...
RDMA:通信抽象、数据通路与 RoCEv2 拥塞控制
与传统的 TCP/IP 网络相比,RDMA 改变了主机网络栈的通信模型。
传统 TCP/IP 通信通常是:
12345678应用 buffer -> kernel socket buffer -> TCP/IP stack -> NIC -> 网络 -> NIC -> kernel socket buffer -> 应用 buffer
而 RDMA 的目标是把数据路径变成:
12345应用注册内存 -> RNIC -> 网络 -> RNIC -> 远端应用注册内存
其中 CPU 不再负责搬运 payload,内核协议栈也不再处于数据面路径的中心。应用通过一系列队列、描述符和内存注册机制,把“我要读/写哪块内存”告诉 RNIC,由 RNIC 直接通过 DMA 访问主机 DDR,并在网络上完成可靠传输。
本文从传统网络视角梳理 RDMA 通信架构,重点讨论:
RDMA 通信抽象
RDMA 通信的流程与原语
RDMA 通信的数据通路
RoCEv2 报文与拥塞控制
RDM ...
Measurement
简介这里是一个对于经典网络测量工作的总结,目前包括:
主动测量:
Pingmesh(Microsoft, SIGCOMM’15)
R-Pingmesh(ByteDance, SIGCOMM’24)
RD-Probe(HuaWei, SIGCOMM’24)
被动测量:
FlowRadar(NSDI’16)
LossRadar(CoNext’16)
UnivMon(SIGCOMM’16)
Passive Realtime Datacenter Fault Detection and Localization(Facebook, NSDI’17)
Elastic Sketch(SIGCOMM’18)
PINT(SIGCOMM’20)
DART(SIGCOMM’22)
ChameleMon(SIGCOMM’23)
网络测量的目的是以一定粒度对整个网络的性能表现进行分析,其中性能表现包括但不限于:时延、丢包率、抖动等。
从测量方式上分类,分为主动测量和被动测量两种:主动测量一般会由服务端主动发起 Ping 请求(或修改过的基于 TCP 的 Ping 等)主动探测网络性能,被动测量通过部署 ...
Filters & Sketches
简介这里是一个对于常见过滤器及其变体的总结,目前包括:
Bloom Filter
IBLT
Count-Min Sketch
Cuckoo Sketch
Augmented Sketch
Fermat Sketch(ChameleMon)
HyperLogLog
为什么我们需要过滤器?多数情况下是因为我们没办法处理所有的数据,需要一些近似的手段保存和记录数据。尤其是在交换机上,不仅能调配的资源十分有限,需要处理的流量也极大。我们不得不使用各种过滤器搭建数据面 Sketch 记录和保存我们所需数据某个聚合(当然也可以动态地由控制面调节具体参数),否则交换机本身、通信链路都无能处理。
在使用过滤器时,最朴素的用法是:定义好桶(cell)的字段,直接按需收集信息。常见的优化方式包括:在 Ingress 和 Egress 分别部署两个过滤器,通过分析过滤器差值得到数据(如丢包);在字段中使用 XOR 以满足可逆性;在过滤器之前前置一个 Bloom Filter,确保流入过滤器的数据严格不重……我们并不要求过滤器得到的结果严格正确,但一般只允许出现 negl 概率的假阳性(例如 Bloom ...
NJU 课程评价_目录
这是 I_Am_Danny 对 NJUCS 本科课程评价的导航页面。内容仅供参考,以实际为准。
评价者标签:保研;Rank Top 5%;有 OI 基础
编译原理
数字逻辑与计算机组成
密码学原理
网络攻防实战
形式语言与自动机
离散数学(强基版)
计算机系统基础
计算方法
操作系统(蒋炎岩)
信息论基础
图论与算法
计算机网络(国际化)
大学物理
计算机程序的解释器和虚拟机
最优化方法导论
Rust 程序设计语言
算法设计与分析
网络组实习感想(AI4Sys_端到端拥塞控制)
从 5 月份开始,大概花了四个月时间在淘天的网络组做端到端拥塞控制优化。说是做拥塞控制的优化,其实是训练一个模型动态选择合适的拥塞,本质上是一次 CCS 方向的科研。之前一直没怎么经历过完整的科研流程,这次经历算是弥补了此前缺少的毒打。
AI4System现在主流的 AI4System 无非两条路:
用 LLM 的生成能力做赛博劳工
训练一个感知机做浅层分类
前者在前两年还以代码生成为主,画了很多饼:基于 LLM 的测试框架生成、用 LLM 生成一堆领域内算法做排列组合……但现在都 2025 年了,大家对 LLM 能生成出来个啥多少都有点 B 数,故事就很难吹下去;现在反而更多是往 Agent 这个原本大伙都不太看好的、看似没啥技术含量的方向发展。记得在 2024 年上半年,大家都对 Agent 嗤之以鼻的时候,jyy 就在 OS 课上非常坚定地认为这是个合理的方向,在此给 jyy 的精确预判跪了。
后者就很有意思,在我看来多少有点 AI4Sci 那种蹭流量的意思在了。一方面,系统里确实存在大量的分类任务适合上 ML:这些任务现在的算法大多基于经验设计的规则系统,且存在多种帕累托最 ...
阿里实习总结
经历入职
淘天在 2025 年 4 月 2 日中午发了意向书,意向书的时效非常紧凑(4 月 5 日及之前需要确认)。当时 4 月 3 日米哈游才进行到 HR 面(面完之后还是非常有把握的),但考虑到:1. 短期实习选游戏公司颇有种把路走死的感觉、2. 听闻米哈游的暑期实习是做一个小项目,感觉提升有限、3. 还是想看看互联网大厂内部情况,于是踩着 DDL 签了淘天的意向书。签完之后还心情很轻松地去混了美团的一面(虽然基本不对口,秒挂);还收获了一封我拒米哈游的邮件。确认 offer 之后,就来到了入职阿里不得不品的起花名时间。在花名页面试了一下午都没找到很中意的名字,最后选了「风谨」这个山寨版风堇。
敲定的正式入职时间是 5 月 12 日,在五一之前爆肝 2 周,把 RustGit 和 MiniJava 解释器两个课程项目肝完了(MiniJava 解释器之后还布置了一个 OJ 和一个报告,不得已只能抽周末时间糊一下,并没有做到满分)。5 月 11 号下午想进园区看看,被保安通知不允许,必须等到入职之后才能进去。入职当天(唯一吃了早饭的一天)到 A5 访客中心九华山庄接受统一培训(其实就是 ...
课程评价_网络攻防实战
关于老师由学院技术专家陈健讲授。陈健老师是网络安全领域的资深专家,参与了校内邮箱等系统的搭建,也是校 CTF 队的负责人。但陈健老师讲课节奏较快,容易某一步 get lost 之后完全迷失。
前置知识基本 Linux 使用能力
课程内容每两周完成一个 Lab。一次 Lab 是对一个靶机的攻击,以得到靶机的 sudo 权限为目标。靶机以虚拟机镜像的形式下发,需要在自己电脑上的 VMWare 或 Oracle VirtualBox 中运行;实际操作环境在同机的 Kali Linux 虚拟机中。
陈健老师上课会带着同学们走完攻击的全流程(或者留一点作为作业),节奏较快。作业就是完整复现整个攻击流程并整理成实验报告提交。如果流程顺利,一次实验占用的课余时间不超过 3 小时;但保不准就会陷到一些坑里,直接消耗一整天无法自拔。
靶机基本都是公网上能找到的,实在没跟上可以自己去外网搜对应教程。
作业、考试与得分无考试,完成作业即可获得高分(90+)。有一些自己额外的尝试和思考可以加分。
其他如果同时满足:1. 对 Linux 一无所知 2. STFW 能力较弱,那么不推荐参加该课程:
该课程极度考 ...
课程评价_编译原理
关于老师秋季学期由 PL 组的冯洋老师讲授,上课风格很随和(甚至有些随意);讲课水平一般:自己确实是懂,并且很努力在讲明白,但确实是讲不太明白。
上课大概率听不懂,建议做作业/实验时对着春季学期的许畅老师正版 PPT 自学。
前置知识扎实的 C 语言基础
课程内容比较完备的编译器全流程结构,包括:
词法分析
语法分析(消除左递归、LL1、LR0、SLR、LALR、LR1)
语法制导的翻译
中间代码生成
运行时环境(栈管理、GC)
目标代码生成
机器无关的优化
其他(JIT、优先级上升算法)
基本涵盖了现代编译器架构的所有部分,算是国内覆盖面最广的编译原理课程。
作业、考试与得分平时作业主要是对概念的应用和具体算法的执行模拟,与考试题目高度相似,可以参考许畅老师往年的作业解析。
实验是该课程的重中之重,会要求从零开始完全手搓出一个 C 语言(子集)的编译器。据笔者所知,国内只有 PKU 的实验体量和完整度能和该实验相提并论。
实验分为五个部分:词法与语法分析、语法树生成、中间代码生成、目标代码生成、目标代码优化。每个部分耗时均在 15 小时左右(含架构设计与手册理解)。gi ...
课程评价_离散数学(强基版)
关于老师由仲盛老师讲授,讲课风格很有意思,会引导大家思考;私下空间和朋友圈经常转发一些趣图和吐槽。
前置知识无
课程内容目前(2025年)已经形成了完善的课程体系和讲义,主要覆盖:
群论(群、循环群、正规子群、商群、同态定理、p群、排列群)
数论(群论视角的数论、二次剩余及衍生)
图论(匹配、连通、可平面、染色、Ramsey理论)
该课程与大班差别很大(可以认为默认参与课程者能快速自学大班内容),具有一定广度和难度,但未达到数学系对应课程的难度。作为大一课程可以拓宽眼界、锻炼思维、培养数学功底;但功利上说,所学在之后的用处比较有限。
作业、考试与得分作业和考试难度都较高,难度从宝宝巴士到 IMO 普特南级别的都有。作业可以自选难度完成、所有作业题目都可以直接回答 I Give Up,完全不影响得分。
考试题目的难度会稍低一些,基本都有现场解决的可能。
最终得分不是作业、考试得分的直接折算;只要作业全交(哪怕全是 I Give Up)、考试到场,应该就可以及格;稍微用心一些就可以得到比较好的分数。
其他这门课可能是你接触过的、也可能是未来所有会接触的课程中难度最大的。不要被课程难度或 ...