人工智能入门02-华为昇腾实习笔记-GPU、自然语言处理NPL、神经网络结构搜索NAS
5.16-5.17学习:
- 观看 AI基础理论-人工智能理论-《人工智能的能与不能》
- -CPU、GPU、NPU、TPU
- -昇腾310和910芯片和达芬奇架构
- 观看 AI基础理论-人工智能理论-《自然语言处理和情感分析》
- -初步认识自然语言处理
- 观看 AI基础理论-人工智能理论-《神经网络结构搜索》
- -初步了解神经网络结构搜索NAS
- 了解昇腾AI创新大赛
本文所有代码均在jupyter notebook上运行,下载链接:https://pan.baidu.com/s/1fS5-jOyhWglOmVm1NU-Eww?pwd=6604
提取码:6604。
CPU、GPU、NPU、TPU
参考网页:深度学习中,CPU、GPU、NPU、FPGA如何发挥优势-信息中心 (nuc.edu.cn)。
以人脸识别为例,其处理基本流程及对应功能模块所需的算力分布如下:

不同的应用阶段,其所需要的运算方式是不同的,我们之后讲解各自CPU、GPU、NPU、FPGA各自的原理、架构及性能特点。
CPU
CPU(Central Processing Unit)中央处理器,是一块超大规模的集成电路,主要逻辑架构包括控制单元Control,运算单元ALU和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的**总线(Bus)**。

CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以它在大规模并行计算能力上极受限制,而更擅长于逻辑控制。
GPU
GPU(Graphics Processing Unit),即图形处理器,是一种由大量运算单元组成的大规模并行计算架构,专为同时处理多重任务而设计。GPU中也包含基本的计算单元、控制单元和存储单元,但GPU的架构与CPU有所不同。

与CPU相比,CPU芯片空间的不到20%是ALU,而GPU芯片空间的80%以上是ALU。即GPU拥有更多的ALU用于数据并行处理,GPU处理神经网络数据远远高效于CPU。

总结GPU具有如下特点:
1 、多线程,提供了多核并行计算的基础结构,且核心数非常多,可以支撑大量数据的并行计算。
2、拥有更高的访存速度。
3、更高的浮点运算能力。
GPU虽然在并行计算能力上尽显优势,但并不能单独工作,GPU需要CPU的协同处理,神经网络模型的构建和数据流的传递还是在CPU上进行。
同时GPU存在功耗高,体积大的问题。性能越高的GPU体积越大,功耗越高,价格也昂贵,对于一些小型设备、移动设备来说将无法使用。
因此,一种体积小、功耗低、计算性能高、计算效率高的专用芯片NPU诞生了。
NPU
NPU (Neural Networks Process Units)神经网络处理单元。NPU工作原理是在电路层模拟人类神经元和突触,并且用深度学习指令集直接处理大规模的神经元和突触,一条指令完成一组神经元的处理。相比于CPU和GPU,NPU通过突触权重实现存储和计算一体化,从而提高运行效率。
NPU是模仿生物神经网络而构建的,CPU、GPU处理器需要用数千条指令完成的神经元处理,NPU只要一条或几条就能完成,因此在深度学习的处理效率方面优势明显。实验结果显示,同等功耗下NPU 的性能是 GPU 的 118 倍。与GPU一样,NPU同样需要CPU的协同处理才能完成特定的任务。
GPU、NPU对CPU的加速
GPU只是单纯的并行矩阵的乘法和加法运算,对于神经网络模型的构建和数据流的传递还是在CPU上进行。
CPU加载权重数据,按照代码构建神经网络模型,将每层的矩阵运算通过CUDA或OpenCL等类库接口传送到GPU上实现并行计算,输出结果;CPU接着调度下层神经元组矩阵数据计算,直至神经网络输出层计算完成,得到最终结果。

NPU与GPU加速不同,主要体现为每层神经元计算结果不用输出到主内存,而是按照神经网络的连接传递到下层神经元继续计算,因此其在运算性能和功耗上都有很大的提升。
CPU将编译好的神经网络模型文件和权重文件交由专用芯片加载,完成硬件编程。CPU在整个运行过程中,主要是实现数据的加载和业务流程的控制。构建网络模型的任务由NPU完成。

FPGA
FPGA(Field-Programmable Gate Array)是现场可编程门阵列,用户可以根据自身的需求进行重复编程。与 CPU、GPU 相比,具有性能高、功耗低、可硬件编程的特点。
FPGA基本原理是在芯片内集成大量的数字电路基本门电路以及存储器,而用户可以通过烧入FPGA 配置文件来定义这些门电路以及存储器之间的连线。这种烧入不是一次性的,可重复编写定义,重复配置。

对比小结
我们对比一下CPU/GPU/NPU/FPGA各自的特点。

CPU:70%晶体管用来构建Cache,还有一部分控制单元,计算单元少,适合逻辑控制运算。
GPU:晶体管大部分构建计算单元,运算复杂度低,适合大规模并行计算。主要应用于大数据、后台服务器、图像处理。
NPU:在电路层模拟神经元,通过突触权重实现存储和计算一体化,一条指令完成一组神经元的处理,提高运行效率。主要应用于通信领域、大数据、图像处理。
FPGA:可编程逻辑,计算效率高,更接近底层IO,通过冗余晶体管和连线实现逻辑可编辑。本质上是无指令、无需共享内存,计算效率比CPU、GPU高。主要应用于智能手机、便携式移动设备、汽车。
可以说,每种处理器都有它的优势和不足,在不同的应用场景中,需要根据需求权衡利弊,选择合适的芯片。
拓展
TPU:张量处理单元(TPU)是一种定制化的 ASIC 芯片,它由谷歌设计,专门用于机器学习工作负载。TPU 为谷歌的主要产品提供了计算支持,包括翻译、照片、搜索助理和 Gmail 等。Cloud TPU 将 TPU 作为可扩展的云计算资源,并为所有在 Google Cloud 上运行尖端 ML 模型的开发者与数据科学家提供计算资源。
TPU与同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。初代的TPU只能做推理,要依靠Google云来实时收集数据并产生结果,而训练过程还需要额外的资源;而第二代TPU既可以用于训练神经网络,又可以用于推理。
ASIC(Application Specific Integrated Circuit)专用集成电路,是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。ASIC在批量生产时与通用集成电路相比具有体积更小、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。
ASIC和FPGA相比,ASIC是专用集成电路,一旦设计完成后集成电路即固定。而FPGA是在阵列内集成大量数字电路基本门电路和存储器,开发人员可以通过烧写FPGA配置来定义电路,并且这种烧写是可更换的。
ASIC包括TPU和NPU等,指令集采用CSIS精简指令集。

采用专用计算核心的好处,一个16阶的矩阵乘法为例,在一个矩阵周期内,效率提升4096倍。

昇腾310和910芯片和达芬奇架构
昇腾芯片与英伟达H800、A800的比较
从通用性来讲,算力芯片有三种,专用的ASIC芯片,通用的GPU,还有介于专用和通用之间的FPGA。目前的AI加速芯片市场以通用性为主,GPU占到90%的市场份额。
在用途上,一种是训练芯片,用来训练大模型,算力和精度要求高;另一种是推理芯片,是在已经完成训练的模型上,根据输入数据反馈输出结果,算力和精度要求都低很多。
AI算力芯片折旧一般2-3年,最长不超过5年。从2019年开始,算力需求每10个月翻一番,产品更新迭代很快。目前的市场格局下,英伟达是绝对的龙头老大,拥有最先进的加速芯片H100和最高的市占率。
因为美国政府的制裁,英伟达不能直接向中国出口先进的算力芯片,只能提供性能阉割版的芯片,海外能用A100和H100,国内只能买A800和H800,从参数上看差了30%多性能,实际用下来大概差了一半。

昇腾(HUAWEI Ascend) 910是业界算力最强的AI处理器,基于自研华为达芬奇架构3D Cube技术,实现业界最佳AI性能与能效,架构灵活伸缩,支持云边端全栈全场景应用。算力方面,昇腾910完全达到设计规格,半精度(FP16)算力达到320 TFLOPS,整数精度(INT8)算力达到640 TOPS,功耗310W。
测试数据显示,昇腾910算力是英伟达V100的两倍,略超 “A100 80GB PCIe”版本。
目前,华为昇腾只能用于华为自身生态中的大模型业务,比如昇腾不能训练GPT-3,因为昇腾910不支持32位浮点,而目前大模型训练几乎都要使用32位的浮点,所以华为昇腾芯片只能利用华为开发的框架(如MindSpore),在加上优化好的大模型,比如盘古CV。
除了技术上的差距,国产GPU在生态建立方面仍不如英伟达完善。据一家国产GPU厂商销售人员透露,目前国内第一批大模型厂商使用的基本都是英伟达A100、A800的芯片,因为英伟达构建了完善的CUDA生态。“如果你用惯了这个生态,贸然换一个生态,意味着你的学习成本、试错成本、调试成本都会增加,自然没人会想要换了”。
早在2006年,英伟达就推出了计算平台CUDA,这是一个并行计算软件引擎,CUDA框架里集成了很多调用GPU算力所需的代码,工程师可以直接使用这些代码,无须一一编写。开发者可使用CUDA更高效地进行AI训练和推理,更好的发挥GPU算力。时至今日,CUDA已成为全球AI基础设施,主流的AI框架、库、工具都以CUDA为基础进行开发。
因此,对于国产芯片供应商来讲,哪怕能通过堆芯片的方式能堆出一个算力相当的产品,但软件适配与兼容让客户接受更难。此外,从服务器运营的角度,它的主板开销、电费、运营费,以及需要考虑的功耗、散热等问题,都会大大增加数据中心的运营成本。
但是,安全性和自主可控会是国内AI芯片的突破窗口。
达芬奇架构
达芬奇架构,是华为自研的面向AI计算特征的全新计算架构,具备高算力、高能效、灵活可裁剪的特性,是实现万物智能的重要基础。具体来说,达芬奇架构采用3D Cube针对矩阵运算做加速,大幅提升单位功耗下的AI算力,每个AI Core可以在一个时钟周期内实现4096个MAC操作,相比传统的CPU和GPU实现数量级的提升。
AI计算的核心是矩阵乘法运算,典型的神经网络模型计算量都非常大,这其中99%的计算都需要用到矩阵乘。达芬奇架构设计的核心:以最小的计算代价增加矩阵乘的算力,实现更高的AI能效。
Ascend 310 和 910 都属于NPU。其中,Da Vinci Core只是NPU的一个部分,Da Vinci Core内部还细分成很多单元,包括核心的3D Cube、Vector向量计算单元、Scalar标量计算单元等,它们各自负责不同的运算任务实现并行化计算模型,共同保障AI计算的高效处理。

矩阵乘是AI计算的核心,3D Cube负责完成矩阵乘法,Buffer L0A、L0B用于存储两个输入矩阵、L0C用于存储输出矩阵。
虽然Cube的算力很强大,但只能完成矩阵乘运算,还有很多计算类型要依靠Vector向量计算单元来完成。Vector的指令相对来说非常丰富,可以覆盖各种基本的计算类型和许多定制的计算类型。
Scalar标量运算单元负责AI Core的标量运算,功能上可以看作一个小CPU,完成整个程序的循环控制,分支判断,Cube、Vector等指令的地址和参数计算以及基本的算术运算等。
达芬奇架构具有灵活可扩展的特性,达芬奇架构能够满足端侧、边缘侧及云端的应用场景,可用于小到几十毫瓦,大到几百瓦的训练场景,横跨全场景提供最优算力。
以Ascend芯片为例,Ascend-Nano可以用于耳机电话等IoT设备的使用场景;Ascend-Tiny和Ascend-Lite用于智能手机的AI运算处理;在笔记本电脑等算力需求更高的便携设备上,由Ascend 310(Ascend-Mini)提供算力支持;而边缘侧服务器上则需要由Multi-Ascend 310完成AI计算;至于超复杂的云端数据运算处理,则交由算力最高可达256 TFLOPS@FP16的Ascend 910(Ascend-Max)来完成。
开发者在面对云端、边缘侧、端侧等全场景应用开发时,只需要进行一次算子开发和调试,就可以应用于不同平台,大幅降低了迁移成本。不仅开发平台语言统一,训练和推理框架也是统一的,开发者可以将大量训练模型放在本地和云端服务器,再将轻量级的推理工作放在移动端设备上,获得一致的开发体验。
初步认识自然语言处理
参考网页:什么是自然语言处理?看这篇文章就够了! - 知乎 (zhihu.com)、什么是自然语言处理 (NLP)?| NLP 完整指南 | Elastic、什么是自然语言处理?- NLP 简介 - AWS (amazon.com)。
基本定义
自然语言处理(Natural Language Processing,NLP)是计算机科学、人工智能和语言学领域的一个交叉学科,主要研究如何让计算机能够理解、处理、生成和模拟人类语言的能力,从而实现计算机与人类进行自然对话的能力。
自然语言处理的底层原理涉及多个层面,包括语言学、计算机科学和统计学等。它涉及对语言的结构、语义、语法和语用等方面的研究,以及对大规模语料库的统计分析和模型建立。基于 AI 的 NLP 涉及使用 Machine Learning 算法和技巧来处理、理解和生成人类语言。基于规则的 NLP 涉及创建一个可用来分析和生成语言数据的规则或模式的集合。统计学 NLP 涉及使用从大型数据集中获得的统计模型来分析语言并做出语言方面的预测。混合 NLP 将上述三种方法结合到一起。
流程逻辑
自然语言处理的流程逻辑通常包括以下几个步骤:
数据收集和预处理:获取和清洗原始语言数据,包括文本、语料库或语音数据;
分词和词法分析:将原始文本数据转换为适合模型输入的格式,如分词、去除停用词、词干提取等。
特征提取:将文本转换为计算机可以处理的向量形式,如词向量表示、句子向量表示等。常用的特征提取方法包括词袋模型、TF-IDF、词嵌入等。
模型训练:利用训练数据集,采用机器学习或深度学习方法训练自然语言处理模型。
模型评估:使用验证数据集评估模型的性能,如准确率、召回率、F1值等指标。
模型应用:将训练好的模型应用于实际问题,如文本分类、情感分析、机器翻译等任务。
实现方法
在实现自然语言处理时,首先需要考虑数据集的选择和预处理。数据集的选择和质量对于自然语言处理的效果有着很大的影响,因此需要选择合适的数据集,并进行数据清洗和预处理。
其次,采用一些自然语言处理工具。常用的自然语言处理工具包括NLTK、spaCy、Stanford CoreNLP等。这些工具包提供了很多自然语言处理的功能,如分词、词性标注、命名实体识别、句法分析等。
最后,选择合适的算法和模型。常用的算法包括朴素贝叶斯、支持向量机、决策树、随机森林等。同时,深度学习也成为自然语言处理中的主流技术,常用的模型包括卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)和Transformer等。
基于规则的 NLP
基于规则的 NLP主要依赖于预先编写的语法规则和词典来实现自然语言处理任务。这类方法在早期研究中占据主导地位,但由于其维护成本高且泛化能力有限,逐渐被基于统计的方法所取代。
以下是一个简单的Python代码示例,该示例使用基于规则的方法来识别文本中的动词,查找以”-ing”结尾的单词。
import re |

有许多工具和方法可以帮助我们实现基于规则的NPL,比如:
Natural Language Toolkit(NLTK)是一个流行的自然语言处理库,它提供了许多工具和函数,可用于实现基于规则和知识的自然语言处理算法;例如,我们可以使用NLTK中的词性标注器、实体识别器和句法分析器等工具来分析自然语言文本。
SpaCy是另一个流行的自然语言处理库,它提供了高效的自然语言处理工具和算法。spaCy中提供了一些强大的工具,包括词性标注器、实体识别器、依存关系分析器和句法分析器等。
知识图谱是一种表示知识的方式,它可以用于实现基于知识的自然语言处理算法。Python中有许多知识图谱的实现库,如Pyke和RDFLib等,可以帮助我们构建和管理知识图谱。
规则引擎是一种将规则映射到行动的软件,可以用于实现基于规则的自然语言处理算法。Python中有许多规则引擎的实现库,如Pyke和PyCLIPS等,可以帮助我们实现基于规则的自然语言处理算法。
统计学 NLP
基于统计的方法利用大量语料库来学习自然语言的规律。这类方法在20世纪80年代开始崛起,取得了一系列重要的成果。例如,统计机器翻译、隐马尔可夫模型等。
from sklearn.feature_extraction.text import CountVectorizer |

自然语言处理的业务应用
NLP 有广泛的业务应用:
聊天机器人和虚拟助手:用户可以与您的系统进行对话。这些是常见的客户服务工具。它们还能引导用户完成复杂的工作流,或者帮助用户在网上或解决方案中导航。
语义搜索:通常应用在电商领域,以生成产品推荐。它会分析搜索引擎并使用基于知识的搜索,以对关键词的上下文进行解码。它会解读用户意向,从而提供更相关的建议。
NER:识别文本中的信息以填写表格或者提高文本的可搜索性。教育机构可以使用它来分析学生习作并自动打分。不仅如此,文本转语音和语音转文本功能会提高信息的可访问性,让残障人士更轻松地进行沟通。
文本摘要:跨行业研究员能够将大型文档快速汇总成精简且便于理解的文本。金融行业可使用此技术来分析新闻和社交媒体内容,以帮助预测市场趋势。政府和法律行业使用此技术来从文档中提取关键信息。
神经网络结构搜索NAS
诞生背景
Deep Learning自从2016年发展到现在,越来越多的网络结构被研究出来解决不同领域的问题。传统的机器学习会遇到模型的调参问题,比如三层神经网络中隐层神经元的个数。优化这些超参数的方法主要是黑箱优化方法,比如分别为进化优化,贝叶斯优化和强化学习等。
单隐层的前馈神经网络最重要的超参数是隐层神经元数量,但是浅层神经网络的结构并不是只有单隐层的前馈神经网络一种,理论上任何链接结构都可以成为具有一定功能的神经网络,比如跨层链接和循环连接,比较典型的网络如循环神经网络(RNN),回声状态网络(ESN)等。如果将结构考虑进来 ,就还要涉及到将神经网络的结构映射到搜索空间的编码问题。
在模型规模扩大之后,超参数增多,优化问题就变得非常困难和庞大。传统方法遇到了许多问题:结构编码方式无法代表复杂的网络结构搜索空间,编码空间过大导致这些搜索算法无法收敛,深度学习模型训练时间太长导致黑箱优化方法的计算效率降低等。
如何在巨大的问题下找到一个网络模型的最优解,是神经网络结构搜索NAS要考虑的问题。2016年,Google发表论文Neural Architecture Search with Reinforcement Learning[1611.01578] Neural Architecture Search with Reinforcement Learning (arxiv.org),他们使用强化学习进行神经网络结构搜索(NAS),并在图像分类和语言建模任务上超越了此前手工设计的网络,从此开启了一个新的研究方向–神经架构搜索NAS。
NAS原理
NAS的意义在于解决深度学习模型的调参问题,是结合了优化和机器学习的交叉研究。它的核心思想是通过搜索空间来探索不同的网络结构,以找到在给定任务上性能最佳的神经网络模型。
NAS的主要研究问题可以大致分为三类:构建搜索空间,优化算法以及模型评估。
与之对应,神经网络结构搜索NAS通常包括以下步骤:定义搜索空间、选择搜索算法、评估与更新。
首先,需要定义神经网络结构的搜索空间,即指定各种可能的组件和连接方式。然后,使用搜索算法(如遗传算法、强化学习等)在搜索空间中进行探索和优化。每个搜索操作的结果都会被评估,通过性能指标(如准确率、速度、模型大小等)来度量网络结构的优劣。最后,根据评估结果更新搜索策略,以寻找更加优化的网络结构。
NAS构建搜索空间
NAS的研究重点之一就在于如何构造一个高效的搜索空间。
一开始的搜索空间的构造以链式结构为主,主要的思想是将不同的操作单元组合在一起,这样的搜索空间也被称为全局搜索空间。NAS需要调整每一层所作的操作和对应的参数,每一层可以是卷积、池化、线性变换等。这种结构的搜索空间比较灵活,但是计算代价很大。
为了尽量减少计算消耗,后来主流的研究方法集中在了模块化网络结构并进行拼装(cell-based search space)。简单描述就是我们整块的将网络结构进行组合,每一块具备一项功能,由NAS来决定每一块的位置和参数,这样搜索空间就降低了很多。这些cell都是一个小型的有向无环图(DAG),用来抽取和传递特征。
基于cell的方法可以有效的缩减搜索空间,如果cell作为一个层次,那么组合cell的结构也可以被看做一个层次,因此有研究人员提出了基于**分层(Hierarchical)**的思想。
有研究人员想到可以借助模型迁移的思想,减少每次迭代开始的时候的训练次数。在每次训练开始后,只用少量样本训练网络,也因此被称为one-short leanring。比较出名的策略就是权重共享(weight sharing),这里每一个待评估的结构都会被当做一个整体网络的子网络,因此这些子网络中的权重可以通过整体网络来实现共享。那么只需要对整体网络的权重进行预训练就可以了。
NAS搜索算法-遗传算法
原理:遗传算法是一种模拟自然选择和遗传学原理的优化搜索算法。在NAS中,遗传算法将神经网络架构表示为染色体(或称为基因型),通过选择、交叉(或称为杂交)和变异等操作,不断迭代进化,以寻找性能更优的神经网络架构。
操作过程:首先,随机生成一个初始的神经网络架构种群;然后,根据某种评估准则(如验证集上的性能)对种群中的个体进行排序和选择;接着,对选中的个体进行交叉和变异操作,生成新的神经网络架构;最后,不断重复上述过程,直到满足停止条件(如达到最大迭代次数或找到满足性能要求的架构)。
NAS搜索算法-强化学习
原理:强化学习是一种通过与环境交互来学习的算法。在NAS中,强化学习将神经网络架构的搜索过程看作是一个序列决策问题。通过定义一个奖励函数来评估每个神经网络架构的性能,并基于奖励函数来更新搜索策略,从而逐渐发现性能更优的神经网络架构。
操作过程:首先,定义一个神经网络架构的搜索空间和一个奖励函数;然后,使用一个智能体(如神经网络)来与环境(即搜索空间)进行交互,并根据奖励函数来更新搜索策略;接着,不断重复上述过程,直到找到满足性能要求的神经网络架构。
NAS模型评估
模型评估占了NAS大部分的时间消耗,有方法来优化这个过程。
首先是lower fidelity。这类方法缩短训练时间,用数据集的子集来训练或用低像素的数据来训练等。然而问题是对于结构的排序差异会随着数据的差异而扩大。
还有**代理模型(Surrogate)**,由于原模型的评估比较耗时,那么可以建立一个代理模型对个体进行估计,从而降低评估消耗。贝叶斯优化的中的模型评估就是一种代理模型。但是问题是:模型越精确就会更耗时,模型不精确则无法准确的估计好坏,这是一个trade-off问题。
NAS的应用
总的来说,神经网络结构搜索是一种强大的工具,它可以帮助深度学习从业者在不同的任务和数据集上,寻找出最优的神经网络结构,从而提高模型的性能和泛化能力。
在图像识别领域,利用高效神经网络架构搜索算法,能够搜索出适用于特定数据集和任务的高效神经网络结构,提高图像识别模型的性能和准确率。
在自然语言处理领域,通过神经网络架构搜索,能够找到适用于文本分类、情感分析等任务的高效神经网络结构,提高自然语言处理模型的性能和泛化能力。
昇腾AI创新大赛
河南区域赛高校报名通道【河南赛区-高校赛道】昇腾AI创新大赛2024-昇腾社区 (hiascend.com)。
2023获奖作品投票昇腾AI创新大赛-昇腾社区 (hiascend.com)。
2023国奖获奖名单昇腾AI创新大赛-昇腾社区 (hiascend.com)。