NCCL+PyTorch源码阅读(三):集合通讯
前言:本文是对 知乎@张宇杭 系列文章的补充,只对核心逻辑进行拆解。阅读后可继续通过 知乎@张宇杭 的 NCCL 源码阅读补充更多知识。
TODO
NCCL+PyTorch源码阅读(二):NCCL通信协议
前言:本文是对 知乎@张宇杭 系列文章的补充,只对核心逻辑进行拆解。阅读后可继续通过 知乎@张宇杭 的 NCCL 源码阅读补充更多知识。
TODO
NCCL+PyTorch源码阅读(一):通信组的建立
前言:本文是对 知乎@张宇杭 系列文章的补充,只对核心逻辑进行拆解。阅读后可继续通过 知乎@张宇杭 的 NCCL 源码阅读补充更多知识。
另推荐 Demystifying NCCL,对 NCCL 的机制和设计层面进行了详细讲解。
在使用 PyTorch 作为深度学习框架时,如果涉及模型的切分,需要创建一个“通信组”(process_group)。后续的所有模型操作需要在通信组内进行同步操作。先用 CPU/Gloo 版 DDP 说明 process_group 的作用:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import torchimport torch.nn as nnfrom torch.utils.data import DataLoader, TensorDatasetfrom torch.utils.data.distributed import DistributedSamplerimport torch.distributed a ...
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 能力较弱,那么不推荐参加该课程:
该课程极度考 ...