
深度学习定义:欣顿(Hinton)等提出的一种研究信息的最佳表示及其获取方法的技术,在神经网络或信念网络的情况下是对基于深层结构或网络表示的输入输出间映射进行机器学习的过程。
学科:计算机科学技术_人工智能_神经网络
相关名词:数据挖掘 人工智能 机器学习
深度学习相关
深度学习(deep learning),属于机器学习(machine learning)的学术、工程领域研究中一个新的方向,目的是实现人工智能(artificial intelligence)的普及化。
深度学习的具体过程可简述为:挖掘所给样本数据的内在规律与联系,提取、分析样本的特征信息,如图像、文本和声音,处理数据信息并发出指令,控制机器的行为,使机器具有类似于人类的学习、分析、识别、处理等能力。
深度学习是一类模式分析方法的统称,就具体研究内容而言,大致有卷积神经网络、基于多层神经元的自编码神经网络和深度置信网络三类。
目前,深度学习在多个领域取得了很大成果,如数据挖掘、机器翻译、语音识别、人脸支付、推荐服务、个性化搜索。深度学习可使机器高度模仿人类社会的具体活动,对很多复杂的识别模式很有帮助,促进了蓝海大脑深度学习服务器等相关人工智能领域的发展。(西北工业大学副教授 周竞涛)深度学习目前的应用领域很多,主要是计算机视觉和自然语言处理,以及各种预测等。对于计算机视觉,可以做图像分类、目标检测、视频中的目标检测等,对于自然语言处理,可以做语音识别、语音合成、对话系统、机器翻译、文章摘要、情感分析等。
对于刚入行深度学习,想从事人工智能工业应用和研发的小白来说,选择一个适合自己的深度学习框架显得尤为重要。那么在选择深度学习框架的时候,要注意哪些内容呢
通常我们在选择框架时要考虑易用性、性能、社区、平台支持等问题。初学者应该考虑容易上手的框架,偏工业应用的开发者可以考虑使用稳定性高、性能好的框架,偏研究性的开发者,一般选择易用而且有领先的模型基线的框架。
目前这个阶段,TensorFlow因为背靠谷歌公司这座靠山,再加上拥有庞大的开发者群体,而且采用了称为“可执行的伪代码”的Python语言,成为最受欢迎的主流框架之一。一些外围的第三方库(如Keras、TFLearn)也基于它实现了很多成果,Keras还得到TensorFlow官方的支持。TensorFlow支持的上层语言也在逐渐扩大,对于不同工程背景的人转入的门槛正在降低。
因此,对于刚入行深度学习的小白,TensorFlow是一个非常好的选择,掌握TensorFlow对以后的求职发展很有帮助。
为了让大家更快地掌握深度学习技术,成为人工智能领域高端人才,中公教育联合中科院自动化研究所专家,强力推出人工智能《深度学习》,让大家学有所成、真正掌握机器学习模型以及算法背后的原理。蓝海大脑深度学习液冷服务器研究人员表示:StellarX 是一款由 OVA 驱动的元宇宙创建软件,无需任何编程知识便可使用该软件。该 3D 创作解决方案由 AI 驱动,目前可在电脑桌面上和扩展现实(XR)中使用。非编程人员可以利用该软件,通过简单的拖放 *** 作,构建沉浸式工作场景。
StellarX 目前可在 Steam/Steam XR 上使用,并且即将在 Meta Quest Store 发布。NVIDIA CloudXR 赋能 StellarX 进行无线流式传输,可助力各行业的业务团队不受线缆束缚,持续在元宇宙中进行创作、协作和互动。
StellarX 首席执行官 Harold Dumur 表示:“‘无线自由’如同手套适合戴在手上一般,适用于需要进行持续或者突然移动的沉浸式培训。我们在为魁北克市的警察、医疗和消防单位开发高保真 XR 模拟后,意识到无线模式可助力改进此类培训课程。因此,在测试了各种 XR 流式传输解决方案后,我们最终决定使用 CloudXR 作为我们的流式传输方案。”
此前,StellarX 与合作伙伴 LCI LX 共同进行了无线流式传输测试。双方为 ENCQOR 5G 开发了一个以时尚史为内容的 XR 教育课程,学生可以通过与 3D 博物馆内的道具进行互动来学习相关内容。借助 NVIDIA CloudXR SDK,基于强大的 NVIDIA RTX GPU 的驱动,StellarX 开发的这门课程在 5G 网络上实现了流式传输。
CloudXR 支持功能将持续赋能 StellarX,例如通过头显提供高端 XR 体验、降低本地硬件要求、保持低网络延迟等。个人觉得现在市面上的风冷已经不能满足深度学习GPU服务器的散热要求,需要转向新的技术以此满足深度学习训练服务器散热的需求。蓝海大脑液冷服务器 HD210 H系列突破传统风冷散热模式,采用风冷和液冷混合散热模式——服务器内主要热源 CPU 利用液冷冷板进行冷却,其余热源仍采用风冷方式进行冷却。通过这种混合制冷方式,可大幅提升服务器散热效率,同时,降低主要热源 CPU 散热所耗电能,并增强服务器可靠性。经检测,采用液冷服务器配套基础设施解决方案的数据中心年均 PUE 值可降低至 12 以下。是个不错的选择⌄
作者 | Python语音识别
来源 | 涛哥聊Python
虽然我们大多数人都惊叹为什么DL这么好?在使用大量数据进行训练时,它在准确性方面非常出色。近几年随着深度学习算法的发展,出现了很多深度学习的框架,这些框架各有所长,各具特色。下面将为大家介绍2019年最受欢迎的十大深度学习框架。
TensorFlow谷歌的Tensorflow可以说是当今最受欢迎的深度学习框架。Gmail,Uber,Airbnb,Nvidia以及其他许多知名品牌都在使用。TF是目前深度学习的主流框架,Tensorflow主要特性:
TensorFlow支持python、JavaScript、C ++、Java和Go,C#和Julia等多种编程语言。 TF不仅拥有强大的计算集群,还可以在iOS和Android等移动平台上运行模型。 TF编程入门难度较大。初学者需要仔细考虑神经网络的架构,正确评估输入和输出数据的维度和数量。 TF使用静态计算图进行 *** 作 。也就是说我们需要先定义图形,然后运行计算,如果我们需要对架构进行更改,我们会重新训练模型。选择这样的方法是为了提高效率,但是许多现代神经网络工具能够在学习过程中考虑改进而不会显着降低学习速度。在这方面,TensorFlow的主要竞争对手是PyTorch 。TensorFlow优点:
它非常适合创建和试验深度学习架构,便于数据集成,如输入图形,SQL表和图像。 它得到谷歌的支持,这就说明该模型短期内不会被抛弃,因此值得投入时间来学习它。 PyTorchTensorflow之后用于深度学习的主要框架是PyTorch。PyTorch框架是Facebook开发的,已被Twitter和Salesforce等公司使用。
PyTorch基本特性:
与TensorFlow不同,PyTorch库使用动态更新的图形进行 *** 作 。这意味着它可以在流程中更改体系结构。 在PyTorch中,您可以使用标准调试器 ,例如pdb或PyCharm。PyTorch优点:
训练神经网络的过程简单明了。同时,PyTorch支持数据并行和分布式学习模型,并且还包含许多预先训练的模型。 PyTorch更适合小型项目和原型设计。 SonnetSonnet深度学习框架是建立在TensorFlow的基础之上。它是DeepMind用于创建具有复杂架构的神经网络。
Sonnet基本特性:
面向对象的库,在开发神经网络(NN)或其他机器学习(ML)算法时更加抽象。 Sonnet的想法是构造对应于神经网络的特定部分的主要Python对象。此外,这些对象独立地连接到计算TensorFlow图。分离创建对象并将其与图形相关联的过程简化了高级体系结构的设计。Sonnet优点:
Sonnet的主要优点是可以使用它来重现DeepMind论文中展示的研究,比Keras更容易,因为DeepMind论文模型就是使用Sonnet搭建的。 KerasKeras是一个机器学习框架,如果您拥有大量数据和/或你想快速入门深度学习,那么Keras将非常适合学习。Keras是TensorFlow高级集成APi,可以非常方便的和TensorFlow进行融合。这是我强烈推荐学习的一个库。
Keras基本特性:
除了Tensorflow之外,Keras还是其他流行的库(如Theano和CNTK)的高级API。 在Keras中更容易创建大规模的深度学习模型,但Keras框架环境配置比其他底层框架要复杂一些。Keras优点:
对于刚刚入门的人来说,Keras是最好的深度学习框架。它是学习和原型化简单概念的理想选择,可以理解各种模型和学习过程的本质。 Keras是一个简洁的API。 可以快速帮助您创建应用程序。 Keras中代码更加可读和简洁。 Keras模型序列化/反序列化API,回调和使用Python生成器的数据流非常成熟。顺便说一下TensorFlow和Keras的对比:
PS:Tensorflow处于底层框架:这和MXNet,Theano和PyTorch等框架一样。包括实现诸如广义矩阵 - 矩阵乘法和诸如卷积运算的神经网络原语之类的数学运算。
Keras处于高度集成框架。虽然更容易创建模型,但是面对复杂的网络结构时可能不如TensorFlow。
MXNetMXNet是一种高度可扩展的深度学习工具,可用于各种设备。虽然与TensorFlow相比,它似乎没有被广泛使用,但MXNet的增长可能会因为成为一个Apache项目而得到提升。
MXNet基本特性:
该框架支持多种语言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多个GPU和许多机器上非常有效地并行计算。MXNet优点:
支持多个GPU(具有优化的计算和快速上下文切换) 清晰且易于维护的代码(Python,R,Scala和其他API) 快速解决问题的能力(对于像我这样的深度学习新手至关重要)虽然它不像TF那么受欢迎,但MXNet具有详细的文档并且易于使用,能够在命令式和符号式编程风格之间进行选择,使其成为初学者和经验丰富的工程师的理想选择。
GLUONGluon是一个更好的深度学习框架,可以用来创建复杂的模型。GLUON基本特性:
Gluon的特殊性是具有一个灵活的界面,简化了原型设计,构建和培训深度学习模型,而不会牺牲学习速度。 Gluon基于MXNet,提供简单的API,简化深度学习模型的创建。 与PyTorch类似,Gluon框架支持使用动态图表 ,将其与高性能MXNet相结合。从这个角度来看,Gluon看起来像是分布式计算的Keras非常有趣的替代品。GLUON优点:
在Gluon中,您可以使用简单,清晰和简洁的代码定义神经网络。 它将训练算法和神经网络模型结合在一起,从而在不牺牲性能的情况下提供开发过程的灵活性。 Gluon可以定义动态的神经网络模型,这意味着它们可以动态构建,使用任何结构,并使用Python的任何本机控制流。 SWIFT当你听到Swift时,您可能会考虑iOS或MacOS的应用程序开发。但是如果你正在学习深度学习,那么你一定听说过Swens for Tensorflow。通过直接与通用编程语言集成,Swift for TensorFlow可以以前所未有的方式表达更强大的算法。SWIFT基本特性:
可以轻松获得可微分的自定义数据结构。 下一代API 。通过实践和研究获得的新API更易于使用且更强大。 在TensorFlow的基础上 ,Swift API为您提供对所有底层TensorFlow运算符的直接调用。 基于Jupyter、LLDB或者Swift in Colab的编程工具提高了您的工作效率。SWIFT优点:
如果动态语言不适合您的任务,那么这将是一个很好的选择。当你训练运行了几个小时,然后你的程序遇到类型错误,那么使用Swift,一种静态类型语言。您将看到代码错误的地方。 Chainer直到CMU的DyNet和Facebook的PyTorch出现之前,Chainer是动态计算图或网络的领先神经网络框架,它允许输入数据长度不一致。chainer基本特性:
Chainer代码是在Numpy和CuPy库的基础之上用纯Python编写的, Chainer是第一个使用动态架构模型的框架。Chainer优点:
通过自己的基准测试,Chainer明显比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的测试组中最慢的。 比TensorFlow更好的GPU和GPU数据中心性能。最近Chainer成为GPU数据中心性能的全球冠军。 DL4J那些使用Java或Scala的人应该注意DL4J(Deep Learning for Java的简称)。DL4J的基本特性:
DL4J中的神经网络训练通过簇的迭代并行计算。 该过程由Hadoop和Spark架构支持。 使用Java允许您在Android设备的程序开发周期中使用。DL4J优点:
如果您正在寻找一个良好的Java深度学习框架,这会是一个非常好的平台。 ONNXONNX项目诞生于微软和Facebook,旨在寻找深度学习模型呈现的开放格式。ONNX简化了在人工智能的不同工作方式之间传递模型的过程。因此ONNX具有各种深度学习框架的优点。
ONNX基本特性:
ONNX使模型能够在一个框架中进行训练并转移到另一个框架中进行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,并且还有许多其他常见框架和库的连接器。ONNX优点:
对于PyTorch开发人员来说,ONNX是一个好的选择。但是对于那些喜欢TensorFlow的人来说,Keras等可能好一点。 总结那么您应该使用哪种深度学习框架?下面是几点建议:
如果你刚刚开始学习,那么最好的选择是Keras 。 出于研究目的,请选择PyTorch 。 对于生产,您需要关注环境。因此对于Google Cloud,最好的选择是TensorFlow ,适用于AWS - MXNet和Gluon 。 Android开发人员应该关注D4LJ ,对于iOS来说, Core ML会破坏类似的任务范围。 最后, ONNX将帮助解决不同框架之间的交互问题。搭建深度学习后台服务器
我们的Keras深度学习REST API将能够批量处理图像,扩展到多台机器(包括多台web服务器和Redis实例),并在负载均衡器之后进行循环调度。
为此,我们将使用:
KerasRedis(内存数据结构存储)
Flask (Python的微web框架)
消息队列和消息代理编程范例
本篇文章的整体思路如下:
我们将首先简要讨论Redis数据存储,以及如何使用它促进消息队列和消息代理。然后,我们将通过安装所需的Python包来配置Python开发环境,以构建我们的Keras深度学习REST API。一旦配置了开发环境,就可以使用Flask web框架实现实际的Keras深度学习REST API。在实现之后,我们将启动Redis和Flask服务器,然后使用cURL和Python向我们的深度学习API端点提交推理请求。最后,我们将以对构建自己的深度学习REST API时应该牢记的注意事项的简短讨论结束。
第一部分:简要介绍Redis如何作为REST API消息代理/消息队列
1:Redis可以用作我们深度学习REST API的消息代理/消息队列
Redis是内存中的数据存储。它不同于简单的键/值存储(比如memcached),因为它可以存储实际的数据结构。今天我们将使用Redis作为消息代理/消息队列。这包括:
在我们的机器上运行Redis
将数据(图像)按照队列的方式用Redis存储,并依次由我们的REST API处理
为新批输入图像循环访问Redis
对图像进行分类并将结果返回给客户端
文章中对Redis官网有一个超链接(>
第二部分:安装和配置Redis
官网做法,linux系统的安装:
自己的安装方法:
conda install redis开启方式相同:
resdis-server结果:
测试和原文的命令一致。
第三部分:配置Python开发环境以构建Keras REST API
文章中说需要创建新的虚拟环境来防止影响系统级别的python项目(但是我没有创建),但是还是需要安装rest api所需要依赖的包。以下为所需要的包。
第四部分:实现可扩展的Keras REST API
首先是Keras Redis Flask REST API数据流程图
让我们开始构建我们的服务器脚本。为了方便起见,我在一个文件中实现了服务器,但是它可以按照您认为合适的方式模块化。为了获得最好的结果和避免复制/粘贴错误,我建议您使用本文的“下载”部分来获取相关的脚本和图像。
为了简单起见,我们将在ImageNet数据集上使用ResNet预训练。我将指出在哪里可以用你自己的模型交换ResNet。flask模块包含flask库(用于构建web API)。redis模块将使我们能够与redis数据存储接口。从这里开始,让我们初始化将在run_keras_serverpy中使用的常量
我们将向服务器传递float32图像,尺寸为224 x 224,包含3个通道。我们的服务器可以处理一个BATCH_SIZE = 32。如果您的生产系统上有GPU(s),那么您需要调优BATCH_SIZE以获得最佳性能。我发现将SERVER_SLEEP和CLIENT_SLEEP设置为025秒(服务器和客户端在再次轮询Redis之前分别暂停的时间)在大多数系统上都可以很好地工作。如果您正在构建一个生产系统,那么一定要调整这些常量。
让我们启动我们的Flask app和Redis服务器:
在这里你可以看到启动Flask是多么容易。在运行这个服务器脚本之前,我假设Redis服务器正在运行(之前的redis-server)。我们的Python脚本连接到本地主机6379端口(Redis的默认主机和端口值)上的Redis存储。不要忘记将全局Keras模型初始化为None。接下来我们来处理图像的序列化:
Redis将充当服务器上的临时数据存储。图像将通过诸如cURL、Python脚本甚至是移动应用程序等各种方法进入服务器,而且,图像只能每隔一段时间(几个小时或几天)或者以很高的速率(每秒几次)进入服务器。我们需要把图像放在某个地方,因为它们在被处理前排队。我们的Redis存储将作为临时存储。
为了将图像存储在Redis中,需要对它们进行序列化。由于图像只是数字数组,我们可以使用base64编码来序列化图像。使用base64编码还有一个额外的好处,即允许我们使用JSON存储图像的附加属性。
base64_encode_image函数处理序列化。类似地,在通过模型传递图像之前,我们需要反序列化图像。这由base64_decode_image函数处理。
预处理
我已经定义了一个prepare_image函数,它使用Keras中的ResNet50实现对输入图像进行预处理,以便进行分类。在使用您自己的模型时,我建议修改此函数,以执行所需的预处理、缩放或规范化。
从那里我们将定义我们的分类方法
classify_process函数将在它自己的线程中启动,我们将在下面的__main__中看到这一点。该函数将从Redis服务器轮询图像批次,对图像进行分类,并将结果返回给客户端。
在model = ResNet50(weights="imagenet")这一行中,我将这个 *** 作与终端打印消息连接起来——根据Keras模型的大小,加载是即时的,或者需要几秒钟。
加载模型只在启动这个线程时发生一次——如果每次我们想要处理一个映像时都必须加载模型,那么速度会非常慢,而且由于内存耗尽可能导致服务器崩溃。
加载模型后,这个线程将不断轮询新的图像,然后将它们分类(注意这部分代码应该时尚一部分的继续)
在这里,我们首先使用Redis数据库的lrange函数从队列(第79行)中获取最多的BATCH_SIZE图像。
从那里我们初始化imageIDs和批处理(第80和81行),并开始在第84行开始循环队列。
在循环中,我们首先解码对象并将其反序列化为一个NumPy数组image(第86-88行)。
接下来,在第90-96行中,我们将向批处理添加图像(或者如果批处理当前为None,我们将该批处理设置为当前图像)。
我们还将图像的id附加到imageIDs(第99行)。
让我们完成循环和函数
在这个代码块中,我们检查批处理中是否有图像(第102行)。如果我们有一批图像,我们通过模型(第105行)对整个批进行预测。从那里,我们循环一个图像和相应的预测结果(110-122行)。这些行向输出列表追加标签和概率,然后使用imageID将输出存储在Redis数据库中(第116-122行)。
我们使用第125行上的ltrim从队列中删除了刚刚分类的图像集。最后,我们将睡眠设置为SERVER_SLEEP时间并等待下一批图像进行分类。下面我们来处理/predict我们的REST API端点
稍后您将看到,当我们发布到REST API时,我们将使用/predict端点。当然,我们的服务器可能有多个端点。我们使用@app。路由修饰符以第130行所示的格式在函数上方定义端点,以便Flask知道调用什么函数。我们可以很容易地得到另一个使用AlexNet而不是ResNet的端点,我们可以用类似的方式定义具有关联函数的端点。你懂的,但就我们今天的目的而言,我们只有一个端点叫做/predict。
我们在第131行定义的predict方法将处理对服务器的POST请求。这个函数的目标是构建JSON数据,并将其发送回客户机。如果POST数据包含图像(第137和138行),我们将图像转换为PIL/Pillow格式,并对其进行预处理(第141-143行)。
在开发这个脚本时,我花了大量时间调试我的序列化和反序列化函数,结果发现我需要第147行将数组转换为C-contiguous排序(您可以在这里了解更多)。老实说,这是一个相当大的麻烦事,但我希望它能帮助你站起来,快速跑。
如果您想知道在第99行中提到的id,那么实际上是使用uuid(通用唯一标识符)在第151行生成的。我们使用UUID来防止hash/key冲突。
接下来,我们将图像的id和base64编码附加到d字典中。使用rpush(第153行)将这个JSON数据推送到Redis db非常简单。
让我们轮询服务器以返回预测
我们将持续循环,直到模型服务器返回输出预测。我们开始一个无限循环,试图得到157-159条预测线。从这里,如果输出包含预测,我们将对结果进行反序列化,并将结果添加到将返回给客户机的数据中。我们还从db中删除了结果(因为我们已经从数据库中提取了结果,不再需要将它们存储在数据库中),并跳出了循环(第163-172行)。
否则,我们没有任何预测,我们需要睡觉,继续投票(第176行)。如果我们到达第179行,我们已经成功地得到了我们的预测。在本例中,我们向客户机数据添加True的成功值(第179行)。注意:对于这个示例脚本,我没有在上面的循环中添加超时逻辑,这在理想情况下会为数据添加一个False的成功值。我将由您来处理和实现。最后我们称烧瓶。jsonify对数据,并将其返回给客户端(第182行)。这就完成了我们的预测函数。
为了演示我们的Keras REST API,我们需要一个__main__函数来实际启动服务器
第186-196行定义了__main__函数,它将启动classify_process线程(第190-192行)并运行Flask应用程序(第196行)。
第五部分:启动可伸缩的Keras REST API
要测试我们的Keras深度学习REST API,请确保使用本文的“下载”部分下载源代码示例图像。从这里,让我们启动Redis服务器,如果它还没有运行:
redis-server然后,在另一个终端中,让我们启动REST API Flask服务器:
python run_keras_serverpy另外,我建议在向服务器提交请求之前,等待您的模型完全加载到内存中。现在我们可以继续使用cURL和Python测试服务器。
第七部分:使用cURL访问Keras REST API
使用cURL来测试我们的Keras REST API服务器。这是我的家庭小猎犬Jemma。根据我们的ResNet模型,她被归类为一只拥有946%自信的小猎犬。
curl -X POST -F image=@jemmapng ''你会在你的终端收到JSON格式的预测:
{"predictions": [{"label": "beagle","probability": 09461546540260315},{"label": "bluetick","probability": 0031958919018507004},{"label": "redbone","probability": 0006617196369916201},{"label": "Walker_hound","probability": 00033879687543958426},{"label": "Greater_Swiss_Mountain_dog","probability": 00025766862090677023}],"success": true}第六部分:使用Python向Keras REST API提交请求
如您所见,使用cURL验证非常简单。现在,让我们构建一个Python脚本,该脚本将发布图像并以编程方式解析返回的JSON。
让我们回顾一下simple_requestpy
# import the necessary packagesimport requests# initialize the Keras REST API endpoint URL along with the input# image pathKERAS_REST_API_URL = ""我们在这个脚本中使用Python请求来处理向服务器提交数据。我们的服务器运行在本地主机上,可以通过端口5000访问端点/predict,这是KERAS_REST_API_URL变量(第6行)指定的。
我们还定义了IMAGE_PATH(第7行)。png与我们的脚本在同一个目录中。如果您想测试其他图像,请确保指定到您的输入图像的完整路径。
让我们加载图像并发送到服务器:
# load the input image and construct the payload for the requestimage = open(IMAGE_PATH, "rb")read()payload = {"image": image}# submit the requestr = requestspost(KERAS_REST_API_URL, files=payload)json()# ensure the request was sucessfulif r["success"]: # loop over the predictions and display them for (i, result) in enumerate(r["predictions"]): print("{} {}: {:4f}"format(i + 1, result["label"], result["probability"]))# otherwise, the request failedelse: print("Request failed")我们在第10行以二进制模式读取图像并将其放入有效负载字典。负载通过请求发送到服务器。在第14行发布。如果我们得到一个成功消息,我们可以循环预测并将它们打印到终端。我使这个脚本很简单,但是如果你想变得更有趣,你也可以使用OpenCV在图像上绘制最高的预测文本。
第七部分:运行简单的请求脚本
编写脚本很容易。打开终端并执行以下命令(当然,前提是我们的Flask服务器和Redis服务器都在运行)。
python simple_requestpy使用Python以编程方式使用我们的Keras深度学习REST API的结果
第八部分:扩展深度学习REST API时的注意事项
如果您预期在深度学习REST API上有较长一段时间的高负载,那么您可能需要考虑一种负载平衡算法,例如循环调度,以帮助在多个GPU机器和Redis服务器之间平均分配请求。
记住,Redis是内存中的数据存储,所以我们只能在队列中存储可用内存中的尽可能多的图像。
使用float32数据类型的单个224 x 224 x 3图像将消耗602112字节的内存。
CPU是一个有多种功能的优秀领导者。它的优点在于调度、管理、协调能力强,计算能力则位于其次。而GPU相当于一个接受CPU调度的“拥有大量计算能力”的员工。当需要对大数据bigdata做同样的事情时,GPU更合适,当需要对同一数据做很多事情时,CPU正好合适。
GPU能做什么?关于图形方面的以及大型矩阵运算,如机器学习算法等方面,GPU就能大显身手。
简而言之,CPU擅长统领全局等复杂 *** 作,GPU擅长对大数据进行简单重复 *** 作。CPU是从事复杂脑力劳动的教援,而GPU是进行大量并行计算的体力劳动者。
深度学习是模拟人脑神经系统而建立的数学网络模型,这个模型的最大特点是,需要大数据来训练。因此,对电脑处理器的要求,就是需要大量的并行的重复计算,GPU正好有这个专长。蓝海大脑深度学习服务器研究人员表示:
Sparse Retriever指的是使用稀疏表示来进行文本匹配,典型代表:TF-IDF、BM25等。特点如下:
维度大小一般为语料的词典大小;
当词典较大时,向量表示中会包含大量的0;
基于统计,无法包含更丰富的语义信息。
Dense Retriever指的是使用稠密向量来进行文本匹配,典型代表:Bert,特点如下:
维度一般比较灵活,不受词典大小的影响;
由于向量维度一般较小,向量表示中一般不会包含0;
包含的语义信息更加丰富。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)