目录
引入
一、计算机芯片
1、芯片的制造
2、复杂指令集&精简指令集
3、并行计算的GPU
二、协作计算
1、分布式技术“三论文”
2、不可兼得的CAP定理
3、故障类型
续下篇...
往期精彩:
早在2016年DeepMind就公布了AlphaGo的算法细节,但是时至今日并未看到第二个与AlphaGo旗鼓相当的围棋人工智能!因为“数据”、“算法”、“算力”三者都是AI不可或缺的!
电子计算机发展不到100年,随着集成工艺的提升,集成电路可安装更多的晶体管。19世纪Intel创始人戈登.摩尔提出的“摩尔定律”——当价格不变时,集成电路上可容纳的晶体管数目每隔18到24个月增加一倍,性能提升一倍,精准预测了芯片发展初期呈现的指数级增长规律!1958年第一代集成电路仅包含两个晶体管;1997年,奔腾Ⅱ处理器的晶体管数扩大到750万;而现今可以在一根头发丝大小的空间集成上万个晶体管——科技的加速回报法则:21世纪的进步可能是20世纪的1000倍。
20世纪80年代,计算机每秒执行100万次操作;如今计算机每秒可执行超10亿次操作;超级计算机甚至可轻松达到每秒操作亿亿次——用于专业工程问题,如天气预报、宇宙探索等!我国在设计天宫一号飞行器是就使用了自主研发的超级计算机“神威.太湖之光”,是世界上首台每秒运算超过10亿亿次的超级计算机,峰值运算性能达每秒12.54亿亿次。
芯片是计算机用于计算的核心组件,底层逻辑是逻辑运算,通过电路开关尽心一系列电路控制实现逻辑电路——涉及莱布尼兹二进制数理论、布尔的布尔代数、香农信息论。任何具有开和关两种状态的元器件经过组合后可以表达任意逻辑关系!
计算机最早使用继电器控制电路逻辑,后面发明了电子管,随后使用晶体管,如今可以将各种功能的电路集成在一块芯片上(集成电路)!
如今的工艺,集成电路的晶体管尺寸可达纳米级,可以让一个集成电路封装几十亿甚至上百亿个晶体管,实现复杂的电路逻辑。
制作时,首先把二氧化硅转化为高纯度多晶硅(纯度11个9,即99.999999999%,比纯金99.6%还纯),随后把这些多晶硅提炼成圆柱形的单晶硅,形成硅晶圆片(晶圆),之后在这些晶圆上制造各种元器件。那么如何操纵只有几纳米距离的元器件呢?
答:光刻技术,类似于照片的冲印技术,即光的投影。首先需要在硅片表面均匀涂好光刻胶,然后将覆盖在掩模版上的集成电路微型图形转印到光刻胶上。光刻技术用的光对波长有特定要求,光的波长越短,能控制得尺寸就越小,可以光刻得电路越复杂。
目前,业界使用最为主流得短波光是DUV(Deep Ultraviolet,深紫外光),波长只有193纳米,比可见光中紫光得波长得一半还要小 。
比DUV波长更短的是EUV(Extreme Ultraviolet,极紫外光),波长只有13.5纳米,直到2020年,世界只有荷兰ASML(阿斯麦)公司掌握了操控极紫外光的核心技术。——ASML公司设计了非常精细的工艺流程:使用DUV的光脉冲,先后两次照射到真空中的液态金属锡上,第一次先将液态锡击碎,第二次从中激发出EUV。
当然,激发出光源只是生产出光刻机的第一步,实际制造时还需要完整的解决方案,包括如何产生稳定的光源、能耗要求、质量控制,甚至对环境也有很高的要求。当然,EUV光刻机并不是靠ASML一家公司就可生产,如今技术已经变得非常复杂,很多技术很难由一家公司完全掌握,零部件供应如美国的光源Cymer、德国的镜片蔡司、丹麦的机械手ABB等。
目前,EUV光刻机是全世界最顶尖技术的大集成,可以说代表了人类技术的最高水平!
在图灵机模型指导下,当今计算机有三大核心部件——CPU(中央处理器)、内存和硬盘!CPU负责调度和运算;内存负责暂存运算数据;硬盘负责永久存储数据。
CPU使用的指令集架构通常分两种——复杂指令集(CISC)和精简指令集(RISC)。
①复杂指令集(CISC),尝试用尽量少的机器语言指令来完成复杂的计算任务,其典型架构是Intel、AMD公司推出的x86架构,日常使用的笔记本电脑、台式机都用的是CISC处理器。虽然CISC有大量的指令集和复杂的寻址方式,但只有20%的指令经常被用到,且这让CPU的设计变得复杂。于是RISC被提出。
②精简指令集(RISC),RISC的指令集合更小,执行速度更快,常用于手机、嵌入式系统、小型机服务器。假设现在要让机器人行走,在RISC处理器中只有一条“行走”指令,而对于CISC处理器,会需要“抬左脚”、“迈左脚”、“抬右脚”、“迈右脚”等一系列指令。
普通家用电脑和服务器很难直接用于深度学习和模型训练,因为计算数据量巨大,且对并行计算要求很高。所以要开发深度学习算法,一定需要能够进行并行计算的硬件技术,如搭载GPU(图形处理器)——GPU是随着游戏、3D设计等应用对图像渲染的要求而发展起来的。
GPU原本是用于优化图像的专用处理芯片,可把它看作擅长图像处理的CPU,图像处理需要计算各像素点的位置和颜色,实现图像渲染——数学上表现为对多维向量和矩阵的运算。
对比:CPU和GPU都有控制、缓存和运算单元,但是占比不同。CPU擅长处理指令控制和复杂调度,能进行通用计算,综合能力强;GPU的芯片中缓存部分占比小,但计算部分占比很大,更擅长执行简单但要大量重复的计算任务——如浮点数计算、深度学习大型矩阵运算、神经网络模型训练或其他需要并行计算的场景。在相同的计算精度下,GPU相比CPU,处理速度更快、服务器投入更少、能耗更低。
计算机属于一个物理装置,突破不了自身物理极限(能力有限),很多大型复杂任务需要进行拆解分摊到多台计算机上进行并行计算,然后再合并结果——分布式计算思想。
分布式技术——把数据分散到不同的服务器上进行处理的技术,它的发展很多归功于谷歌三论文:2003年的GFS(一种分布式文件存储系统)、2004年的MapReduce(一种分布式数据计算技术)、2006年的BigTable(一种分布式数据存储技术)。如今虽然此些技术已经更新换代,但是它们的作用毋庸置疑。
①存储海量文件数据。GFS的核心思想是实现存储介质和数据的冗余,比如将一份数据分割成很多块存储在多台服务器上,而且存多个副本(这样任何一台服务器故障都不会导致数据丢失),同时解决了传统文件系统无法存储超过硬盘容量的问题。
②海量数据的计算。以电商处理交易为例,采用分治的方法,即把用户和系统都分成多份,每个子系统为不同用户服务,这样有多少个子系统,总的计算能力就可以扩展多少倍。
分布式计算实现的关键在于如何将计算任务分解,再合并得到结果——先映射(Map),再归集(Reduce)的过程,即MapReduce。比如当搜索网站要定位某个网页时,它把网页之间的关系转换为数学上的矩阵运算,但网页数量巨大(总矩阵巨大),此时MapReduce把大矩阵拆分成若干足够小的矩阵,计算这些小矩阵得到最终结果。
③存储大表数据。BigTable是处理很大的表的技术,大表是一张逻辑上的表,表里的数据会分别存储在不同服务器。BigTable基本思想是把所有数据都存入这张虚拟表,表很宽且支持根据需要增减字段——数据模型虽然定义为结构化数据,但不像传统数据库表有着各种约束。BigTable必须将数据存储在分布式文件系统上,因此具有很好的扩展性,可支持海量数据的存储和查询。
谷歌三论文并未公布具体细节,后来美国人卡廷发起开源项目Hadoop(实现大规模的分布式计算系统),允许任何人下载安装,流行了起来!
分布式系统是一种在物理上分散、逻辑上集中的系统,它将分散在计算机网络中的多个节点连接起来,共同对外提供服务。分散就意味着必然要考虑任一处单点故障情况,一般一份数据存在多个副本,所有节点可做到在线扩缩容,以匹配业务负载——即使部分节点故障,也必须确保整个系统的高可用,保证对外服务。
设计和实现分布式系统需要遵守的理论基础——CAP定理,也称布鲁尔定理:在一个分布式系统中,不能同时兼顾一致性(Consistency)、可用性(Availability)、分区容错性(partition tolerance),最多只可实现两个。
可用性是一项重要指标,只要系统对外服务必须考虑到。对于传统的单节点系统,一致性需要重视;但是对于分布式系统应更重分区容错性,并根据实际情况适当放弃一致性——例如在一定约束下,允许系统在一段时间(而不是立刻)达到一致状态,目前大部分互联网应用都是这种实现方式。
拓:要做到一致性,意味着系统不能发生任何故障,所有节点之间通信无延时,但是越强的一致性往往造成越弱的处理能力和越差的可扩展性。通信无延时往往需要绝对准确的计时设备,如原子震荡时钟,谷歌在其分布式数据库中采用基于原子时钟和GPS的时间同步方案,实现将不同数据中心的时间偏差控制在10ms以内,该方法简单直接但是成本巨大。
故障是不可避免的,人们设计了各种冗余和备份的信息系统架构,来保证单点故障不会影响整体的运行情况!
①软硬件故障。包括网络通信故障、服务区宕机等,对此解决方案已较为成熟——启用备份,隔离故障,如网络通信A->B不行,就断开A->B,启用A->C->B绕行;如果服务器节点A故障,就启用服务器节点B,接管A的对外服务。
分布式系统如何发现有节点发生故障?通过对各个服务器节点进行网络或磁盘间的通信检测(心跳检测),再利用投票机制来保证容错,这种容错方法性能较好,可容忍不超过一半的故障节点。
分布式系统中有个重要机制,即节点间要能达到共识——节点就某个提案达成一致意见,如果每个节点都可保证”理想“性能(瞬间响应、超高吞吐)无故障运行,节点之间通信瞬时送达,那么各节点的投票和应答都可在瞬间完成。但是不幸的是共识被证明是无解的——”FLP不可能原理“。
②节点伪造等逻辑故障。除了软硬件故障,还有一种逻辑故障,比如有节点伪造信息恶意响应——”拜占庭错误”。
分布式系统是一个去中心化网络,它不需要一个中心节点作为大脑来控制整个系统运行,为保证这一点就必须考虑一致性机制(该系统必须允许少量节点是不可信的,但仍要保证整体基本”共识“),拜占庭算法讨论的就是最坏情况下的保障机制——如何在存在叛徒的情况下保证同时进攻,引申到计算领域发展成容错理论,首个共识算法的实现方案随着比特币的出现得到应用。
容忍拜占庭错误的算法:①以PBFT(Practical Byzantine Fault Tolerance)为代表的确定性算法;②以PoW(Proof of Work)为代表的概率算法。①一旦达成对某个结果的共识就不可逆转,即共识是最终结果;②给出的共识结果是临时的,随着时间的推移或者某些条件的强化,共识结果被推翻的概率越来越小,最终成为事实上的结果。
【AI底层逻辑】——篇章5(下):机器学习算法之聚类&降维&时间序列
【AI底层逻辑】——篇章3(下):信息交换&信息加密解密&信息中的噪声
【AI底层逻辑】——篇章3(上):数据、信息与知识&香农信息论&信息熵
【机器学习】——续上:卷积神经网络(CNN)与参数训练
【AI底层逻辑】——篇章1&2:统计学与概率论&数据“陷阱”
【AI底层逻辑】——篇章5(上):机器学习算法之回归&分类