当前位置:首页 » 云服务器 » 搭建深度学习服务器

搭建深度学习服务器

发布时间: 2022-04-21 15:28:50

‘壹’ 深度学习 对硬件的要求

之前热衷于学习理论知识,目前想跑代码了发现不知道从何下手,自己电脑上搭建的平台基本就是个摆设,因为跑不起来呀。今天我们就来看看想做深度学习应该怎么下手。

首先了解下基础知识:
1、深度学习用cpu训练和用gpu训练的区别
(1)CPU主要用于串行运算;而GPU则是大规模并行运算。由于深度学习中样本量巨大,参数量也很大,所以GPU的作用就是加速网络运算。

(2)CPU算神经网络也是可以的,算出来的神经网络放到实际应用中效果也很好,只不过速度会很慢罢了。而目前GPU运算主要集中在矩阵乘法和卷积上,其他的逻辑运算速度并没有CPU快。

目前来讲有三种训练模型的方式:
1. 自己配置一个“本地服务器”,俗称高配的电脑。
这个选择一般是台式机,因为笔记本的“高配”实在是太昂贵了,同一个价格可以买到比笔记本好很多的配置。如果是长期使用,需要长期从事深度学习领域的研究,这个选择还是比较好的,比较自由。

预算一万以内的机器学习台式机/主机配置:


从李飞飞的课程里,可以看到她的电脑配置,这个配置是机器学习的基本设置。

内存:4X8G
显示卡: 两个NV GTX 1070

硬盘: HDD一个, SSD两个

③ 配置主机需要了解的参数(在上一篇博客中已经详细介绍了各个参数的含义):
GPU:一个好的GPU可以将你的训练时间从几周缩减成几天,所以选GPU一定要非常慎重。可以参看GPU天梯榜,都是一些比较新的型号具有很强的性能。
在英伟达产品系列中,有消费领域的GeForce系列,有专业绘图领域的Quadro系列,有高性能计算领域的Tesla系列,如何选择?有论文研究,太高的精度对于深度学习的错误率是没有提升的,而且大部分的环境框架都只支持单精度,所以双精度浮点计算是不必要,Tesla系列都去掉了。从显卡效能的指标看,CUDA核心数要多,GPU频率要快,显存要大,带宽要高。这样,最新Titan
X算是价格便宜量又足的选择。
CPU:总的来说,你需要选择一个好的GPU,一个较好的CPU。作为一个高速的串行处理器,常用来作为“控制器”使用,用来发送和接收指令,解析指令等。由于GPU内部结构的限制,使得它比较适合进行高速的并行运算,而并不适合进行快速的指令控制,而且许多的数据需要在GPU和CPU之间进行存取,这就需要用到CPU,因为这是它的强项。
内存条:主要进行CPU和外设之间的数据交换,它的存取速度要比硬盘快好几倍,但是价格比较昂贵,通常会和容量成正比。内存大小最起码最起码最起码要大于你所选择的GPU的内存的大小(最好达到显存的二倍,当然有钱的话越大越好)。在深度学习中,会涉及到大量的数据交换操作(例如按batch读取数据)。当然你也可以选择将数据存储在硬盘上,每次读取很小的batch块,这样你的训练周期就会非常长。常用的方案是“选择一个较大的内存,每次从硬盘中读取几个batch的数据存放在内存中,然后进行数据处理”,这样可以保证数据不间断的传输,从而高效的完成数据处理的任务。
电源问题:一个显卡的功率接近300W,四显卡建议电源在1500W以上,为了以后扩展,可选择更大的电源。
固态硬盘:作为一个“本地存储器”,主要用于存储各种数据。由于其速度较慢,价格自然也比较便宜。建议你选择一个较大容量的硬盘,通常会选择1T/2T。一个好的方法是:“你可以利用上一些旧的硬盘,因为硬盘的扩展十分简单,这样可以节省一部分资金。”

‘贰’ 如何配置一台深度学习主机

搞AI,谁又能没有“GPU之惑”?下面列出了一些适合进行深度学习模型训练的GPU,并将它们进行了横向比较,一起来看看吧!

‘叁’ 实验室的深度学习服务器需要安装操作系统和数据库软件吗

需要安装。
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。

‘肆’ 如何在后台部署深度学习模型

搭建深度学习后台服务器

我们的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消息代理/消息队列

    测试和原文的命令一致。


    第三部分:配置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_server.py中使用的常量.


    我们将向服务器传递float32图像,尺寸为224 x 224,包含3个通道。我们的服务器可以处理一个BATCH_SIZE = 32。如果您的生产系统上有GPU(s),那么您需要调优BATCH_SIZE以获得最佳性能。我发现将SERVER_SLEEP和CLIENT_SLEEP设置为0.25秒(服务器和客户端在再次轮询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_server.py

  • 另外,我建议在向服务器提交请求之前,等待您的模型完全加载到内存中。现在我们可以继续使用cURL和Python测试服务器。

    第七部分:使用cURL访问Keras REST API

    使用cURL来测试我们的Keras REST API服务器。这是我的家庭小猎犬Jemma。根据我们的ResNet模型,她被归类为一只拥有94.6%自信的小猎犬。

  • curl -X POST -F [email protected] 'http://localhost:5000/predict'

  • 你会在你的终端收到JSON格式的预测:

  • {"predictions": [{"label": "beagle","probability": 0.9461546540260315},{"label": "bluetick","probability": 0.031958919018507004},{"label": "redbone","probability": 0.006617196369916201},{"label": "Walker_hound","probability": 0.0033879687543958426},{"label": "Greater_Swiss_Mountain_dog","probability": 0.0025766862090677023}],"success": true}

  • 第六部分:使用Python向Keras REST API提交请求

    如您所见,使用cURL验证非常简单。现在,让我们构建一个Python脚本,该脚本将发布图像并以编程方式解析返回的JSON。

    让我们回顾一下simple_request.py

  • # import the necessary packagesimport requests# initialize the Keras REST API endpoint URL along with the input# image pathKERAS_REST_API_URL = "http://localhost:5000/predict"IMAGE_PATH = "jemma.png"

  • 我们在这个脚本中使用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 = requests.post(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_request.py

  • 使用Python以编程方式使用我们的Keras深度学习REST API的结果

    第八部分:扩展深度学习REST API时的注意事项

    如果您预期在深度学习REST API上有较长一段时间的高负载,那么您可能需要考虑一种负载平衡算法,例如循环调度,以帮助在多个GPU机器和Redis服务器之间平均分配请求。

    记住,Redis是内存中的数据存储,所以我们只能在队列中存储可用内存中的尽可能多的图像。

    使用float32数据类型的单个224 x 224 x 3图像将消耗602112字节的内存。

‘伍’ 如何搭建适合自己的深度学习平台

  这个一定程度上取决于你投入的总预算,
如果你并无以后继续折腾的打算,纯粹只是入门的话,
可以按照普通游戏主机的配置来配。显卡的选择,除了很多人耳熟能详的

‘陆’ 如何搭建一台深度学习服务器

因为主流的CNN网络实现,在反向求导和更新权值的时候将当前用不到的数据都存起来了,使用了过多的显存,所以,如果自己实现网络,把反向求导和更新同时实现,这样在一台显存只有4G的显卡上就可能跑一个需要12G显存的网络。

‘柒’ 做深度学习的服务器需要哪些配置

要做一个深度学习的服务器,需要的配置有GPU RAM, 储存器,因为GPU是在我做深度学习服务器里面一个非常重要的部分,相当于是一个心脏,是非常核心的一个服务器,所以GPU是一个非常重要的东西,储存器也是相当重要的,因为很多数据都要放在ssd储存器上。

‘捌’ 配个深度学习的服务器,需要多大内存起步

CPU和主板支持什么内存就插哪种。主要参数就是类型,ddr4,ddr3这种的表示。频率要看主板支持多大,在主板BIOS设置中要设置才会倍频,要不白买高频率的了。

内存大小,当然越大越好!还是那句话看主板支持多大的内存。一般16g一个人用足够,多个人怎么也得32g吧。毕竟matlab有时还是会用到的,内存别太小。

一般就是看威刚,金士顿,芝奇,海盗船这几个牌子,芝奇,海盗船用的芯片据说好一些,金士顿也有骇客神条,还是看预算吧,一般不会差太多钱。

支持深度学习服务器定制,欢迎了解更多解决方案:网页链接

‘玖’ 如何在mac系统下搭建theano深度学习

方案一 基于SSH直接搭建 Git支持的协议主要是四种: 本地: 需要文件共享系统,权限不好控制 HTTP:速度慢 SSH:同时支持读写操作,不支持匿名的读取(Git默认协议) GIT:最快 从搭建的难易程度和特点综合筛选,最合适的还是ssh,并且大部分服务器上基本都有ssh服务,所以省去了不少麻烦。一个最基本的思路是给每一个人一个ssh帐号,这样大家就可以通过用户名和口令来访问了,但是显然这不是一个好的选择,这个做法有些多余,并且对于repo的权限很难管理。 在使用Github的时候,会利用rsa/sitaramc/gitolite $ mkdir -p $HOME/bin $ gitolite/install -to $HOME/bin $ gitolite setup -pk YourName port 22 identityfile ~/.ssh/admin 这样,当访问gitolite的时候就会自动根据配置文件执行,配置完成后可以根据下面的命令,将gitolite-admin转移到本地。 git clone gitolite:gitolite-admin.git 克隆完成后,可以发现,gitolite-admin下面有两个目录,其中conf保存配置文件,可以通过编辑里面的gitolite.conf文件,管理git服务器,keydir目录保存用户的公钥pub文件。 当讲修改后的repo 提交的时候,gitolite就会自动的应用这些配置,管理过程就方便了很多。 配置规则 打开gitolite.conf文件可以看到其中的示例: To add new users alice, bob, and carol, obtain their public keys and add them to 'keydir' as alice.pub, bob.pub, and carol.pub respectively. To add a new repo 'foo' and give different levels of access to these users, edit the file 'conf/gitolite.conf' and add lines like this: repo foo RW+ = alice RW = bob R = carol 上面的配置文件就是新建了一个repo foo,并且添加了三位项目成员,每一个人的权限不同。提交push后,管理便生效了。 可视化 可能会需要一个web界面来管理这些项目,目前知道的有三种方式: git源码中自带的组件,cgi脚本实现,使用gitolite服务 gitlab开源框架,基于ROR,新版本不再使用gitolite服务 FB开源PHP框架 phabricator,功能高端上档次

‘拾’ 学生能去哪里租用便宜的gpu云服务器来进行深度学习计算

其实你可以去腾讯云去租用GPU云服务器来进行深度学习计算。腾讯云 GPU 实例类型众多,应用广泛,不同的实例类型有不同的产品定位。用户可以根据自身的应用场景,结合性能、价格等因素,选择最符合业务需求的实例。

比如你要进行深度学习计算,建议使用腾讯云GN8/GN10X 实例。GN10Xp配备Tesla V100 NVLink 32GB GPU,具有强大的单精度浮点运算能力,并具备较大的 GPU 板载内存。最大实例规格配置8个 V100 ,80个 vGPU 和320GB主机内存,是深度学习训练的首选。

GN10Xp 最大实例规格具备125.6 TFLOPS 单精度浮点运算能力,支持 Tensor Core 加速,单卡搭载32GB显存,GPU 卡之间通过300GB/s的 NVLink 高速互连。强大的计算与数据吞吐能力大大缩短训练周期,使得复杂模型的快速迭代成为可能,人工智能相关业务得以把握先机。

腾讯云GPU云服务器,管理很简单GPU云服务器采用和云服务器CVM一致的管理方式,无需跳板机登录,简单易用。清晰的显卡驱动的安装、部署指引,免去高学习成本。而且节约成本,你无需预先采购、准备硬件资源,一次性购买,免除硬件更新带来的额外费用,有效降低基础设施建设投入。目前,腾讯云的GPU云服务器已全面支持包年包月计费和按量计费,你可以根据需要选择计费模式。

热点内容
安卓手机为什么这么香 发布:2024-05-06 23:33:19 浏览:622
安卓微信深色模式是什么意思 发布:2024-05-06 23:14:41 浏览:685
脚本样本 发布:2024-05-06 23:03:41 浏览:629
sqlserver导出 发布:2024-05-06 23:02:16 浏览:807
phpredis操作 发布:2024-05-06 22:56:24 浏览:583
查看qq加密相册软件 发布:2024-05-06 22:45:36 浏览:619
达芬奇密码电影解说讲的是什么 发布:2024-05-06 22:26:41 浏览:144
服务器提供什么服务 发布:2024-05-06 21:45:20 浏览:213
一汽桌面云服务器地址 发布:2024-05-06 21:19:23 浏览:996
北京市社保官网登录密码是什么 发布:2024-05-06 21:19:15 浏览:380