Interesting numbers in CS and Femi estimation (WIP)

There are some important numbers in CS, and remembering the level of these numbers can provide a more in-depth understanding of the computing system.

人是万物的尺度。对这些数字最好有个概念,就知道能处理的问题的量级是多少了,在书写项目书,指定相关指标的时候就能比较合理的进行估计。有了这些估计,我们可以用费曼估计法去快速推算一些比较复杂的问题。然后还能更好地理解计算机设备直接的unbalance的特性。

很多时候我们仅仅需要的是快速的量级的估计而不是精确的数字,这些问题都属于Feimi 估计的思路,比如最经典的某个城市大概有多少钢琴调音师等等。

最近发现,项目书或者指标层面,对于数据的把握变得比较关键,写指标的时候通常想让这个指标可以量化,没有这些指标的概念,一些关键任务的项目书都没法去写了,从paper的角度上看,关键指标的提升更是paper的core contribution.

Computing

Memory access

CPU cache read/write access. 不同的CPU和不同的Cache当然速度不同,这里有一张表格 https://www.quora.com/How-fast-can-the-L1-cache-of-a-CPU-reach L1 大概是2000GB/s的样子。L3大概是 200GB/s的样子,L3相比较RAM大概又有100倍的差距了。

RAM (Random access memory) read/write speed. RAM using a little bit different metric, it is called MHZ rating (how many times per second your RAM can access its memory). nowadays, this value is usually from 2400Mhz to 4400Mhz, which is 10 times faster than SSD I/O speed. 就是说1s大概能access 2400M 到 4400M 次,每次修改1B的数据的话,就是2400MB-4400MB左右。

SSD 通常所说的固态硬盘,read/write speed 200MB/s to 550MB/s。

HDD (hard disk) 通常所说的细节硬盘 read/write speed, from 80MB/s to 160MB/s

If we assume one picture taken by phone is around 2MB, SSD can transfer at least 100 photos per second and HDD can only transfer 40 photos.

从所花费的instruction time来看,disk I/O takes 5-10 ms, which is millions of instruction time (1000,000) Flash storage takes 10-100us, NVM may take 1us, which is still around 2000-3000 instruction times. 通常的3GHz的CPU, 1s 可以执行 3*10^9 个指令,一个instruction time 大概是0.003us

Memory size

Networking

从所花费的指令时间来看,在datacenter中,round-trip message 可以话费10-50us, 相当于n0,000的指令时间。wide area round trip 时间可能更长,要花费到10-100ms的时间。
(A philosophy of software design)

并行计算

大模型训练通常是万卡的级别,一个node 4-8张GPU的话,就是1250到2500个节点的数据中心的规模。一个机柜上下两层 (比如就像通常的衣柜那么大)通常可以放128 node (比如Frontier),那这个数据空间所需要的地方至少是10-20个机柜所占用的空间。

并行可视化的服务比较大的规模(比如VTK-m论文中所描述的) 最大在37,000个AMD GPU上进行了验证(2023年),这可能是目前这个小领域最大的规模了。换成节点的话大概是9400多个节点,这就是目前的state of the art的级别。

超算相关的项目里面,E级的超算项目就是10^18次方,新闻里有时候介绍说,我们的峰值时候计算能力为是百亿亿次浮点运算,这就是说这个机器是E级超算的机器。

中文中所说的1亿就是10^8,如果10^9在中文里就是10亿,就是1后面跟着9个0。对应网格之类的数据规模的话就是1000^3的结构化网格或者点。

Image size and pixel

假如手机分辨率是2600*1200那整个屏幕的像素是3,120,000 312万像素,拍一个照片的话,通常一个像素点是RGBA 4通道,一个通道用8bit(1Byte),4个通道就是4B,整个照片就是 3120000*4/1024/1024=11.9MB 大概是12MB。128GB的内存的话,大概就是存10922张,就是万张照片的数量级别。

比如做feimi估算的话,不提供额外的信息,就问一个目前市面上常见的手机大概能存多少照片?

参考的答案可以如下,快速估算,用1000来近似1024的话,比如128GB的存储空间,一个照片假设是1000*1000的分辨率,也就是10^6 像素点,然后一个像素点用RGBA 4通道,一个通道8bit表示,就是1Byte,一个像素4通道就是4Byte,一个照片就是4*10^6Byte 大概4MB的样子,128*1000/4 = 32000 这就能很快得到量级,大概是万张的级别。

Render numbers

一般FPS在40-60,眼睛看上去才没有很明显的卡顿的感觉。按照这个数字的话,render出一个图片的时间大概是20-30ms左右的时间才能有所谓的实时性的感觉。

大模型的参数量和显存

Sugon的Z系列的DCU是16GB,4080是24GB。如果一个8Billion参数的基本的大模型,即8,000,000,000 数量级别的话就是8G左右,一个参数如果是16bit的浮点数的话就是2B,所以一个大模型占用的现存空间就至少是16GB,所以DCU基本上是无法部署像样的大模型的,除非用了一些模型压缩的算法。比如ollam中的8B参数的大模型实际占用的存储空间大概是4GB的样子。

推荐文章