过去一周,中兴被制裁的新闻持续发酵。各种意见层出不穷。有人盘点中国芯片多么多么落后;有人抱怨过去二三十年对芯片投入不足的;有人号召必须不惜一切代价做芯片的;还有人说不惜一切代价做所有类别芯片来防禁运,就是落入了另外一个“星球大战”的陷阱,会拖死中国;然后就有人反驳说我们至少要掌握几个类别的关键芯片,在美国禁运我们的时候,我们也好禁运他们,这样才能实现“核平衡”……
连马云马爸爸也出来说,现在100%的芯片都被美国人控制,所以阿里巴巴要收购中天微,做普惠大众的芯片云云。
中兴事件让大家都关注到了集成电路,这是好事。但也把互联网圈盛行的炒作和浮夸之风带入了芯片领域。IC从业人员都很明白,“100%的芯片都被美国人控制”绝对不是事实,而中国人的确垄断了一类关键的芯片,是美国人、欧洲人、日本人、韩国人……,都望尘莫及的。
这就是ASIC矿机。比特大陆、阿瓦隆、翼比特、芯动科技……所有重量级的矿机企业都在中国。
“蓦然回首,那人却在,灯火阑珊处”,这个时刻,大家才想到,原来我们还有这么强大的一支芯片力量。于是在4月24日,证监会副主席姜洋,考察访问了阿瓦隆,说“希望你们在国内上市”。
中国人在ASIC矿机领域的巨大成功,起码说明了一点:中华民族并不笨更也不劣等,在面对一个全新领域,全球都缺乏积累的时候,中国人靠着自己的聪明和勤奋,一定能占据先机。只不过,大多数芯片的品类不是全新,并不满足“全球都缺乏积累”这个条件,所以我们还需要耐心积累、追赶。
但讽刺的是,连证监会都对矿机企业伸出橄榄枝的时候,数字货币社区却对矿机提出种种质疑,难道矿机真的有原罪吗?
矿机的原罪?
矿机是在浪费电力吗?
关于这个问题,凡是学习过长铗的“不可能三角”理论和张首晟教授的“负熵注入”理论的人,都明白电力的消耗是不可避免的。
长铗说:“设计一个既环保又安全的密码学货币,它必然是中心化的,比如PPcoin、Nextcoin、Ripple,它们要么本身就是中心化的架构,要么其去中心化的架构不可维持,它们本质上仍是PayPal、网银一样的中心化验证机制;设计一个既环保又去中心化的密码学货币,它必然是不安全的,比如IP投票制的P2P货币,中本聪起初就已排除了这种可能,他认为“如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,比如僵尸网络,就有可能主宰比特币网络”。设计一个安全的去中心化货币,它必然是以付出能源与计算力为代价。工作量证明是以去中心化形式构建安全产权认证系统的第一个解决方案,也可能是唯一解决方案。”
选择PoW的币,相信真金白银的投入;选择PoS的币,相信持有币的人。
张首晟说:“达到这个共识是非常难的,因为熵总是在增的,今天你要把它减是很难的事情。在区块链上能达到一个共识系统都是用一种算法,在这上面是需要消耗能量。大家可能一开始不太理解为什么这件事情听起来不合理,一些账户为什么要耗费能量。从物理学第二定理来讲,这是非常合理的一件事情,因为达到共识本身是熵减,但整个世界的熵一定要增加,所以在达到共识的同时一定要把另外一些熵排除出去。这种没有中心化的机制跟自然世界里面磁铁从杂乱无章的状态达到有序的铁磁状态非常相像,这付出的代价也是必然的趋势。”
选择PoW的币,是一个开放系统,熵靠外部能量来降低;PoS的币,则是封闭系统,只会熵增。
贿选、拉票,EOS最近的乱象,在真正数字货币的信徒看来,是非常令人失望的,说好的trustless(相信机制和数学原理,而非相信特定的人)呢?说好的code is law(严格按照代码进行治理,而非人治)呢?但谁在乎呢?大家只看到币价涨了嘛。
Anyway,如果某个社区愿意相信“人治”愿意接受“弱安全”,那是他们的信仰,只有时间可以说服他们。相信trustless、code is law的人们依然是主流,为了它们,PoW需要继续进化。
矿机影响去中心化了吗?
这个问题可以进一步划分为两个子问题:
是不是只有矿场能挖币?
是不是只有矿机能挖币?
由于规模效应,集中式的矿场,比分布式的个人矿工,必然管理成本更低,电力成本也往往更低,所以矿场是必然会产生的。但即使这样,个人矿工并未消失,各大矿机厂进行销售时,总有大量的个人矿工前去抢购。再加上矿场本身就分布极广,所以去中心化的程度还是很高的。
但截止到目前,矿机的能效和成本,总是比通用设备(CPU、GPU、FPGA)好很多,因此所有的PoW币,只要币价足够高,就会有人做出矿机来。有的社区(例如Monero)坚信通用设备挖矿的去中心化程度更高,为此不惜赋予创始人每半年修改一次算法的独裁权力,在开发模式上,牺牲了去中心化,这不能不说是一种遗憾。
矿机浪费资源了吗?
不可否认,的确是的。如果你关注过矿机导致MLCC缺货,导致DRAM涨价,导致台积电产能满载的新闻,你就会感慨,如果这些资源转而投入到通用设备上,可以造出多少有实际应用价值(而不仅仅是为数字货币注入负熵)的产品啊。
矿机的一小步
非常佩服比原链团队的技术嗅觉,在关于AI芯片的各种炒作尚未开始的时候,就抓住了在高性能计算领域这次微妙的范式转变。AI芯片依然是相对通用的,可以支持各种神经网络,但它所依赖的底层计算,又是专用的,非常集中地依赖于矩阵乘这一种计算。这是第一次,在一种通用的计算器件中,将大多数资源给予了单一的特定计算。
于是,让通用设备成为矿机,终于有了可行性。
当然,通用设备成为矿机,并不是说矿机只能是通用设备,也不意味着矿场会消失。目前的AI芯片都是SoC,除了做矩阵乘法之外,很多面积还要用来实现其它功能,因此在成本上必然比不上专用的矿机。而矿场的规模效益决定了它总是有优势的。
但AI芯片做矿机,起码在能耗上,拥有了和矿机平起平坐的机会。AI芯片对能耗的重视程度,绝不亚于矿机,学术界工业界都在殚精竭虑地降低每个operation所消耗的能量。而矿机可以使用的所有低功耗优化手段,AI芯片都可以使用。
其次,从成本上讲,AI芯片原本有它“正常”的用途,这个用途是可以覆盖它的硅片成本的,换言之,“挖矿”这一用途,相当于额外赠送的,或者说是零成本。
再次,AI芯片往往也是统一部署,统一管理的,例如云计算中心,例如监控摄像头,它的规模效应未必比矿场差太多。
综上,我们有理由相信,AI设备作为矿机,虽然无法消灭专用矿机,但必然会在总算力中占有相当大的比例。这是数字货币的PoW算法自诞生以来的最重要的一次进化:它减少了资源浪费,提升了去中心化的水平。
内行看门道
Tensority的细节和理论证明已经公开,团队的严谨有目共睹。作为一个IC老兵,笔者还看到了不少不那么理论、甚至可以说是非常实用主义的考虑,分享给大家:
一、选择何种算法作为AI挖矿的核心算法?
必须要选择所有主流AI加速设备都能支持的算法。虽然现在卷积神经网络(CNN)非常的火爆和引人注目,但它仅仅是神经网络中的一种。例如处理语音的LSTM网络,就不需要任何卷积计算。在TPUv1的论文《In-Datacenter Performance Analysis of a Tensor Processing Unit》中,谷歌介绍说在TPUv1的work load中,CNN只占5%,而基于矩阵乘的LSTM、MLP网络占到了90%。[1]
此外即使是CNN,在实现过程中,往往也是通过im2col的过程,转化为矩阵乘的计算来进行。[2]
因此矩阵乘作为AI挖矿的核心算法的普适性很好。
二、选择何种数据类型作为矩阵中的元素?
必须要选择所有主流AI加速设备都能支持的数据类型。目前看来,只有8位整点数(int8)可以满足这一要求。无论TPU、GPU、FPGA、CPU、DSP、ASIC专用加速核,统统都支持:
https://arxiv.org/abs/1704.04760
https://devblogs.nvidia.com/parallelforall/mixed-precision-programming-cuda-8/
https://china.xilinx.com/support/documentation/white_papers/c_wp486-deep-learning-int8.pdf
https://community.arm.com/tools/b/blog/posts/exploring-the-arm-dot-product-instructions
另外从发展趋势上看,未来云端神经网络推理的主力数据类型是FP16和INT8,终端推理的主力数据类型是INT8、Tenary(2 bits)和Binary(1 bit),二者的交集只有INT8。在可以预见的未来几年,Tenary和Binary还主要用在超低功耗、不插电的设备上。
如果要让各种插电的AI设备——数据中心的GPU、FPGA,智能摄像头、智能音箱,正在充电的手机——统统都能参与比原链的挖矿的话,唯一可选的数据类型就是int8。
三、填充伪随机的数据集的方法如何选择?
在比原链的PoW中,伪随机的数据集就是伪随机的以int8为元素的矩阵。为了适应各种AI设备,不能假定设备拥有通用的、大规避并行计算的计算能力(像GPU、FPGA那样)。但如今几乎任何智能设备,都会有一个ARM核,或者计算能力同ARM类似的ARC、Andes那样的嵌入式CPU核,可以把生成伪随机的数据集的任务放在这些嵌入式CPU上。
ETH和ZCash都需要生成大量随机的数据集,它们分别使用Keccak和Blake2算法。这两种算法都是针对64位CPU设计的,在32位CPU上跑起来会很慢。现在的智能设备很少有需要超过4GB内存的,因此很多还在使用32位的CPU,例如Cortex-A7、Cortex-A5这样的。而LTC所使用的Scrypt算法,算法复杂度低,针对32位CPU设计,而且经过了多年的考验(比ETH和ZCash都要久),选择它来作为伪随机的数据集的生成算法更加合理。
四、处理结果数据的哈希算法如何选择
从安全性角度出发,直接选择sha2、sha3这类高安全性的算法肯定比较好,但它们的运算复杂度也更高。为了不给嵌入式设备中较弱的CPU增加太多的负担,Tensority选择了先用FNV算法做两两合并,把数据量减下来之后,再用sha3算法进行最终的哈希运算,得到256bit的数据来计算前导零。这样就兼顾了效率和安全性。
五、如何平衡挖矿的效率和验证的效率
为了主要依赖于AI加速核来实现挖矿,而不是CPU,应该在矩阵乘进行很多轮之后,才需要CPU来进行哈希。
但是验证Golden Nonce的任务,只能在CPU上运行,不能假定运行比原链钱包的设备拥有很强的AI加速功能。因此矩阵乘的轮次不能太多,否则会减慢区块的广播。
Tensority最终选择256轮矩阵乘,并且开发了使用了CPU上的SIMD指令的Nonce验证代码。如果使用4个CPU核心做并行计算,主流的CPU上验证Golden Nonce的时间,仅为100多个毫秒。
芯片的一大步
比原链团队已经喊出了“one camera one vote”的口号,号召海量的监控摄像头都来做比原矿机。的确,从数字货币角度讲,监控摄像头24小时开机并且连网、数量上需求巨大、地域上分布广阔、供货商众多,非常符合去中心化的要求。从摄像头的工作性质来看,它大部分时间是空闲的,因为没有值得被识别的对象在画面中出现。在空闲的时刻挖矿,在经济上是合算的。
这些都是显而易见的事实,我希望在此强调的则是一个未必明显的事实:中国芯片事业的发展,将同比原链的发展,形成深刻的互动。
在Tensority算法被公布之后,矿机尚未发布的时候,笔者的朋友圈里大家关注的最多的是:高通的NPE(Neural Processing Engine)能不能挖?麒麟970里的NPU能不能挖?联发科Helio P60里的APU能不能挖?从原理上讲,当然都是可以挖的,只不过需要耐心等一段时间,等这些手机平台上的挖矿软件被开发出来。手机对功耗非常看重,手机上的AI核必然是能效比极高的,在手机充电时挖币,在经济上是合算的。这样一来,众多的手机用户都可以轻易地拥有比原币,哪怕他只是偶尔试试,拿到了一点点比原币。
这些比原币,对很多小白用户而言,将是他们人生所拥有的第一笔数字货币,是启蒙币。他们既然拥有了一点点比原币,就会尝试去安装钱包,去交易这些币,这对于促进数字货币的普及,是非常大的帮助。对于比原币自身生态的发展,也是大好事。
从另一个角度讲,Tensority算法也会改变AI芯片的生态。
首先,挖矿应用把功耗对于AI芯片的重要性放大了。原本低功耗只能在AI芯片进行识别任务的时间内省一些电,现在,对于闲时能挖多少币也至关重要了,或者说在AI芯片的整个生命周期中,低功耗都非常重要。要知道国内的重量级矿机厂商如比特大陆、阿瓦隆都已进入AI芯片市场,比起Nvidia这样的国际大厂,它们掌控生态的能力有限,但低功耗方面却有杠杠的硬功夫。Tensority为这些中国的AI芯,扩大了优势。
其次,挖矿降低了AI芯片的设计风险和回本周期。AI芯片都是复杂的SoC,如果某个部件有bug,或者整体的spec不太合适,可能销路就会出问题,但这样的芯片,仍然可以使用它的核心功能来挖矿,当矿机来用从而回收一部分成本。芯片处于产业链上游,你必须等待你客户,甚至客户的客户成功之后,自己才有可能成功。挖矿应用对赚钱的加速效应可以帮助你的客户尽快成功。
最后,起码在当下这个时间段,挖矿促进了AI芯片的普及。原本有很多人对手机的AI功能不是很感冒,觉得除了智能美颜之外也没啥刚需。但挖矿这个应用,让大家对于高通NPE、麒麟NPU和联发科APU的关注度一下子提升了。选购手机时,AI的算力也将成为一个重要的指标。
或许,当若干年后我们回顾2018年这个属于芯片的四月时,会感概原来矿机进化的这一小步,却成为了中国AI芯片大步迈进领先世界的最强催化剂。
加油!中国芯。加油!Bytom。
网友评论