推荐一款适合深度学习AI场景应用性能较好的服务器

推荐一款适合深度学习AI场景应用性能较好的服务器,第1张

深度学习是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理等多个领域都取得了卓越的成果,可见其重要性

熟悉深度学习的人都知道,深度学习是需要训练的,所谓的训练就是在成千上万个变量中寻找最佳值的计算。这需要通过不断的尝试识别,而最终获得的数值并非是人工确定的数字,而是一种常态的公式。通过这种像素级的学习,不断总结规律,计算机就可以实现像人一样思考。因而,更擅长并行计算和高带宽的GPU,则成了大家关注的重点。

很多人认为深度学习GPU服务器配置跟普通服务器有些不一样,就像很多人认为做设计的机器一定很贵一样。其实只要显卡或者CPU满足深度学习的应用程序就可以进行深度学习。由于现在CPU的核心数量和架构相对于深度学习来说效率会比GPU低很多,所以大部分深度学习的服务器都是通过高端显卡来运算的。

这里谈谈关于深度学习GPU服务器如何选择,深度学习服务器的一些选购原则和建议:

1、电源:品质有保障,功率要足够,有30~40%冗余

稳定、稳定、还是稳定。一个好的电源能够保证主机再长时间运行不宕机和重启。可以想象一下,计算过程中突然重启,那么又要重来,除了降低效率,还影响心情。有些电源低负载使用的时候可能不出问题,一旦高负载运行的时候就容易出问题。选择电源的时候一定要选择功率有冗余品质过硬,不要功率刚刚好超出一点。

2、显卡:目前主流RTX3090,最新RTX4090也将上市

显卡在深度学习中起到很重要的作用,也是预算的一大头。预算有限,可以选择RTX3080 /RTX3090/RTX4090(上月刚发布,本月12日上市)。预算充足,可以选择专业深度学习卡Titan RTX/Tesla V100 /A6000/A100/H100(处于断供中)等等。

3、CPU:两家独大,在这要讲的是PC级和服务器级别处理器的定位

Intel的处理器至强Xeon、酷睿Core、赛扬Celeron、奔腾Pentium和凌动Atom5个系列,而至强是用于服务器端,目前市场上最常见的是酷睿。当下是第三代Xeon Scalable系列处理器,分为Platinum白金、Gold金牌、 Silver 银牌。

AMD处理器分为锐龙Ryzen、锐龙Ryzen Pro、锐龙线程撕裂者Ryzen Threadripper、霄龙EPYC,其中霄龙是服务器端的CPU,最常见的是锐龙。当下是第三代 EPYC(霄龙)处理器 ,AMD 第三代 EPYC 7003 系列最高 64核。

选择单路还是双路也是看软件,纯粹的使用GPU运算,其实CPU没有多大负载。考虑到更多的用途,当然CPU不能太差。主流的高性能多核多线程CPU即可。

4、内存:单根16G/32G/64G 可选,服务器级别内存有ECC功能,PC级内存没有,非常重要

内存32G起步,内存都是可以扩展的,所以够用就好,不够以后可以再加,买多了是浪费。

5、硬盘:固态硬盘和机械硬盘,通常系统盘追求速度用固态硬盘,数据盘强调存储量用机械盘

固态选择大品牌企业级,Nvme或者SATA协议区别不大,杂牌固态就不要考虑了,用着用着突然掉盘就不好了。

6、机箱平台:服务器级别建议选择超微主板平台,稳定性、可靠性是第一要求

预留足够的空间方便升级,比如现在使用单显卡,未来可能要加显卡等等;结构要合理,合理的空间更利于空气流动。最好是加几个散热效果好的机箱风扇辅助散热。温度也是导致不稳定的一个因素。

7、软硬件支持/解决方案:要有

应用方向:深度学习、量化计算、分子动力学、生物信息学、雷达信号处理、地震数据处理、光学自适应、转码解码、医学成像、图像处理、密码破解、数值分析、计算流体力学、计算机辅助设计等多个科研领域。

软件: Caffe, TensorFlow, Abinit, Amber, Gromacs, Lammps, NAMD, VMD, Materials Studio, Wien2K, Gaussian, Vasp, CFX, OpenFOAM, Abaqus, Ansys, LS-DYNA, Maple, Matlab, Blast, FFTW, Nastran等软件的安装、调试、优化、培训、维护等技术支持和服务。

————————————————

版权声明:本文为CSDN博主「Ai17316391579」的原创文章,遵循CC 40 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:>

在深度学习场景中,GPU服务器是必不可少的一部分,也是可以提高计算速度和精度的关键,以下是几种适合深度学习场景的GPU服务器:
1 NVIDIA Tesla V100 服务器:具备高性能计算能力和内存容量,适用于深度学习、大规模数据分析和AI训练等场景。
2 AMD Radeon Instinct MI60 Server:可用于机器学习、高性能计算和图形渲染等领域,具备高速内存、流式计算和稳定性等特点。
3 Intel Movidius Neural Compute Stick:便携式的神经计算设备,可以利用USB接口与其他设备连接,适用于嵌入式设备上的深度学习场景。
以上服务器都具有针对深度学习的高速计算能力、可靠性和易用性,对于需要进行大规模数据训练、模型评估和推理等任务的用户群体非常适用。

推荐品牌: LINKZOL(联众集群),可咨询:1381O114665
推荐配置一:
计算平台采用:LZ743GR-2G/Q
系统:Ubuntu 14043 x64
CPU:Intel Xeon十核E5-2630v4(22GHz,80 GT/s)
内存:原厂64GB内存 (16GB×4) DDR4 2133MHZ ECC-REG(带内存校错技术,最大支持2T)
系统硬盘:INTEL 25寸240G 企业级SSD固态硬盘(最大支持8块硬盘,类型:SATA,SSD)
系统硬盘:希捷35寸4T 7200RPM 企业级硬盘(最大支持8块硬盘,类型:SATA,SSD;)
GPU卡:2块NVIDIA TATAN-X GPU卡 (CUDA核心数3584个核心,12G DDR5 显存,最大2个GPU卡)
电源:1200W High efficiency (96%)金牌电源
推荐配置二:
计算平台采用:LZ-748GT
系统:Ubuntu 14043 x64
CPU:Intel Xeon十二核E5-2650v4(22GHz,96 GT/s)
内存:原厂256GB内存 (16GB×16) DDR4 2133MHZ ECC-REG(带内存校错技术,最大支持2T)
系统硬盘:2块INTEL 25寸480G 企业级SSD固态硬盘(最大支持8块硬盘,类型:SATA,SSD)
系统硬盘:3块希捷35寸4T 7200RPM 企业级硬盘(最大支持8块硬盘,类型:SATA,SSD;)
GPU卡:4块TESLA TITANX GPU计算卡或者4块tesla P4O GPU卡 (CUDA核心数3584个核心,12G DDR5 显存,最大4个GPU卡)
电源:2000W High efficiency (94%)冗余钛金电源
推荐配置三:
计算平台采用:LZ428GR-8G/Q
系统:Ubuntu 14043 x64
CPU:Intel Xeon十四核E5-2690v4(26GHz,96GT/s)
内存:原厂256GB内存 (16GB×16) DDR4 2133MHZ ECC-REG(带内存校错技术,最大支持2T)
系统硬盘:2块INTEL 25寸480G 企业级SSD固态硬盘(最大支持8块硬盘,类型:SATA,SSD)
系统硬盘:3块希捷25寸2T 7200RPM 企业级硬盘(最大支持8块硬盘,类型:SATA,SSD;)
GPU卡:8块TESLA P40 GPU计算卡或者8块NVIDIA TATAN-X GPU卡 (CUDA核心数3584个核心,12G DDR5 显存,最大8个GPU卡)
电源:1600W(2+2) High efficiency (96%)钛金电源

搭建深度学习后台服务器

我们的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字节的内存。

产品类型 4U机架式
1 CPU 金牌6326 16核心32线程 基频29GHZ 加速频率35GHZ TDP: 185W 2
2 内存 512G(32GB32) DDR4 3200MHZ 1
4 准系统 超微420GP-TNR 4U机架式准系统, 带2200W冗余2+2电源;平台最大支持lO个GPU
32个DIMM插槽;母板超级X12DPG-OA6处理器中央处理器双插槽 P+ (LGA-4189)第三代英特尔 至强 可扩展处理器支持CPU TDP 270W核心高达40C/80T;高达 60MB 的缓存图形处理器支持的GPUHGX A100 8-GPU 40GB/80GB SXM4 多 GPU 1
5 SSD 三星PM9A1 1TB M2接口 NVMe协议 四通道 PCIe40 固态硬盘 1
6 SATA 希捷(Seagate)银河系列V6 6TB ST6000NM021A 7200RPM 256MB SATA3企业级硬盘 1
7 GPU卡 英伟达RTX 4090公版 4

实验室没有服务器可以用Googlecolab跑深度学习模型。具体 *** 作步骤如下:
1、创建colab文件:进入Google云盘后,创建一个colab文件。第一次使用,会存在colab选项不显示的情况,点击关联更多应用即可。点击colab选项后会跳转到一个页面,与jupyter基本一模一样,可输入代码段,能连接服务器,有文件目录、colab文件名和使用选项。
2、配置colab环境:点击修改后点击笔记本设置就可以配置gpu了,硬件加速选择gpu,点击连接即配置好环境,将Googledrive的云空间连接起来,就有了drive文件夹,现在配置已经全部完成。
3、配置完成就可以使用Googlecolab跑深度学习模型了,gpu是k80计算速度慢,可以再新建一个colab文件,两三次就可以开到p100了。gpu用完的场景,需要1天时间恢复,可以再弄一个谷歌账号重复上述 *** 作。

需要安装。
1。安装系统。1。安装ubuntu。具体安装省略,记录一个小bug,可能在给有独立显卡的台式机安装ubuntu双系统时遇到:在安装时,使用U盘启动这步,直接选择tryubuntu或installubuntu都会出现黑屏的问题。解决方法:将光标移动到installubuntu一项上,按e键,会进入一个可编辑的界面,将quietsplash修改为nouveau。modeset=0nomodeset,然后按ctrl+x进入安装。之后在ubuntu安装nvidia驱动后,就正常了。如果没有安装驱动,每次进入前,都要用同样的方法将上面的quietsplash修改。2。配置nvidia显卡。具体分为两步:安装nvidia驱动,如果是图形界面的话,在Software&Updates中的AdditionalDrivers中选择合适的驱动安装即可。在官网下载cudnn并安装。2。创建和登录用户。在linux上创建自己的用户,方便管理代码和安装应用。比如我们想要创建一个用户名是haha,密码是123456的用户,命令如下:添加用户:useradd-d/home/haha-mhaha。设置密码(只有设置密码之后,才能登录用户):passwdhaha,然后输入密码。然后就可以通过sshhaha@your_ip的方式登录服务器了。登录后也可以设置bash:chsh-s/bin/bash或修改为zsh。加入root权限:使用apt下载时,如果出现不在sudoers文件中的报错,则需要将用户加入sudoers,执行sudovim/etc/sudoers命令,rootALL=(ALL)ALL的下一行加入hahaALL=(ALL)ALL,然后保存。删除用户:userdel-rhaha。

没必要,如果咱们要求服务器的安全性高,不能断电,可以配置双电增加安全性。如果咱们服务器用的时候开机,不用的时候关机,安全性要求低的时候可以不要。不过还是加个电源还是好点的߅也差不了多少钱。
配置深度学习服务器建议考虑蓝海大脑,感觉他们做事情很职业很负责,沟通也比较顺畅。是异构计算的高性能超算平台公司,专注为企业数据中心、云计算、人工智能、边缘计算、生命科学等领域的高性能服务商。毕竟是个大件,还是要找专业的公司靠谱一些。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10390685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存