电子论坛

硬件工程化 华为是怎样设计硬件的 之二十七——可靠性设计

小编 2024-11-25 电子论坛 23 0

华为是怎样设计硬件的 之二十七——可靠性设计

产品可靠性是设计出来的

生产出来的,管理出来的

-钱学森

一、电路是设计出来的。不要做个画图,要做个设计师。

一个电解电容紧挨着散热片焊接的,与电解电容相关联的那部分电路参数容易漂,现象和结果就是机器参数不稳; 绿色发光二极管的色调不一致,外观看起来不美观,发光管都有个波长的要求,即使都是绿光,波长的细微差别也会导致色差,而设计文件上并没对发光管的波长做出规定; 某块电路工作不好,发现将PCB板信号线的一个电感换成磁珠就好了,于是就改了BOM单,电路板上趴着个磁珠大肆生产了。常规理解看来,磁珠似乎和电感的特性是相同的,但事实上磁珠表现的是一个随频率变化的电阻特性,是消耗性的,而电感是储能特性,是储存性的削峰填谷。即使从实际结果来看,似乎更换器件后没问题,但其实并没有搞通真正的器件机理。病虽然莫名其妙的好了,但病毒的隐患仍在。

还有很多类似的问题,比如散热,似乎热设计只和机箱内温度有关,却忽视了一个致命的问题,温度系数,即使温度不够高到烫手的地步,温度的升高是否会导致温漂,温漂后的参数值是否会将器件的特征参数推到电路正常工作的边缘?

比如降额,几乎所有工程师都说“我们降额了,基本降了50%,余量是足够的,这个问题肯定没有”。那么降额时,所有该降额的参数都降到了安全范围吗?同一类功能的器件,换了不同封装形式或生产工艺的时候,一样的降额系数能降出一样的效果来吗?在特定位置、特定电路下的器件,明确哪个特定参数该降的更大一点吗?

还有电磁兼容、振动、可维修性、测试等等多方面的问题,知己知彼,百战不殆,在实际的考察中,发现既不知己、也不知彼的设计太多,不知己是不知道自己不知道什么,不知彼是不知道设计所面对的对象的诸多参数、条件、工艺、特性,而恰恰是由此引出了太多的技术问题。

二、电子可靠性设计原则

电子可靠性的设计原则包括:RAMS定义与评价指标、电子设备可靠性模型、系统失效率的影响要素、电子产品可靠性指标、工作环境条件的确定、系统设计与微观设计、过程审查与测试、设计规范与技术标准。

钱学森的水平和优势是什么?电子、机械、软件、测试、管理?

都不是,是系统方法论和工程计算。

当我们要决策一个电路的器件选型的时候,如果有一个基本公式,直接告诉了我们应该重视哪个指标,器件选型和电路设计就遵循规范,自然可以提升我们的可靠性设计了。

例如一个插座电缆,上面要通过10A的电流,是用2根8A的导线并联分流好呢?还是用一根14A的电缆好呢?通过可靠性模型可以轻松得到答案。

驱动一个发光管,是用三极管好呢,还是用运放好呢?

电子产品的可靠性设计需要注意以下基本准确:

1、产品结构和电路应尽量简便。

2、尽量选用成熟的结构和典型的电路。

3、结构要简单化、积木化、插件化。

4、如采用新电路,应注意标准化。

5、采用新技术要充分注意继承性。

6、尽量采用数字电路。

7、尽量采用集成电路。

8、逻辑电路要进行简化设计。

9、对性能指标、可靠性指标要综合考虑。

10、应尽量采用传统工艺和习惯的操作方法。

11、应不断采用新的可靠性设计技术。

12、在电子产品中,常采用的可靠性设计技术包括元器件的降额设计、冗余化设计、热设计、电磁兼容设计、维修性设计、漂移设计、容错设计与故障弱化设计等,有些还包括软件的可靠性设计。

三、提高电路可靠性设计方法

电路可靠性设计方法包括降额设计(降额参数和降额因子)、热设计(热设计计算、热设计测试、热器件选型)、电路安全性设计规范、EMC设计、PCB设计(布局布线、接地、阻抗匹配、加工工艺)、可用性设计(可用性要素、用户操作分析、设计准则)、可维修性设计(可维修性等级、评估内容、设计方法)

电路可靠性设计规范的一个核心思想是监控过程,而不是监控结果。

比如热设计,按照热功率密度、热流密度的计算确定下来的散热方法,您就不必担心散热不够了;按照热阻和结温的计算方法,选定了风扇和散热片,只要有足够的余量。

1、降额设计

所谓降额设计,就是使元器件运用于比额定值低的应力状态的一种设计技术。为了提高元器件的使用可靠性以及延长产品的寿命,必须有意识地降低施加在器件上的工作应力(如:电、热、机械应力等),降额的条件及降额的量值必须综合确定,以保证电路既能可靠地工作,又能保持其所需的性能。降额的措施也随元器件类型的不同而有不同的规定,如电阻降额是降低其使用功率与额定功率之比;电容降额是使工作电压低于额定电压;半导体分立器件降额是使功耗低于额定值;接触元件则必须降低张力、扭力、温度和降低其它与特殊应用有关的限制。

电子元器件的降额,通常有一个最佳的降额范围,在这个范围内,元器件的工作应力的变化对其失效率有显著的影响,设计也易于实施,而且不需要设备的重量、体积、成本方面付出太大的代价。因此,应根据元器件的具体应用情况来确定适当的降额水平。因为若降额不够则元器件的失效率会比较大,不能达到可靠性要求;反之,降额过度,将使设备的设计发生困难,并将在设备的重量、体积、成本方面付出较大的代价,还可能使元器件数量产生不必要的增加,这样反而会使设备可靠性下降。

降额的等级分为三个等级,分别称为Ⅰ级降额、Ⅱ级降额和Ⅲ级降额。

Ⅰ级降额是最大降额,超过它的更大降额,元器件的可靠性增长有限,而且使设计难以实现。Ⅰ级降额适用于下述情况:设备的失效将严重危害人员的生命安全,可能造成重大的经济损失,导致工作任务的失败,失败后无法维修或维修在经济上不合算等。

Ⅱ级降额指元器件在该范围内降额时,设备的可靠性增长是急剧的,且设备设计较Ⅰ级降额易于实现。Ⅱ级降额适用于设备的换效会使工作水平降级或需支付不合理的维修费用等场合。

Ⅲ级降额指元器件在该范围内降额时设备的可靠性增长效益最大,且在设备设计上实现困难最小,它适用于设备的失效对工作任务的完成影响小、不危及工作任务的完成或可迅速修复的情况。

2、 热设计

由于现代电子设备所用的电子元器件的密度越来越高,这将使元器件之间通过传导、辐射和对流产生热耦合。因此,热应力已经成为影响电子元器件失效率的一个最重要的因素。对于某些电路来说,可靠性几乎完全取决于热环境。所以,为了达到预期的可靠性目的,必须将元器件的温度降低到实际可以达到的最低水平。有资料表明:环境温度每提高10℃,元器件寿命约降低1/2。这就是有名的“10℃法则”。热设计包括散

热、加装散热器和制冷三类技术,这里笔者主要谈一谈散热技术。应用中常采用的方法:

第一种是传导散热方法,可选用导热系数大的材料来制造传热元件,或减小接触热阻并尽量缩短传热路径。

第二种是对流散热方式,对流散热方式有自然对流散热和强迫对流散热两种方法。自然对流散热应注意以下几点:

设计印制板和元器件时必须留出多余空间;

安排元器件时,应注意温度场的合理分布;

充分重视应用烟囱拨风原理;

加大与对流介质的接触面积。

强迫对流散热方式可采用风机(如计算机上的风扇)或双输入口推拉方式(如带换热器的推拉方式)。

第三种是利用热辐射特性方式,可以采用加大发热体表面的粗糙度、加大辐射体周围的环境温差或加大辐射体表面的面积等方法。

在热设计中,最常采用的方法是加散热器,其目的是控制半导体的温度,尤其是结温Tj,使其低于半导体器件的最大结温TjMAX,从而提高半导体器件的可靠性。半导体器件和散热器安装在一起工作时的等效热路图如图2所示。图中各参数的含义如下:

RTj—半导体器件内热阻,℃/W;

Tj—半导体器件结温,℃;

Tc—半导体器件壳温,℃;

Tf—散热器温度,℃;

Ta—环境温度,℃;

Pc—半导体器件使用功率,W。

根据图2,散热器的热阻RTf应为:

RTf=(RTj-Ta)/Pc-RTj-RTc

散热器热阻RTf是选择散热器的主要依据。Tj、RTj是半导体器件提供的参,Pc是设计要求的参数,RTc可以从热设计专业书籍中查到。下面介绍一下散热器的选择。

(1)自然冷却散热器的选择

首先按以下式子计算总热阻RT和散热器的热阻RTf,即:

RT=(Tjmax-Ta)/Pc

RTf=RT-RTj-RT。

算出RT和RTf之后,可根据RTf和Pc来选择散热器。选择时,根据所选散热RTf和Pc曲线,在横坐标上查出已知Pc,再查出与Pc对应的散热器的热阻R'Tf。

按照R'Tf≤RTf的原则选择合理的散热器即可。

(2)强迫风冷散热器的选择

强迫风冷散热器在选择时应根据散热器的热阻RTf和风速υ来选择合适的散热器和风速。

3、 冗余设计

冗余设计是用一台或多台相同单元(系统)构成并联形式,当其中一台发生故障时,其它单元仍能使系统正常工作的设计技术。冗余按特点分为热冗余储备和冷冗余储备;按冗余程度分,有两重冗余、三重冗余、多重冗余;安冗余范围分,有元器件冗余、部件冗余、子系统冗余和系统冗余。这种设计技术通常应用在比较重要,而且对安全性及经济性要求较高的场合,如锅炉的控制系统、程控交换系统、飞行器的控制系统等。

4、电磁兼容性设计

电磁兼容性设计也就是耐环境设计。首先要明白什么是电磁兼容性问题,电磁兼容性问题可以分为两类:一类是电子电路、设备、系统在工作时由于相互干扰或受到外界的干扰使其达不到预期的技术指标;另一类电磁兼容性问题就是设备虽然没有直接受到干扰的影响,但不能通过国家的电磁兼容标准,如计算机设备产生超过电磁发射标准规定的极限值,或在电磁敏感度、静电敏感度上达不到要求。为了使设备或系统达到电磁兼容状态,通常采用印制电路板设计、屏蔽机箱、电源线滤波、信号线滤波、接地、电缆设计等技术。印制电路板在设计布置时,应注意以下几点:

各级电路连接应尽量缩短,尽可能减少寄生耦合,高频电路尤其要注意;

高频线路应尽量避免平行排列导线以减少寄生耦合,更不能象低频电路那样连线扎成一束;

设计各级电路应尽量按原理图顺序排列布置,避免各级电路交叉排列;

每级电路的元器件应尽量靠近各级电路的晶体管和电子管,不应分布得太远,应尽量使各级电路自成回路;

各级均应采用一点接地或就近接地,以防止地电流回路造成干扰,应将大电流地线和沁电流回路的地线分开设置,以防止大电流流进公共地线产生较强的耦合干扰;

对于会产生较强电磁场的元件和对电磁场感应较灵敏的元件,应垂直布置、远离或加以屏蔽以防止和减小互感耦合;

处于强磁场中的地线不应构成闭合回路,以避免出现地环路电流而产生干扰;

电源供电线应靠近(电源的)地线并平行排列以增加电源滤波效果。

5、 漂移设计技术

产生漂移的原因主要是元器件的参数标准值与实际数值存在公差、环境条件变化对元器件性能产生影响或是使用在恶劣环境而导致元件性能退化等因素。

如果元器件参数值发生的漂移超出其设计参数范围,就会使设备或系统不能完成规定的功能。漂移设计是通过在设计阶段根据线路原理写出特性方程,然后通过收集元器件的分布参数来计算它们的漂移范围以使漂移结果处在设计范围内来保证设备正常使用的一种设计方法。

6 、互连可靠性设计

由于在大部分电子产品中都有接插件,为了降低这些连接部分的故障率,因此有必要进行互连可靠性设计,常采用的方法有:

注意接插件的选型,印制电路板应尽量采用大板或多层板,以减少接插点:

尽量减少可拔插点,以提高其可靠性,重要部件可采用冗余设计;

两个插头同时相对时,应采用将其中一个固定,另一个浮动的方式,来保证对准和拔插;

采用机械固定方式;

对于常插拔的部件,最好设计成单面走线;

连接空间应选择有序分割;

馈线和地线应隐蔽安装。

此外,在电子产品在可靠性设计中,有时还采用维修性设计技术、软件可靠性设计技术、机械零件可靠性设计技术、故障安全设计技术以及一些新的可靠性设计技术等。

四、可靠性工程

可靠性工程是在产品全寿命过程中同故障作斗争的工程技术,是研究产品故障的发生、发展,故障发生后的处理,修理、保障,以及如何预防故障发生、直到消灭故障的工程技术。

提高系统(或产品或元器件)在整个寿命周期内可靠性的一门有关设计、分析、试验的工程技术。系统可靠性是指在规定的时间内和规定条件(如使用环境和维修条件等)下能有效地实现规定功能的能力。系统可靠性不仅取决于规定的使用条件等因素,还与设计技术有关。有组织地进行可靠性工程研究,是20世纪50年代初从美国对电子设备可靠性研究开始的。到了60年代才陆续由电子设备的可靠性技术推广到机械、建筑等各个行业。后来,又相继发展了故障物理学、可靠性试验学、可靠性管理学等分支,使可靠性工程有了比较完善的理论基础。

产品的可靠性是设计出来的,生产出来的,管理出来的。可靠性工程是为了达到系统可靠性要求而进行的有关设计、管理、试验和生产一系列工作的总和,它与系统整个寿命周期内的全部可靠性活动有关。可靠性工程是产品工程化的重要组成部分,同时也是实现产品工程化的有力工具。利用可靠性的工程技术手段能够快速、准确地确定产品的薄弱环节,并给出改进措施和改进后对系统可靠性的影响。可靠性工程具体如下图1所示。

产品在需求分析阶段、设计阶段、工程研制阶段和生产制造阶段都需开展一定的可靠性设计分析、管理、试验工作。

按照产品的层次结构,产品的系统层次、装置层次、部件层次和零件层次都分别有相应的可靠性工作内容,即产品不同层次的可靠性影响因素和薄弱环节各有特点,需要分别开展相应的可靠性设计、管理、试验工作项目解决。系统设计师和项目管理者需要在产品的工程化角度把握可靠性工程的开展和实施。影响器件可靠性的主要因素包括器件的种类和数量、器件的额定工作电参数和电应力、额定工作温度和环境温度、元器件的质量等级和品质保证等级,器件的降额特性和热敏感特性,器件的储存可靠性;影响部件可靠性的主要因素包括器件本身的可靠性与器件相互影响,主要需要考虑的因素为热分析、电磁兼容、耐环境、信号完整性、潜通路和工艺工装;影响装置可靠性的主要因素包括部件之间的相互影响和结构、工艺、连接;影响系统可靠性的主要因素包括冗余设计、人机工程和系统可靠性设计。

建立可靠性工程体系,开展和实施可靠性工程是产品高可靠性的必要条件,可靠性设计分析是可靠性工程的基础,可靠性设计水平差的产品可靠性必然低;可靠性的设计需要可靠性管理,可靠性管理是开展可靠性设计的技术管理保证和组织结构保证;设计出的产品在生产阶段难免引入“瑕疵”,需要可靠性试验“暴露”。

按照鼓掌原因的统计,分析主要故障原因。针对主要矛盾,有针对性的制定措施,实现快速的可靠性提升。

可靠性工程,是将可靠性测试和设计,融入到设计过程中。

在概念阶段,汇总所有可靠性需求;在计划阶段,从设备组网、架构设计、冗余设计、FMEA设计等方面,对可靠性哦啊进行考虑。

在开发阶段,对计划的可靠性设计进行落实;在验证阶段对可靠性需求进行验证和测试。

五、可靠性测试

从硬件角度出发,可靠性测试分为两类:

  以行业标准或者国家标准为基础的可靠性测试。比如电磁兼容试验、气候类环境试验、机械类环境试验和安规试验等。

  企业自身根据其产品特点和对质量的认识所开发的测试项目。比如一些故障模拟测试、电压拉偏测试、快速上下电测试等。

  下面分别介绍这两类可靠性测试。

  1 基于行业标准、国家标准的可靠性测试方法

  产品在生命周期内必然承受很多外界应力,常见的应力有业务负荷、温度、湿度、粉尘、气压、机械应力等。各种行业标准、国家标准制定者给出了某类产品在何种应用环境下会存在多大的应力等级,而标准使用者要根据产品的应用环境和对质量的要求选定相应的测试条件即应力等级,这个选定的应力等级实质上就是产品测试规格。

  在产品的测试阶段,我们必须在实验室环境下对足够的测试样本一一施加相应的应力类型和应力等级,考察产品的工作稳定性。对于通信设备而言,常见的测试项目至少包括电磁兼容试验、安规试验、气候类环境试验和机械环境试验,而上述四类测试项目还包含很多测试子项,比如气候类环境试验还包括高温工作试验、低温工作试验、湿热试验、温度循环试验等。此类测试项目还有很多,这里就不做详细介绍。总的而言,所有的测试项目都属于规格符合性测试(即PASS或者FAIL测试),试验的目的都是模拟产品在生命周期内承受应力类型和应力等级,考察其工作稳定性。

  2 企业设计的可靠性测试方法

  由于网络产品的功能千差万别,应用场合可能是各种各样的,而与可靠性测试相关的行业标准、国家标准,一般情况下只给出了某类产品的测试应力条件,并没有指明被测设备在何种工作状态或配置组合下接受测试,因此在测试设计时可能会遗漏某些测试组合。比如机框式产品,线卡种类、线卡安装位置、报文类型、系统电源配置均可灵活搭配,这涉及到的测试组合会较多,这测试组合中必然会存在比较极端的测试组合。再如验证该机框的系统散热性能,最差的测试组合是在散热条件机框上满配最大功率的线卡板;如果考虑其某线卡板低温工作性能,比较极端的组合时是在散热条件最好的机框上配置最少的单板且配置的单板功耗最小,并且把单板放置在散热最好的槽位上。

  总之,在做测试设计时,需要跳出传统测试规格和测试标准的限制,以产品应用的角度进行测试设计,保证产品的典型应用组合、满配置组合或者极端测试组合下的每一个硬件特性、硬件功能都充分暴露在各种测试应力下,这个环节的测试保证了,产品的可靠性才得到保证。

  以下举两个例子来说明如何根据产品特点设计出可靠性测试方法。

  2.1实例一:包处理器外挂缓存(Buffer)的并行总线测试

  为了应对网络的突发流量和进行流量管理,网络设备内部的包处理器通常都外挂了各种随机访问存储器(即RAM)用来缓存包。由于包处理和RAM之间通过高速并行总线互连,一般该并行总线的工作时钟频率可能高达800Mhz,并且信号数量众多,拓扑结构复杂,在产品器件密度越来越高的情况下,产品很可能遇到串扰、开关同步噪音(SSN)等严重的信号质量问题,针对上述可能遇到的问题,我们需进行仔细的业务设计,让相应硬件电路的充分暴露在不利的物理条件下,看其工作是否稳定。

  串扰,简单的来说是一种干扰,由于ASIC内部、外部走线的原因,一根信号线上的跳动会对其他信号产生不期望的电压噪声干扰。为了提高电路工作速率和减少低功耗,信号的幅度往往很低,一个很小的信号干扰可能导致数字0或者1电平识别错误,这会对系统的可靠性带来很大影响。在测试设计时,需要对被测设备施加一种特殊的业务负荷,让被测试总线出现大量的特定的信号跳变,即让总线暴露在尽可能大的串扰条件下,并用示波器观察个总线信号质量是否可接受、监控业务是否正常。以16位并行总线为例,为了将这种串扰影响极端化,设计测试报文时将16根信号中有15根线(即攻击信号线Agressor)的跳变方向一致,即15根信号线都同时从0跳变到1,同时让另一根被干扰的信号线(即Victim)从1下跳到0,让16根线都要遍历这个情况。

  开关同步噪音也是RAM高速并行接口可能出现的我们所不期望的一种物理现象。当IC的驱动器同时开关时,会产生瞬间变化的大电流,在经过回流途径上存在的电感时,形成交流压降,从而产生噪音噪声(称为SSN),它可能影响信号接收端的信号电平判决。这是并行总线非常恶劣的一种工作状态,对信号驱动器的高速信号转变能力、驱动能力、电源的动态响应、电源的滤波设计构成了严峻的考验。为了验证产品在这种的工作条件下工作是否可靠,必须被测设备(DUT)加上一种特殊的测试负荷,即特殊的测试报文。

举例:

  如果被测总线为16位宽,要使所有16跟信号线同步翻转,报文内容应该为:

  FFFF0000FFFF0000

  如果被测总线为32位宽,要使所有32跟信号线同步翻转,测试报文内容应该为:

  FFFFFFFF00000000FFFFFFFF00000000

  如果被测总线为64位宽,要使所有64根信号线同步翻转,测试报文内容应该为:

FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF0000000000000000

  如果报文在DUT内部的业务通道同时存在上述位宽的总线,业务测试必须加载上述的报文,看DUTUUT在每种报文下工作是否正常,同时在相应总线上进行信号测试,看信号是否正常。

  2.2实例二:热测试

  热测试通过使用多通道点温计测量产品内部关键点或关键器件的温度分布状况,测试结果是计算器件寿命(如E-Cap)、以及产品可靠性指标预测的输入条件,它是产品开发过程中的一个重要的可靠性活动。

  一般而言,热测试主要是为了验证产品的热设计是否满足产品的工作温度范围规格,是实验室基准测试,这意味着为了保证测试结果的一致性,必然对测试环境进行严格要求,比如要求被测设备在一定范围内无热源和强制风冷设备运行、表面不能覆盖任何异物。但实际上很多产品的工作环境跟上述测试环境是有差异的:

  有些产品使用时可能放在桌子上,也可能挂在墙上,而这些设备基本上靠自然散热,安装方法不同会直接影响到设备的热对流,进而影响到设备内部的温度分布。因此,测试此类设备时必须考虑不同的安装位置,在实验室条件把设备摆放在桌子热测试通过,并不代表设备挂在墙上热测试也能通过。

  有些网络设备在网吧行业用得比较多,几台设备叠在一起使用比较常见,做类似产品的热测试时,必须考虑到产品在此情况下热测试是否符合要求。

  一些机框式设备,由于槽位比较多,风道设计可能存在一定的死角。如果被测对象是一块业务板,而这块可以随便插在多个业务卡槽位,热测试时必须将被测板放在散热最差的槽位,并且在其旁边槽位插入规格所能支持的大功耗业务板,后让被测单板辅助单板和满负荷工作,在这种业务配置条件下进行热测试。

  针对不同的产品形态,硬件可靠性测试项目可能有所差异,但是其测试的基本思想是一致的,其基本的思路都是完备分析测试对象可能的应用环境,在可能的应用环境下会承受可能工作状态包括极限工作状态,在实验室环境下制造各种应力条件、改变设备工作状态,设法让产品的每一个硬件特性、硬件功能都一一暴露在各种极限应力下,遗漏任何一种测试组合必然会影响到对产品的可靠性。

中国航天之父 钱学森手稿

从算法到工程,推荐系统全面总结

最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。

本文将按照从算法到工程的顺序,先介绍一下推荐系统整体架构;再聊聊算法模型的演化;然后是推荐系统的一些设计关键点;最后,结合自身经验和业界最新进展,讨论一下系统的工程化实践。

一、推荐系统整体架构

说到推荐系统,大家应该都不陌生,它几乎已经是任何一个互联网系统的标配。在如今信息爆炸的场景下,如何根据每个人的喜好,快速的把用户“需要”的信息呈现出来,不仅是提高客户体验的需要,也是保证客户留存率,保证下单率的灵药。

推荐的呈现形式可能有多种多样,拿同程艺龙小程序来说,当用户搜索酒店时,酒店列表的顺序就是推荐的体现。推荐的顺序,融合了用户的地理位置、历史消费习惯、品牌偏好等多种信息,把最具“价值”的酒店摆在靠前的位置。

下图展现了一个典型的推荐系统的整体架构,也涵盖了全书所围绕介绍的主要关键点。

图中将系统整体架构分成“数据部分”和“模型部分”,数据部分的箭头代表了数据加工处理的过程,从数据收集开始,到数据汇总、加工、预处理、到最后数据落地,通过特征工程形成特征数据,供算法模型使用。数据的内容,对于推荐系统来说,一般可以概括为三部分:用户信息、物品信息、场景信息。

目前业界的大数据处理框架很多,从最早一代的 Hadoop 技术体系,到后来的实时流处理框架 Storm,再到后来的流批一体化框架,如 Spark、Flink 等,都是在朝“更大吞吐量”、“更高实时性”、“一体化”方向演进。所谓大数据架构模式:lambda 也好、kappa 也罢,其实主要是解决如何更好的将流、批两种处理模式整合在一起,平衡系统的实时性和吞吐量。

模型部分主要讲了三件事:

1、 推荐模型的演化及特点;

2、 模型的离线训练;

3、 模型的在线部署。

其中,关于模型演化及介绍,书中花了两章的篇幅进行了详细介绍,从机器学习时代到深度学习时代,是本书的精髓。

模型的离线训练即包含了训练框架的选择,也介绍了模型分布式训练的原理,还有些训练方式的奇技淫巧。

模型的在线部署是工业界讨论最多的部分,如何把离线训练的模型引入系统,使其发挥效能,有很多“关键设计”。其中“召回”和“排序”是典型的设计,此外还有冷启动方案、平衡探索利用等很多注意点。

其实近几年,模型推理任务还有一些最新的优化技术,如“模型量化”、“计算图优化”、“知识蒸馏”等,书中讨论的并不是很多,我们将在最后介绍。

接下来,将按照上面的顺序,逐一展开讨论;让我们先进入模型的世界吧。

二、传统推荐模型的演化

上图已经将前机器学习时代的主要模型概括的很清楚了,书中将这些模型分为 4 类:协同过滤算法族、LR 算法族、因子分解机算法族、组合模型。

协同过滤(CF) 可以说是推荐系统算法的鼻祖了,它从用户购买物品的行为中寻找相似性,构建算法模型。所以它又分两种:ItemCF 和 UserCF。购买相似的物品的用户视为“相似”,从而推荐“相似用户”购买而自己又没购买的物品,就是 User Based CF;而反之,被多个相似用户购买的物品视为“相似”,从而推荐“相似物品”给用户自己的就是 Item Based CF。这两种方式没有优劣,视场景而用。UserCF 适用于热点发现以及跟踪热点趋势。而 ItemCF 更适用于兴趣变化较为稳定的应用。

协同过滤历史悠久,可解释性很强,但它也有天然缺陷,如 ItemCF 的热门物品具有很强的头部效应,它能与很多物品产生相似性,从而被推荐,这就使得推荐物品缺乏变化。而且,CF 算法仅仅使用了用户和物品购买信息,无法引入其他特征,使得很多有效信息被遗漏。虽然后续又衍生出矩阵分解(MF)算法,来解决模型的泛化能力,但始终无法引入其他特征。

逻辑回归(LR) 是经典的推荐模型,它着眼于用户物品购买矩阵,但又不局限于其中,通过引入用户信息、物品信息及上下文信息,对稀疏矩阵进行预测。其 xw+b ->sigmoid 的数学形式,不仅使其具有可解释性强,又是后来深度学习模型神经元的典型构成。因此,很长一段时间内,LR 都在工业界占据主导地位。

但它的局限性也很明显:表达能力有限,无法进行自动特征交叉。所有的交叉特征提取,完全看算法工程师的“想象力”和“对业务的理解力”。所以其表现也很不稳定。

因此,很快 FM 的时代来了 。FM 为每个特征单独引入了隐向量,用向量积代表特征组合后的权重。

从 FM 的表达式也可以看出,相比 LR,其只是在线性部分后加了两两特征交叉项,如果交叉特征的隐向量维度为 k,n 为特征数量,其额外增加的计算复杂度为 nk。作为 LR 的改进,FM 不仅继承了 LR 的所有优点,还用“不大”的额外开销,解决了特征交叉问题。同时 FM 还没有深度学习模型的复杂性,使其在工程上十分利于部署。

目前,同程艺龙酒店的推荐,很大一部分通道仍然使用的是 FM 模型。轻量、可解释性强、易于部署,同时还能通过不断引入新的特征提高其准确性。这些优点都使这个奋战了多年的“老兵”,在深度学习大行其道的今天,仍然有用武之地。

终于说到“上分神器”——GBDT 了。 这个神奇的模型通过将一棵棵简单树进行组合,通过对“残差”进行拟合,使其具有非常好的预测准确性和泛化能力。同时它也能对特征进行自动的筛选和组合。

其优良的性能使其在前几年的机器学习比赛中,几乎是必选的模型。通过不断的调参和模型融合,就能不断在比赛中提高分数,拿到不错成绩。XGBoost 和 LightGBM 是实现了 GBDT 模型的两个经典框架。

但如此优秀的模型也有其局限性。首先高复杂度必然造成上线的困难和可解释性的消解。另外,残差树的形式,也使得其只能串行化训练和预测。因此,工业界在线上实际使用 GBDT 模型进行预测的并不多,而是利用它特征筛选和交叉能力,和其他模型进行组合。

GBDT+LR 就是一个生动的例子,利用 GBDT 特征组合能力,形成多阶特征交叉,然后把产生的每棵子树命中的叶子节点,形成的 one-hot 向量,作为新的特征,送入到 LR 中。这种组合最妙的地方还在于,两个模型可以分开训练,独立升级演化。

GBDT 作为机器学习时代“最后的倔强”,将“简单模型”的各项指标都推向了顶峰,特征交叉的方案也基本挖掘到了极致。但互联网仍在产出海量的数据并对模型提出更高的要求。与此同时,随着算力的提升和数据的积累,深度学习模型也在悄然的崛起。

三、深度学习推荐模型的演化

与传统的机器学习相比,深度学习模型一般有更复杂的网络结构,更强的表达能力,能够拟合更复杂的数据模式。

书中的这幅图揭示了推荐领域的深度学习模型演化关系。深度学习模型以多层感知机(MLP) 为基础开始各自的演化。MLP 是典型的神经网络结构,多层的结构很好的解决了特征交叉问题。其实在机器学习时代就有 MLP,但由于其相比 LR、FM 等模型,参数量更大;在没有更多数据量的情况下,效果反而不如 LR 和 FM 模型,所以,在实际中,往往应用的不多。但这仍然不能掩盖其在深度学习中的核心地位。

深度学习最开始的实际应用应该说还是 Deep Crossing 和 PNN 系列 。Deep Crossing 在实际中大量使用了 Embedding 结构,并使用 stacking 的方式将不同特征拼接起来。而在具体的网络结构中,使用了经典的残差结构,如下图:

残差结构加了一条跳过网络的路径,使 X 直接加到网络后的输出上,残差结构很好的解决了随着模型加深,训练时梯度消失问题,拟合残差使得模型的拟合能力更强,训练难度更低。最经典的残差结构的提出还是微软的 ResNet,GBDT 某种意义上来说也是针对残差建模。

介绍深度学习模型,不能不提大名鼎鼎的 Wide&Deep ,由谷歌于 2016 年提出。

浅层模型具有较强的记忆能力,训练速度快,可解释性强的优点;深度模型是处理特征交叉的好手、具有较强的模型容量和泛化能力。那能不能将二者的优势结合起来呢?Wide&Deep 就是这样一个模型,它包括一个浅层模块和一个深度神经网络模块。谷歌团队最初将其应用在 google 商店 app 推荐中。

但哪些特征需要放在 Deep 端、哪些特征需要放在 Wide 端,需要对业务场景有深刻的理解。

“记忆”和“泛化”在机器学习领域是一对儿相反的词,“记忆”代表对训练数据中共现关系的直接运用;“泛化”则代表模型挖掘特征和最终结果的潜在模式的能力。一般来说模型的“记忆能力”是我们机器学习训练过程中,想极力避免的,“泛化能力”才是我们追求的模型目标。想象一下,一个考生如果只死记硬背,记住了几道题,练习时可能会得高分,但在考试时遇到自己没见过的题就懵了,这是我们不希望看到的。但在 Wide&Deep 中,这两种能力却得到了综合运用。“泛化能力”由 Deep 部分承担,Wide 部分承担“需要死记硬背”的部分。这就好像,考试前,我们既学会了一些解题模式,又要死记硬背一些典型热点题目一样。

谷歌团队将“已安装应用”,作为 Wide 部分的特征,Deep 部分输入则为“全特征”。最后将二者组合起来,形成统一的模型。同程的酒店推荐也有使用 Wide&Deep 模型,目前更多是侧重 Deep 部分的特征挖掘。在实际线上生产环境中,取得了不错的业务效果。

Wide&Deep 模型的提出,打开了不同网络结构融合的新思路。以致后来很多模型都是对 Wide&Deep 模型的 Wide 部分或 Deep 部分进行改造而来。

对 Wide 部分的改进就有 DCN 和 DeepFM,前者是把 Wide 部分换成了交叉网络,而后者则是使用 FM 来代替原有的 LR 部分。

对 Deep 部分的改进则既有结构上的,也有通过引入新的机制的方式。

注意力机制 是一次有意义的突破,DIN、AFM 都是这其中有效的尝试。注意力机制模拟了人类认识事务的注意力机制,在图像、语音和推荐领域的呈现形式不尽相同。从数学形式上看,注意力机制只是将过去的向量加和换成了加权后加和,而且其训练难度上,也是多了一层注意力的权重,但其意义却是更符合人类实际的思考模式的。拿 AFM 来说,其 Attention Net 的数学形式如下:

本质上就是一个单层神经网络 + softmax,最终输出的 ai,j 就是 FM 各交叉项的权重。这也是符合我们的直觉的:即任意两个二阶交叉项,其重要性也不应该是一样的。最终效果也证明了这点:引入了 Attention 机制的 AFM,效果大幅提升。

四、推荐系统的一些设计关键

聊完模型演化,再聊聊模型相关的设计与选型。推荐系统作为一个复杂系统,并不只是模型就够了。有关模型,还有很多设计关键点需要关注。

新建一个模型时,需要考虑模型的目标是什么?模型的目标一般由商业目标和应用场景决定。而模型目标又最终确定了损失函数和训练方法。

首先我们需要将大的商业目标拆解,同时考虑技术架构。比如将系统拆分成“召回”和“排序”两个阶段就是技术上典型的平衡“性能和业务”的方案。召回阶段考虑快速过滤掉大部分不相关商品,同时保留多样性。有时为了多样性,还会采取“多路召回”的方式。即通过不同的策略、规则分别召回一部分候选集,然后把候选集合并混合在一起供后续使用。召回阶段的特点决定了它往往采用简单的模型、规则、或 Embedding 技术,以此来保证召回“效率”。而 CTR、CVR 则是进一步对“排序”阶段目标的业务拆分。拿酒店推荐场景来说,用户必须先点进酒店详情页,才有可能进一步到下单页形成转化率。因此,CTR、CVR 就是我们模型优化的目标,而实现推荐的形式,就是通过列表页展现的顺序来影响用户的选择。这种排序推荐的方式,让我们的训练方法,不仅可以使用 pointwise 的训练方法,对单个酒店打分;还可以使用 pairwise 等 LTR 方法,对酒店的顺序进行建模训练。

完成了整体的模型拆解,就开始着眼到单个模型上来。模型的特征挖掘充分吗?是否需要多模态特征?像酒店推荐一般会包含“用户特征”、“酒店特征”、“上下文特征”等。每个特征的选取和处理都是经过大量的打磨和 A/B-Test 实验的结果。

如何解决冷启动问题?模型的初始化有时是在系统上线前,这时已经积累了一定量的数据,可以充分建模;但有时缺乏的却是输入的特征。如新建用户、新商品。这时有些策略可以帮助我们跨过这个阶段。如基于规则的推荐、或通过“主动学习”主动获取数据等。

推荐的实时性包含模型的实时性和特征的实时性。模型的更新频率和更新范围是影响模型实时性的关键。更新频率一般从一周到一天,甚至是在线学习,这些都需要数据收集和流处理框架的支持,同时结合好全量和增量更新。更新范围既可以全部,也可以是模型和 Embedding 向量分开更新。

五、模型的离线训练与在线部署

1、离线训练

在目前互联网数据规模越来越大的情况下,模型的训练场景从单机单卡发展到单机多卡,再到多机多卡,分布式训练逐渐成为一个逃不开的选项。目前主流的分布式训练框架包括 Spark MLlib、Parameter Server、Tensorflow 等。

从并行方式上看,可以分为数据并行和模型并行。数据并行又可以分为同步并行和异步并行

Spark MLlib 是典型的同步数据并行方式。它通过广播的方式同步梯度到各个计算节点,然后每个节点都拉取一部分训练数据,在本地完成一轮梯度计算,再通过 treeAggregate 汇总各个梯度加和求平均,最后同步最新梯度到各节点完成一轮梯度更新。

可以看出这种并行训练方式虽然清晰,但训练过程却是低效的。每轮迭代先要广播所有参数,极其耗费带宽资源;另外,在生成汇总梯度时,都要等待所有节点完成,训练速度由最慢的节点决定。因此,Spark MLlib 并不适合深度学习时代,大规模神经网络的分布式训练。

因此,Parameter Server 应运而生,那么 Parameter Server 是怎么解决上述两个问题的呢?下图展示了 Ps 的整体架构:

Ps 整体上由 Server Group 和 Worker Group 构成,Worker 负责拉取部分数据,计算局部梯度,并上报 Server;Server 负责维护汇总梯度,计算全局梯度,并更新 Worker。可以看到,Server Group 内多 Server 的结构,每个 Server 通过一致性 hash,维护一定范围内的参数,避免了单节点的带宽瓶颈,也保证了节点删扩容的灵活性。而在更新梯度时,不再采取“同步阻塞”的并行方式,而是采取了“异步并行”。即 Worker 在计算完局部梯度并上报更新后,不再等待其他计算节点,而是继续拉取数据,开始下一轮迭代。当然,速度上的提升,带来的是模型一致性的丧失,也就是收敛结果的不确定性。这就需要设计者根据实际模型情况做好平衡。另外,也可以采取“有界延迟”的方式,作为折衷方案。

Tensorflow 采用了多种并行策略。其由 OP 组成的计算关系图,类似于 Spark 的 DAG(有向无环图);有依赖关系的 OP 必须串行执行,无依赖关系的 OP,可以分配到多卡上并行执行。其分布式策略默认采取了类似 Ps 的数据并行的方式,不再赘述。Ring-All Reduce 作为另外一种并行策略,相对 Ps 可以达到更高的带宽利用率。

2、在线部署

模型的在线部署需要面临的则是另外一番完全不同的场景了。与离线训练最大的不同是对推理性能的极致追求,面临的问题和困难也有很多。

首先,在线部署有可能和离线使用的是不同的框架,甚至是不同的语言。那怎么把模型“提交”给在线推理模块,就有很多考量。PMML 协议在机器学习时代是几乎是模型交换的标准 。PMML 文件中包含了模型的结构定义和模型参数,像 sklearn 等很多框架都支持直接将模型导出为 PMML 格式。而在部署端,如果编程语言是 Java,则使用 JPMML 则很容易将模型装载、还原。但到了深度学习时代,模型参数动辄上百万,再使用像 PMML 这种以 XML 为组织形式的协议就不合适了。

如果推理平台是自研,可以使用自定义导出模型参数的方式。模型参数本质上就是大量的 key-value 集合,导出后,可以以任意格式存储。同程的酒店推荐模型就是采用这种方式,离线训练端把模型参数以 key-value 的形式导出后,推送到共享的文件系统中;模型推理平台自动检查更新,构建模型并装载最新的参数,简单、高效而灵活。

ONNX(Open Neural Network Exchange,开放神经网络交换)格式 ,是由微软开源,一套新的用于表示深度学习模型的标准,近几年逐渐火热起来,并逐渐被 TensorFlow、PyTorch、Caffe2 等各大框架支持。它定义了可扩展的计算图模型,以及内置运算符和标准数据类型的定义;本质上是以 PB 格式为组织形式的文件,因此更加节省空间。

然后是线上部署框架的选择。

Tensorflow Serving 是一个谷歌开源的用于模型推理的高性能库,可同时提供 RESTful 和 gRPC 接口,用于线上模型推断。统一的离线框架和在线框架是这种方案的最大优点,只需将 Tensorflow 的模型导出为 PB 文件,然后即可导入 Tensorflow Serving 使用。与 TF 良好的兼容性大大简化了上线步骤;此外,它还提供了模型版本控制和热更新等功能。Tensorflow Serving 最大的硬伤在于其默认情况下的性能。Python 环境下程序运行本来的性能就不高,再加上特征预处理过程,如果再不针对硬件进行优化,那这种方式上线的模型推断接口,性能是堪忧的。必须针对性的进行代码和硬件优化。此外,如果训练环境不是 Tensorflow,那用 TF-Serving 做线上部署也是比较麻烦的。

自研框架当然也是个不错的选择。 TE 的酒店推荐框架就是采用自研的方式。当然需要考虑的问题也不少,包括:

1、 与各种离线训练框架交换模型的格式;

2、 模型的加载与热更新及版本控制;

3、 如何解构各种模型,并进行高性能的推断,提供高吞吐量的对外接口;

4、 如何组织、复用大量的特征处理代码;

5、分布式模型装载、硬件优化等等。

总之自研框架的成本是比较高的,所以一般也只有大型互联网公司才会选择自研。但好处也是明显的,整个过程更加可控,不必再局限于各种开源框架的限制。百度的 Paddle、腾讯的 TNN 都是业内比较有名的自研框架。

近几年,一系列专注于硬件优化的模型推理框架也逐渐崛起。Nvidia 推出的 TensorRT 便是其中的典型。根据其官方文档介绍,TensorRT 可以针对 GPU 模式,达到 10X 以上的加速。那它是怎么做加速的呢?主要有两种方式:一种是通用类的模型加速,这个我们后面一起讨论;另一种是针对硬件指令级的加速。 比如图像识别中,经常使用的一个卷积层 + 一个偏置层 + Relu 激活,本来是三条 cuda 指令,但在特定的显卡下,TensorRT 可以将其合并成 CBR 层,一条 cuda 指令,从而实现网络结构简化和推理加速。

最后,我们来说说通用的模型加速技术,包括:数学公式优化、模型剪枝、模型量化、权值共享和知识蒸馏

数学公式优化: 这类最好理解,就是对模型原有计算形式,做数学公式上的推导变形,使其更符合 CPU 的计算模式。比如 FM 的交叉项计算公式:

乍一看其计算复杂度为

但可以进行如下变换:

复杂度就变成了

其主要就是利用公式:

实现化简。

另一个例子是在卷积运算中,Winograd 算法大量被使用。它来自于 CVPR 2016 的一篇 paper:<Fast Algorithms for Convolutional Neural Networks>。核心思想是通过转换,用多次加法,减少卷积运算中的乘法,而乘法运算是比加法运算慢很多的,以此来提高卷积的计算速度。

模型剪枝: 在 2016 ICLR 的 best paper <DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN>一文中,Han 等人对模型剪枝、权值共享等做了系统性的综述。为什么要剪枝呢?训练好的大型神经网络通常存在参数冗余,可以对不重要的模型节点进行剪枝来达到减少模型体积、加快模型运算的目的,同时,控制精度下降。具体做法就是设计一个阈值,将小于这个阈值的参数连接在网络中去掉,再重新训练网络。通常可能要如此进行多个迭代。上述方法可以说是一种贪心的方法,但它存在一种问题,就是如果删除了重要节点,会造成精度不可逆转的下降。于是,Yiwen Guo 2020 年的这篇论文<Dynamic Network Surgery for efficient DNNs>提出了一个改进方案,见下图:

也就是增加了“修补”操作,来恢复被误删掉的重要连接。从最终效果看,模型剪枝和精度下降都得到了有效控制。

权值共享: 卷积网络中的卷积核最早引用了“权值共享”和“局部感受野”这俩概念。而如果把这种思想引入到模型压缩领域中是否可行呢?Han 在其论文中就验证了这一方案:使用 k-means 方法对模型的权值进行聚类,然后使用中心点代替原有权值,以后梯度更新时,就以类别为粒度进行更新。下图描述了这一方法的过程。

模型量化: 模型量化是近两年较为火热的一种模型压缩方式。一般情况下,神经网络中的数据是以精度为 32 位的浮点型(FLOAT32)进行表示的,存储和计算的开销都很大。模型量化则是研究以更低的精度表示模型,同时控制模型效果损失。目前半精度、INT8、二值化都是流行的方式。量化时,也有仅量化权值和特征、权值都量化两种方案。

通常来说,INT8 量化用的最多,Tensorflow、TensorRT 等很多框架也都内置支持。原理其实并不复杂,关键是如何将 Float32 的值域映射到 INT8 的区间(-127~127),见下图:

但浮点型的范围是很大的,个别的离群点可能会导致 INT8 映射时,将大部分数据集中映射在几个值,从而腾出更大的空间给离群点,这就得不偿失了。所以需要控制 FLOAT32 映射的边界值 T,也就是映射范围,舍弃掉部分离群点。那如何衡量舍弃哪些以及映射的好坏呢?TensorRT 使用的是 KL 散度,也就是相对熵。相对熵是用来衡量两个分布的差异的,因此原问题就变成了如何把 FLOAT32 映射到 INT8 的区域,同时使两个分布的 KL 散度最小化。

知识蒸馏: 知识蒸馏最早要追述到 Hinton 的这篇论文《Distilling the Knowledge in a Neural Network》。知识蒸馏是要用一个训练好的复杂度较高的 Teacher 网络,去协助训练一个复杂度低的 Student 网络。一个模型容量更大的 Teacher 网络,虽然其表达能力很强,但同时也意味着它可能会存在很多冗余,我们要的是模型泛化能力本身,而非模型的参数结构。所以就需要把 Teacher 模型的预测能力通过“蒸馏”的方式,迁移到一个轻量简化的 Student 网络。

这其中的关键是软化后的 Softmax。拿 MINST 手写数字识别来说,我们知道输入到模型中的目标是经过 One-hot 的,也就是 0 1 0 0 0 0...这种形式。目的是告诉模型哪个结果是对的,我们希望它概率最大化,从而实现训练;而其实这种方式丢掉了很多信息,比如数字 2 和 3 很像,我们怎么把这种信息告诉模型,从而让它在训练过程中少走弯路呢?答案就是 Teacher 网络。作为一个“过来人”,Teacher 网络通过推断,当然可以知道 2 和 3 很相似这种信息,然后把结果“软化”(使 One-hot 结果更加平滑),也一起输入到 Student 网络的训练过程中。这样,Student 网络就可以更快的、以更小更简洁的结构学到老师的精髓。下图就描述了这一过程:

不知不觉中已经写了这么多,这才发现推荐领域涉及到的知识点是那么多,而很多内容还没有展开讲。有些是书中提到,有些是自己实际工作中的总结,希望对大家有所帮助。路漫漫其修远兮,吾将上下而求索。

作者介绍:

房磊,2014 年加入同程艺龙,任架构师,技术委员会委员;先后负责 MAPI 手机网关平台建设、同程艺龙开放平台建设、数据平台建设等。擅分布式系统架构设计和 AI 系统设计。20 年参加 Top100 案例北京峰会,获人工智能专场最佳讲师。欢迎关注我的个人微信公众号:architectAI ,进一步交流、私信我~。

相关问答

算法工程化是什么?

算法工程化是一个涉及将算法理论转化为实际应用的过程。这个过程涵盖了从简单的算法模型调用,如基于算法开发服务或封装接口对外服务,到部署算法到具体硬件上...

ld工程师是干什么?

id工程师岗位职责1.负责android驱动软件的设计、开发、维护2.移植并测试android/linuxbsp3.硬件工程师紧密合作解决工程化过程中遇到的各种问题4.开...

易卡智车是什么?

易咖智车是国际领先的智能数字化运载平台(IDV:IntelligentDigitalVehicle)科技公司,面向无人配送、无人零售、安防巡逻、无人环卫等多种应用领域,提供具备...

支撑软件的基本介绍是什么?支撑软件的基本介?

应用软件包是利用计算机解决某类问题而设计的程序的集合供多用户使用。扩展资料:常见支撑软件在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程...

“开发工具”和“开发环境”有区别吗,谢谢?

软件开发环境(SoftwareDevelopmentEnvironment,SDE)是指在基本硬件和宿至软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称S...

本地网站打开网页较慢,服务器也在本地,是什么原因?

第一、检查是不是网络原因,访问如新浪、网易等主流网站是不是打开速度如何第二、检查是不是网页前端资源比较大,浏览器F12打开调试看看那个资源占时间比较长,...

初中毕业生学什么专业好?

初中毕业,要么升入高中,以后考大学,拿个好的文凭;要么进中专或职校学一技之长,找个满意的工作。那么,初中毕业学习什么专业好呢?这是很多初中毕业生和家...初中...

石家庄学院计算机科学与工程学院怎么样?设有哪些专业?申请方

[回答]~接下来我为大家简单介绍一下我们石家庄学院的计算机科学与工程学院开设的专业以及研究情况专业设置:计算机科学与技术、软件工程、信息安全计算机...

软件与其他工程学科产生的工件有何不同-小红薯FB26FF7C的...

计算机科学与技术专业具有良好的科学素养,系统地、较好地掌握计算机科学与技术包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法,...

系统工程方法在软件工程中的应用

[回答]因此,软件和硬件(包括计算机、集成电路及其他电子元器件)构成了信息技术的核心,软件产业和硬件产业共同构成信息产业的核心,是国民经济信息化的基础...

猜你喜欢