一种缓存深度学习的边缘计算架构转让专利

申请号 : CN202110053894.0

文献号 : CN112732591B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 苏充则严伟玮范小朋

申请人 : 杭州中科先进技术研究院有限公司

摘要 :

本发明公开了一种缓存深度学习的边缘计算架构。该架构包括数据采集模块、缓存单元、深度学习计算单元、控制模块和内存单元,其中缓存单元用于存储经训练的深度学习模型;数据采集模块用于采集待识别的数据;深度学习计算单元用于对接收的待识别数据进行深度学习模型的识别;控制模块用于管理缓存单元中数据的地址,并控制缓存单元深度学习模型数据的读取,以及根据深度学习模型的识别结果确定目标数据的存储或传输。本申请通过在前端设备/边缘设备中添加GPU或NPU模块,并且该模块和数据采集模块共享同一缓存,能够快速地实现深度学习的应用。

权利要求 :

1.一种缓存深度学习的边缘计算装置,包括数据采集模块、缓存单元、深度学习计算单元、控制模块和内存单元,其中缓存单元用于存储经训练的深度学习模型;数据采集模块用于采集待识别的数据;深度学习计算单元用于对接收的待识别数据进行深度学习模型的识别;控制模块用于管理缓存单元中数据的地址,并控制缓存单元深度学习模型数据的读取,以及根据深度学习模型的识别结果确定目标数据的存储或传输;

其中,所述缓存单元是L2 Cache,数据采集模块和边缘设备中的图形处理器GPU或神经网络处理器NPU共享该缓存单元,所述深度学习计算单元中设有L1 Cache,所述控制模块根据以下步骤控制各模块之间的信息交互:将所述数据采集模块采集的数据以数字信号的形式存储在缓存L2 Cache中;

对保存在缓存L2 Cache的数据进行校验,如判断为是待识别的新数据,控制模块验证缓存L2 Cache中的深度学习模型,如验证成功,控制模块根据缓存L2 Cache中的深度学习模型,将数据分配给所述深度学习计算单元并控制缓存L2 Cache到所述深度学习计算单元的缓存L1 Cache的存储任务,以进行深度学习的识别运算;

在控制模块判断深度学习的识别运算已完成的情况下,根据识别结果,对目标数据进行存储或传输;

其中,所述根据识别结果对目标数据进行存储或传输包括:

控制模块根据深度学习的识别结果来确认目标数据,如果数据是目标数据,则将目标数据从缓存L2 Cache到所述内存单元中的存储,如果数据不是目标数据,则将数据从缓存L2 Cache中删除。

2.根据权利要求1所述的缓存深度学习的边缘计算装置,其特征在于,根据深度学习模型的应用需求,将所述内存单元中的数据保存到硬盘或者通过网络进行传输。

3. 根据权利要求1所述的缓存深度学习的边缘计算装置,其特征在于,所述缓存单元包括L2 Cache、L1 Cache和L0Cache。

4.根据权利要求1所述的缓存深度学习的边缘计算装置,其特征在于,所述深度学习计算单元包括GPU、NPU或神经网络引擎中的计算单元。

5.根据权利要求1所述的缓存深度学习的边缘计算装置,其特征在于,所述数据采集模块是图像数据采集设备或语音数据采集设备。

6.一种缓存深度学习的边缘计算方法,应用于边缘计算设备,该边缘计算设备包含权利要求1至5任一项所述的缓存深度学习的边缘计算装置。

说明书 :

一种缓存深度学习的边缘计算架构

技术领域

[0001] 本发明涉及计算机领域,更具体地,涉及一种缓存深度学习的边缘计算架构。

背景技术

[0002] 人工智能和深度学习的应用在很多领域都有着惊人的表现,例如语音识别、图像识别和自动驾驶等。在现阶段的语音识别、图像识别和自动驾驶等应用中,深度学习的应用通过云计算(Cloud)等方法实现,即待识别数据传输到服务器后,服务器通过运行深度学习模型得到识别结果。而前端设备/边缘设备(Edge)受硬件条件的限制,只有数据采集和数据传输的功能,深度学习算法的运行要在服务器上实现。
[0003] 在普通的深度学习应用中,前端设备收集数据,数据在传输后在服务器中完成识别。在这个过程中,数据的传输和数据的移动会浪费较多时间,数据的安全性也会因为传输途径而受影响,对数据的识别结果也会有很大的滞后性;而在特殊的深度学习应用场景中,根据应用的需求,前端设备收集到的数据会有特定要求,即这些数据中有部分数据是目标数据,这些目标数据需要深度学习算法来识别,因为前端设备的硬件限制,前端设备无法进行人工智能或深度学习方法的运算,大量的非目标数据会一起被存储和传输。在这个过程中,大量的存储空间和网络传输资源会因为非目标数据而浪费。
[0004] 以物联网设备中摄像头的图像识别应用为例,对于NVIDIA公司的GPU来说,图片数据要经过内存、GPU显存和缓存Cache后,才能开始计算图像识别模型,其过程如图1所示。对于利用UMA(unified memory architecture)技术实现内存共享的芯片,如图2的Apple公司的M1芯片,CPU、GPU、NPU共用同一内存空间,图片数据要经过内存、Cache、Fabric后才能进行图形识别模型的计算。
[0005] 在现有技术中,加速深度学习的方案通常是对服务器间多层级共享缓存(cache)的研究或者是对神经网络计算芯片的研究。
[0006] 例如,中国专利申请CN202010637952.X公开了一种基于企业级超算场景的客户端多级缓存方法及系统,包括以下步骤:根据用户提交的训练任务,获取用户的UID和GID,对训练任务进行解析得到训练任务参数,在客户端创建相应的缓存目录;根据训练任务参数,按照优先级由高到低的顺序,从多级缓存中读取所需数据,多级缓存包括内存缓存、结合内存缓存与固定硬盘缓存的二级缓存和分布式存储系统;若为二级缓存,则将分布式存储系统中的数据同步缓存在与固态硬盘对应的缓存目录中。该申请采用多级缓存机制读取数据,可以加快深度学习模型训练速度,减轻分布式存储系统的压力,是一种使用多级缓存来处理多种应用的方法。
[0007] 又如,中国专利申请CN202010289197.0公开了一种将基于缓存的深度神经网络分布式部署在分散边缘设备上的方法。该方法先对神经网络进行划分,并在划分处前一层神经网络进行剪枝,然后在任务发起设备计算深度神经网络的一部分,将少量中间结果传输到其他边缘设备,并计算剩余的部分,除此之外缓存并重用边缘设备神经网络的中间结果,不同设备间可以共享缓存,从而减少边缘智能应用的延迟并减少神经网络对边缘设备性能的要求,特别是在边缘侧对类似数据发起智能任务请求时,可减少重复计算量,该申请是用共享缓存的方法来进行分布式计算。
[0008] 总之,以现在的方式实现人工智能或深度学习的应用,浪费了大量的时间和计算资源。

发明内容

[0009] 本发明的目的是克服上述现有技术的缺陷,提供一种缓存深度学习的边缘计算架构,以解决实现人工智能或深度学习应用过程中滞后的问题。
[0010] 根据本发明的第一方面,提供一种缓存深度学习的边缘计算架构。该架构包括数据采集模块、缓存单元、深度学习计算单元、控制模块和内存单元,其中缓存单元用于存储经训练的深度学习模型;数据采集模块用于采集待识别的数据;深度学习计算单元用于对接收的待识别数据进行深度学习模型的识别;控制模块用于管理缓存单元中数据的地址,并控制缓存单元深度学习模型数据的读取,以及根据深度学习模型的识别结果确定目标数据的存储或传输。
[0011] 根据本发明的第二方面,提供一种缓存深度学习的边缘计算方法,应用于边缘计算设备,该边缘计算设备包含本发明提供的缓存深度学习的边缘计算架构。
[0012] 与现有技术相比,本发明的优点在于,所提出的缓存加速深度学习的边缘计算新型架构能够快速地对新采集到的数据进行识别,效率高并且适用性强;避免了数据传输的过程,省去了或极大程度地减少了数据传输时间;可根据不同的应用需求通过深度学习模型/神经网络模型识别目标数据,在经过特定的深度学习模型识别后可存储目标数据或者传输目标数据,在很大程度上过滤了非目标数据,也避免了因为非目标数据的存在而产生的存储资源的浪费和传输资源的浪费。
[0013] 通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

[0014] 被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。
[0015] 图1是现有计算机(或服务器)结构中实现图像识别过程的示意图;
[0016] 图2是Apple公司M1芯片结构示意图;
[0017] 图3是根据本发明一个实施例的实现深度学习应用的结构图;
[0018] 图4是根据本发明一个实施例的针对无人机目标检测的架构图;
[0019] 图5是根据本发明一个实施例的针对无人机目标检测的流程图。

具体实施方式

[0020] 现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
[0021] 以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
[0022] 对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
[0023] 在本文示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。
[0024] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
[0025] 针对现阶段GPU等计算机设备的结构特点,本发明提出一种缓存加速深度学习的边缘计算新型架构。在这种结构中,缓存直接连接GPU或NPU,使缓存数据可以直接用于深度学习方法的计算。本发明通过将缓存数据直接用于深度学习方法的计算,省去了多步数据存储和传输过程,并可以实现在前端设备中,直接通过缓存数据计算深度学习算法后得到相应的识别结果,最终快速地实现人工智能的应用。
[0026] 本发明通过在前端设备/边缘设备中添加GPU或NPU模块,并且该模块和数据采集模块共享同一缓存,以快速地实现深度学习的应用。具体地,参见图3所示,该实施例的缓存深度学习的边缘计算架构包括数据采集模块、缓存Cache、深度学习计算单元(或称神经网络计算单元)、控制模块、内存DRAM、硬盘存储或网络传输。
[0027] 数据采集模块只包括数据采集传感器,并不包括缓存和内存。例如,在图像识别或自动驾驶的应用中,数据采集模块的传感器设备是光传感器(图像数据采集设备);在语音识别应用中,数据采集模块的传感器设备是MEMS麦克风(语音数据采集设备)。
[0028] 缓存Cache包括多种类型,例如L2 Cache、L1 Cache、L0 Cache等,以L2 Cache为主。由于CPU、GPU、NPU或Neural Engine(神经网络引擎)的型号和种类很多,这些处理单元中可包含不同规格的L2 Cache、L1Cache、L0 Cache等缓存类型,本发明对此不作限定。缓存Cache存储的内容包括深度学习框架或方法、与深度学习框架相对应的模型(训练后的模型)。深度学习框架或方法包括卷积神经网络、循环神经网络、生成对抗网络、深度强化学习等任意类型。为清楚起见,本文将缓存的深度学习框架或方法,也统称为深度学习模型(经训练获得)。
[0029] 深度学习计算单元是指GPU、NPU或Neural Engine中的计算单元。例如,现阶段NVIDIA公司GPU中的图形处理簇Graphics Processing Cluster(GPC),其包含多个流多处理器Streaming Multiprocessor(SM);或者AMD公司GPU中的双计算单元Dual Compute Unit(DCU)。由于GPU、NPU或Neural Engine型号和种类很多,GPU、NPU或Neural Engine的架构也在实时更新和变化,所以不能指定某种或列举全部的GPU、NPU或Neural Engine中的计算单元。
[0030] 控制模块(Controller)用于管理缓存Cache中数据的地址;控制缓存Cache中数据的读取。例如,合理分配缓存L2 Cache中数据与缓存L1 Cache中的数据交互;读取缓存L2 Cache中深度学习框架和与深度学习框架相对应的模型。
[0031] 内存DRAM与缓存Cache具有信息交互。例如,在深度学习计算单元对新数据进行深度学习模型的识别后,内存DRAM可以从缓存Cache中保存数据。
[0032] 硬盘存储或网络传输与内存DRAM具有信息交互。例如,根据应用的需求,在内存DRAM中的数据可以保存到硬盘(SSD、机械硬盘、U盘、SD等)或者通过网络(光纤、5G、WiFi、射频专用网等)进行传输。
[0033] 进一步地,以无人机(Drones/Unmanned Aerial Vehicle(UAV))中的图像识别为例说明所提供架构中模块和模块之间具体的流程。现阶段无人机已经在很多行业代替人力劳动,无人机可以通过实时传输图像数据来辅助实现实时监控的任务。在这个过程中,无人机没有识别目标物体的能力,在目标检测和故障检测的应用中,无人机只能收集图像数据,而识别目标物体的能力还需要人工判别或者通过服务器运行深度学习模型识别来实现。
[0034] 具体地,在无人机图像识别的实例中,目标检测为深度学习的特定应用,根据深度学习中目标检测方法(如Faster‑RCNN,SSD,YOLO等)来说明所提供架构中具体使用的硬件设备。
[0035] 详细的架构图如图4所示,其中,数据采集模块是光传感器。缓存Cache包括L2 Cache、L1 Cache,存储的内容包括深度学习框架或方法(如目标检测方法SSD)、与深度学习框架相对应的模型(训练后的模型)。深度学习计算单元是多个GPU中计算单元图形处理簇(GPC),其中每个图形处理簇(GPC)包含多个流多处理器(SM)。
[0036] 结合图4的架构,在无人机图像识别的实例中,以图像数据的采集为起始点,在经过深度学习模型识别等过程后,以将目标数据保存在硬盘或网络传输为结束,流程图如图5所示,具体包括如下步骤:
[0037] 步骤S510,采集图像数据。
[0038] 例如,具体包括:
[0039] 步骤S511,通过图像采集设备光传感器采集图像数据,作为新数据A;
[0040] 步骤S512,将图像数据(新数据A)以数字信号的形式存储在缓存L2 Cache中。
[0041] 步骤S520,对于采集到的图像数据,通过控制模块进行缓存L2 Cache和深度学习计算单元之间的数据传输,并进行深度学习方法的识别运算。
[0042] 具体过程为:
[0043] 步骤S521,步骤S510中的图像数据(新数据A)保存在缓存L2 Cache后,控制模块进行数据校验,即判断数据A是否为新数据,如果数据A为新数据,则进行下一步骤(步骤S522);否则退回上一步骤(步骤S510);
[0044] 步骤S522,控制模块验证缓存L2 Cache中的深度学习框架和深度学习模型,默认情况下,深度学习框架和深度学习模型已经存储在存L2 Cache中;如果深度学习框架和深度学习模型的校验失败,则无法进行下步操作。在本发明实施例中,存储在存L2 Cache中的深度学习框架和深度学习模型可以通过内存DRAM更新和替换;
[0045] 步骤S523,控制模块根据缓存L2 Cache中的深度学习框架、深度学习模型,将图像数据(新数据A)进行合理分配给不同的深度学习计算单元:图形处理簇(GPC)进行深度学习方法的识别运算;这个过程中控制模块会控制缓存L2 Cache完成图像数据(新数据A)到特定的流多处理器中缓存L1 Cache的存储任务(其中缓存L1 Cache在深度学习计算单元:图形处理簇(GPC)下的流多处理器(SM)中),并开始进行深度学习方法的识别运算,即控制模块会开始深度学习计算单元:图形处理簇Graphics Processing Cluster(GPC)的运算;
[0046] 步骤S524,控制模块判断深度学习方法的识别运算是否完成,如果深度学习计算单元已经完成深度学习方法的识别运算,则进行下一步骤(步骤S530);如果深度学习计算单元并未完成深度学习方法的识别运算,则等待深度学习计算单元完成深度学习方法的识别运算,即再次进行本步骤(步骤S524)。
[0047] 步骤S530,根据深度学习计算单元完成深度学习方法识别运算后的识别结果,对目标数据进行存储或传输。
[0048] 例如,具体过程包括:
[0049] 步骤S531,控制模块对深度学习方法识别运算后的识别结果来确认目标数据,如果图像数据(新数据A)为目标数据,则进行下一步骤(步骤S532);如果图像数据(新数据A)不是目标数据,则将图像数据(新数据A)从缓存中删除;
[0050] 步骤S532,将目标数据图像数据(新数据A)进行从缓存L2 Cache到内存DRAM中的存储,根据具体的应用需求,将目标数据图像数据(新数据A)完成从内存DRAM到硬盘(SSD、机械硬盘、U盘、SD等)的存储或者通过网络(光纤、5G、WiFi、射频专用网等)进行传输。整个过程结束,并返回最初状态(步骤S510)等待下一轮过程开始。
[0051] 本发明的架构在无人机图像识别—物体检测的实例中,只有(数据采集模块、控制模块、缓存L2 Cache和深度学习计算单元)四个模块,具有模块少、识别快、能耗低等特点。根据本发明的架构特点,将新采集到的图像数据直接进行深度学习方法—物体检测的识别,可以对数据提供最快速的深度学习模型的识别,并根据识别结果对目标图像数据进行保存,从而避免了图像数据因为非目标数据而导致内存存储资源和网络传输资源的浪费。
[0052] 在无人机等前端设备/边缘设备(Edge)中,由于硬件成本和保证设备的高效性,模块少、识别快、能耗低的结构是最优的选择。在很多深度学习方法的应用中,很多数据中并没有包含目标数据,例如在深度学习应用在电网设备破损检测中,图像数据中电网设备完好的数据与电网设备破损的数据比例不足10:1,这样的比例说明有极大一部分数据是非目标数据,因为这些非目标数据的存在而浪费了多于91%的存储空间和网络传输资源。
[0053] 综上,现有技术通常是对服务器间多层级共享缓存(cache)的研究或者是对神经网络计算芯片的研究,并没有针对前端设备/边缘设备(Edge)数据识别结果的滞后问题提出新的架构设计。本发明通过数据采集模块将采集到的新数据存入缓存并直接将该缓存中的新数据用于深度学习计算的架构,即采集到的数据只经过采集模块、缓存、深度学习计算单元,并未经过内存,在深度学习计算单元运行深度学习模型识别完后,数据才存储在内存中。前端设备/边缘设备(Edge)/数据采集设备中采用本发明架构,可以实现提高深度学习的效率和适用性。
[0054] 需要说明的是,本发明中通过数据采集模块将采集到的新数据存入缓存并直接将该缓存中的新数据用于深度学习计算的架构,没有指定特定的硬件设备或者芯片;深度学习方法和深度学习模型不仅仅限于某一种深度学习方法/框架和深度学习模型,深度学习方法不仅限提到的方法(Faster‑RCNN、SSD、YOLO等);实现深度学习框架不仅限于Tensor Flow或Pytorch等。
[0055] 本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
[0056] 计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD‑ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0057] 这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0058] 用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++、Python等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
[0059] 这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0060] 这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0061] 也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0062] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。
[0063] 以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本发明的范围由所附权利要求来限定。