Archive

‘学习笔记’ 分类存档

论文总结:Alibaba HPN: A Data Center Network for Large Language Model Training

之前看完论文就完事了,过了一段时间后,很多细节就会忘记,需要重新看一遍……之前的兄弟习惯很好,看完会总结,忘记就看总结。所以趁着最近阿里发布的最新论文,我也总结下,为了以后复习用。

这篇论文写的很好,讲了很多阿里HPN的基础设施及架构细节,虽然不是全部,但也包含了大部分的内容,很难得。去堆叠部分我没写进去,这个在国内互联网已经很熟了,但目前看国外的互联网以及OCP上,还在讨论如何简化堆叠的双上联问题。论文也提到微软在2023年通过SmartNIC(w/ FPGA)来实现双活。

论文原文:

拓扑

DCN+拓扑

按照论文的说法,HPN是针对之前阿里DCN+架构进行优化演进而来的,DCN+是传统的3层CLOS架构(根据去年阿里发布灵骏的相关文章,架构应该不是这样的,应该更偏向HPN,架构从实践中演进~ ?):

完整阅读

使用ChatGPT协助写测试脚本?!

背景

之前一直看到有人谈论用Chatgpt编程序,设计产品,做游戏,反正很神就是了。在我使用过程中,并没有感觉那么神,也许是提示字给的不标准吧。最近正好有个机会,需要搞一个All2all的测试脚本,可自动化提供大规模All2All的测试任务。因此就测试了下GPT的能力。

目前用的是最新版本GPT4o(自行花了20美金),整体使用下来,GPT确实可以协助编程,只是沟通起来比较费劲和费时间……如果真正要搞一个项目,就不太现实了。估计还要再迭代几轮吧。即使是最牛的GPT4o,在沟通交互中,仍然会有以下问题:

  • 强调过的内容,可能要重复说3-4遍,GPT才真的听进去了,但过了几轮后可能就又忘记了,比如”不着急出优化代码,先讨论问题“;
  • 为了提升效率,对于一些小优化,其实可以提供代码片段,但GPT有时候提供的片段跟代码本身没有强联系;
  • 为了排障,在脚本中增加了一些提示信息(增加执行log)。后面随着不断迭代优化,就会发现有些功能消失了。这种现象很明显,很可能会遇到之前解决过的问题再次出现……
完整阅读

SONiC 开发相关问题汇总

Check attribute is standard or Customize ?

问题是这样的,我们需要确认一个ECMP的attribute是否是标准的Sonic Sai。具体步骤如下:

root@Franks-MacBook-Pro Documents # git clone -b v1.11 https://github.com/opencomputeproject/SAI
root@Franks-MacBook-Pro Documents # cd SAI
root@Franks-MacBook-Pro SAI # cd inc 
root@Franks-MacBook-Pro inc # grep -rn 'SAI_SWITCH_ATTR_ECMP'
./saiswitch.h:185: * @brief Attribute data for #SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM
./saiswitch.h:697:    SAI_SWITCH_ATTR_ECMP_MEMBERS,
./saiswitch.h:1226:    SAI_SWITCH_ATTR_ECMP_HASH,
./saiswitch.h:1433:    SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_ALGORITHM,
./saiswitch.h:1442:    SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_SEED,
./saiswitch.h:1454:    SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET,
./saiswitch.h:1468:    SAI_SWITCH_ATTR_ECMP_DEFAULT_SYMMETRIC_HASH,
./saiswitch.h:1479:    SAI_SWITCH_ATTR_ECMP_HASH_IPV4,
./saiswitch.h:1490:    SAI_SWITCH_ATTR_ECMP_HASH_IPV4_IN_IPV4,
./saiswitch.h:1501:    SAI_SWITCH_ATTR_ECMP_HASH_IPV6,
./saiswitch.h:2771:     * @brief Number of ECMP Members configured. SAI_SWITCH_ATTR_ECMP_MEMBER_COUNT takes precedence over SAI_KEY_NUM_ECMP_GROUPS string. Default value is same as SAI_SWITCH_ATTR_ECMP_MEMBERS.
./saiswitch.h:2777:    SAI_SWITCH_ATTR_ECMP_MEMBER_COUNT,

How to check SAI Attribute meaning

可以通过这个link进行社区SAI Attributes的检索以及确认其含义:https://sonic.software/sai/globals_s.html

How to check SAI Attribute

梳理过SAI Attribute:社区+自定义

如果梳理过自己需要的SAI Attribute,这里包含自定义和社区SAI。对于社区部分的SAI,按社区开发就好。对于自定义的部分,需要梳理需求文档,让厂商根据需求文档进行开发。

没有梳理过SAI Attribute

此时两个步骤,其一是使用sairec文件来确认使用的sai attributes,但这里有局限性,最好从现网使用的设备上获取sairec文件,这样被调用的attributes都会被记录在sairec文件中(如果某些特性在这台设备上没有启用,那么sairec文件中也是没有记录的),可以直接从下面路径中获取:

root@sonic:/var/log/swss# ls
sairedis.rec        sairedis.rec.2.gz  sairedis.rec.5.gz  sairedis.rec.8.gz
sairedis.rec.1      sairedis.rec.3.gz  sairedis.rec.6.gz  sairedis.rec.9.gz
sairedis.rec.10.gz  sairedis.rec.4.gz  sairedis.rec.7.gz  swss.rec

其次,可以从下面目录中找到对应的sai头文件,然后与社区的头文件进行对比,可以统计出哪些是自定义sai:

xxxx@Franks-MacBook-Pro SAI % ls -l
total 248
-rw-r--r--   1 root  staff  106691  2 28  2024 Doxyfile
-rw-r--r--   1 root  staff    2700  2 28  2024 LICENSE.txt
-rw-r--r--   1 root  staff    1785  2 28  2024 Makefile
-rw-r--r--   1 root  staff     463  2 28  2024 README.md
-rw-r--r--   1 root  staff     731  2 28  2024 azure-pipelines.yml
drwxr-xr-x   9 root  staff     288  2 28  2024 bm
drwxr-xr-x   3 root  staff      96  2 28  2024 data
drwxr-xr-x  14 root  staff     448  2 28  2024 debian
drwxr-xr-x  80 root  staff    2560  2 28  2024 doc
drwxr-xr-x   6 root  staff     192  2 28  2024 experimental
drwxr-xr-x   3 root  staff      96  2 28  2024 flexsai
drwxr-xr-x  54 root  staff    1728  2 28  2024 inc
drwxr-xr-x  35 root  staff    1120  2 28  2024 meta
drwxr-xr-x  41 root  staff    1312  2 28  2024 ptf
drwxr-xr-x  10 root  staff     320  2 28  2024 test

Building Sonic -VS

之前一直想自行编译下Sonic,但总是没时间。这次正好赶上准备Sonic培训,所以就尝试了下,虽然官方文档介绍的很简单,但编译过一遍才发现,还是有些麻烦的。本篇总结会从干净的Ubuntu系统入手,从头搭建编译环境,以及通过PNET加载编译好的Sonic-VS;下面是官方编译Guide:https://github.com/sonic-net/sonic-buildimage

文档内标注了不同版本的编译情况,这个可以点进去看编译状态,看时间应该是一直在更新以验证社区代码是Ok的:

完整阅读

部署透明代理服务器

最近需要手动Building一个vSonic,但默认环境无法访问外网,很多依赖关系无法解决,所以打算安装一个透明代理,让Building时走代理服务器。其实很早之前我就想在家里安装一个linux,用它来实现代理功能,这样干净好用。想法很简单,实现起来发现涉及很多问题,最终还是通过OpenWRT来实现这个需求。这里梳理下涉及的几种方法:

  1. 直接在Building Server上安装代理服务器,然后让流量走代理,具体可以参考这篇文章。这种方法如果只是实现HTTP,HTTPS代理,那没什么问题,但如果需要考虑APT,Docker,Docker Building等相关程序,那就需要在每个程序中单独指定代理,不同程序方法也不一样,不推荐。下面是参考文章中的几个关键步骤:
    • 在ubuntu上安装了xxx Client,去连接外网的kvm,此时是Socket5的代理;
    • HTTP无法使用Socket5的代理,因此通过Privoxy把Socket5转成HTTP的代理;
    • 最后把HTTP和HTTPS代理设置成Privoxy的端口;
  2. 同上面类似,但需要通过IPtables指向Privoxy的代理端口,这里有很多需要注意的地方,方法同第3种;
  3. 如果好几台Server都需要访问外网,那么都需要配置IPtables,这样会非常麻烦,可以把IPtables的配置挪到一台单独的代理服务器上,类似于家用的旁路由场景(后面单独一个章节介绍这种方法,虽然没成功,有时间了可以继续研究);
  4. 最后一种最简单,直接使用OpenWRT来完成繁琐的IPtables操作,由于OpenWRT已经非常成熟,很多配置都会默认自动加载,通过这个来完成此需求(后面单独一个章节介绍这种方法,成功);
完整阅读
blonde teen swallows load.xxx videos