新技术论坛
搜索
查看: 1881|回复: 0
打印 上一主题 下一主题

成本14,000元,如何自己动手搭建深度学习服务器?

[复制链接]
  • TA的每日心情
    开心
    2016-12-9 18:18
  • 签到天数: 85 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2017-2-24 14:46:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

      在完成 Jeremy Howard 非常出色的深度学习第一部分课程之后,我查看了一下我的亚马逊网络服务(AWS)账单,发现我每个月运行 GPU  都要花费差不多 200 美元。以这样的代价来完成网络课程看起来代价有点大,而且我已开始着手研究一些课程以外的数据集,并迫切地想得出结果。
      通过与大家进行交流,阅读了大量博客文章之后,我最终决定开始配置自己的深度学习服务器。当今科技和硬件的发展是如此的迅猛,我担心我曾阅读过的文章很快就会过时,但我希望自己的以下总结能够为大家带来帮助。
      配置服务器的 6 大步骤:
      1). 选择组件
      2.) 组装
      3). 安装操作系统
      4). 安装驱动程序
      5). 安装库
      6). 设置远程访问
      1. 选择部件
      我阅读了大量博客,最终形成了现在应该选择哪种配置的概念。因为硬件更新换代太快,在下个世代到来时到底该买哪些型号的部件,这一问题还是得留给你们研究。但是一般而言,你需要选购以下部件:主板、CPU、内存(随机存取存储器,RAM)、硬盘驱动器(固态硬盘,SSD)、显卡(GPU)、CPU  风扇、电源和机箱。

      P.S. 我强烈建议你在购买之前在 pcpartpicker.com  上创建一个清单。这个网站的特色在于它有一个「兼容性检查」的功能,它会告诉你自己选择的部件是否互相兼容。我的列表在这里。
      部件清单(原文为美国市场价,机器之心将其替换为 2 月 23 日,京东自营/淘宝价)
      CPU英特尔 i7 7700k(Kabylake)4.2GHz 四核 2799 元
      内存海盗船 复仇者 LPX 32GB (2 x 16) DDR43200 2499 元
      固态硬盘三星 850 EVO sata3 500G 1299 元
      GPU索泰 GeForce GTX 1080 8GB 4999 元
      主板微星 Z270-A PRO ATX LGA1151 1299 元
      CPU 风扇酷冷至尊 Hyper 212 EVO 82.9 CFM 128 元
      供电电源EVGA SuperNOVA G2 750W ATX 879 元
      机箱NZXT S340 (White) ATX Mid Tower Case 369 元
      总价:14,271 元
      我决定从单块显卡开始自己的装机之路,但我选择的微星 (MSI) 主板有多个 PCIe 通道,这意味着如果有需要,我可以在未来添加更多的  GPU。一般而言,我都会选择那些用户评论数最多的硬件,即使这些评论褒贬不一。但评论意味着部件受欢迎的程度,用户数量越大,就越有可能出现用户自行创建的使用指南和建议。这会为你接下来的两个步骤免去了很大的痛苦。
      一些实用的文章:
      Build Personal Deep Learning Rig  (http://guanghan.info/blog/en/my-works/building-our-personal-deep-learning-rig-gtx-1080-ubuntu-16-04-cuda-8-0rc-cudnn-7-tensorflowmxnetcaffedarknet/)
      Optimizing a Starter CUDA Build  (http://www.servethehome.com/optimizing-a-starter-cuda-machine-learning-ai-deep-learning-build/)
      Building a Deep Learning Dream Machine  (http://graphific.github.io/posts/building-a-deep-learning-dream-machine/)
      Deep Learning Hardware Guide  (http://timdettmers.com/2015/03/09/deep-learning-hardware-guide/)
      2. 组装
      这一部分非常有趣。几乎所有的部件,我都可以在网上找到相关的指导性视频,但是有一些部件我必须要根据相似型号的安装视频才可以。微星主板、酷冷至尊风扇和  NZXT 机箱的指导手册非常不错,但是我还是需要再找一些其他的材料。



      经验总结
      买一把好用的螺丝刀我的螺丝刀非常的差劲,所以很快就让我停滞不前了。买一个杆长一点的螺丝刀,这样你就可以够得到很紧的地方,也是为自己省力。
      不要吝惜自己的力量免责声明:要是把什么东西弄坏了,不要怪我。但是至少在两种情况下(CPU  和内存),我因为在安装部件时候用劲太小浪费了好多时间。我担心太过用力,所以如果部件不能够轻松放进去,我就放弃了。至于内存,我几乎在亚马逊上购买了一整套新的芯片。这些情况下,解决的办法就是用力压。
      理解你的 BIOSBIOS  是一个预先安装在主板上的软件,是你的机器启动时加载的第一个软件。它基本上是你配置硬件和安装操作系统的一个控制面板。学会如何在 BIOS 上找到「引导盘」(U  盘或是包含操作系统的固态硬盘),怎样选择使用哪一张显卡都是非常重要的。遗憾的是微星的用户手册在这些问题上表达得不甚清楚,但是这个视频(http://www.youtube.com/watch?v=C6mQqlmL5Sc)会让你更好地进行理解。
      你的显示器没有坏弄清怎样让显示屏在我的新机器上工作花了我不少时间。我之前曾听说在你第一次启动的时候,你需要将你的 HDMI  线插到主板的某个位置,因为一开始显卡驱动还没有安装。我照做了,但是当我最后启动的时候,显示器上什么都没有。接着我尝试把线插到显卡上,也没有用。最后我尝试将显卡拔出来,把线连上主板并重新启动。终于能看到东西了!这意味着,微星的主板如果不能在  PCIe  通道找到其他的外置显卡,就会默认使用核显。因为在我第一次启动的时候,就安装了显卡,主板就选择使用我的的新新卡。显示器上看不到任何东西是因为我没有安装英伟达的驱动。
      最后,大功告成了!


      3. 安装操作系统
      在显示器可以工作之后,你会看到一个这样的界面。这就是你的 BIOS(注:不同品牌的主板,BIOS  界面略有不同)。我需要更改两处配置,以保证所有的东西都能正常运行:更改启动优先级,替换默认的显卡。

      在 MSI 主板上预置的 BIOS
      我计划主要将我的机器用于编程和机器学习,所以我决定要安装 Ubuntu 操作系统。我还希望能够通过我的 Mac 对它进行远程操作,所以我可能不需要  Windows,但是你可以安装双系统。
      制作安装 Ubuntu 的 U 盘
      我依照针对 Mac  的说明(http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-macos),下载了一个叫做  UNetBootin (http://unetbootin.github.io/) 的客户端,它可以为你把所有的事情都处理好。
      启动 UBUNTU
      若是一切正常,我应该能够插入我的 U 盘,重启,回答问题,安装一个完全可运行版本的  Ubuntu,准备好进行下一步。但是,我得到的确实这样的错误信息。

      我按了好几次退出键,之后按了删除键,之后 F1、 F10、 F12、 #%^ 、 $\]#^,但都没有用。
      问题在于微星主板已经选择了默认的「启动优先级」。再次进入 BIOS(在开机之后立刻按 F11),我看到 BIOS  的配置是首先启动硬件驱动(三星固态硬盘),这里面是空的,但是也可能会有一大堆选项。解决办法就是把 USB  选项拉到优先级列表的顶部,然后重启。最后,我看到了这十分友好的 Ubuntu 安装屏幕!

      在安装了 Ubuntu 并且重启之后,我很失望地发现我卡在了 Ubuntu 的加载屏幕上,它就停在了那里,最终超时。这又是怎么了呢?!
      原来问题在于微星主板内置的显卡(我的 GTX 1080 还在我的咖啡桌上)。它与 Ubuntu  的图形用户界面(GUI)不兼容!这真是经典的鸡和蛋的问题。没有 Ubuntu,我不能下载使用显卡所需的驱动,但是没有显卡,我不能安装 Ubuntu!进入  GRUB
      (http://help.ubuntu.com/community/Grub2)。

      Ubuntu 启动菜单。你可以在开机后按压左 Shift 键进入这一菜单。
      最后,我找到了两篇非常好的文章(http://askubuntu.com/questions/162075/my-computer-boots-to-a-black-screen-what-options-do-i-have-to-fix-ithttp://askubuntu.com/questions/716957/what-do-the-nomodeset-quiet-and-splash-kernel-parameters-mean)帮我解决了这个问题。解决办法就是在启动命令中添加一个  *nomodeset*参数。这帮我安装了一个普通版本的 Ubuntu GUI,得以让我继续进行。
      4. 安装驱动程序
      英伟达的驱动是出了名地难运行,这一个也不例外。在其他用户的引导下,我去英伟达的网站下载了 GeForce 驱动程序,接着利用 Ubuntu GUI  对它进行安装。这个错误给我带来了很大的痛苦。
      无法检测到可兼容的英伟达显卡
      这又是一个鸡和蛋的问题。我没有再重新接上 GTX 1080 是因为没有驱动程序它无法工作。如果我重新接上,MSI  主板就会开始再次使用它,我就又回到了我开始的地方。解决办法是重新进入  BIOS,改变显卡优先级。我更新了设置,将优先级赋予给内置显卡,而不是选择新的显卡。这样我又可以重新接入 GTX 1080,并正常进入 Ubuntu。
      你好像在运行 X 服务器
      我通过使用这里的说明 (http://askubuntu.com/questions/149206/how-to-install-nvidia-run)  解决了这个问题,但是在最初,我都无法通过第一步:「点击  CTRL+ALT+F1,使用你的凭据登录。」我这样做了之后,屏幕又变成了空白,和显示器的连接就断开了。解决方法是启动  Ubuntu,进入文本模式,完成命令行的步骤。
      更好的办法
      最终让我感到欣慰的是所有的东西(驱动程序、CUDA、深度学习库等)都可以运行了。但是没过多久,因为一些配置文件我又把事情搞得一团糟。
      在 Ask Ubuntu 网站上浏览了几个小时之后,我注意到英伟达驱动程序上预先安装了新的 CUDA 8.0 工具箱,让你可以同时安装 CUDA  和驱动程序。
      我清除了现有的英伟达库,运行了下面的代码,然后一切都便正常运行了。你可以在这里  (http://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#ubuntu-x86_64)  看到完整的说明。
      
    1. wget
    2. http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.44-1_amd64.deb
    3. sudo dpkg -i cuda-repo-ubuntu1604_8.0.44-1_amd64.deb
    4. sudo apt-get update
    5. sudo apt-get install cuda
    复制代码

      然后将下面的代码添加多你的~/.bash_文件中:
    1. export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
    2. export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    3. export LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LIBRARY_PATH:+:${LIBRARY_PATH}}
    复制代码

      5. 安装深度学习库
      有很多的好文章都对必要的深度学习库和如何安装进行了描述。关键点在于你不能够盲目地跟随这些说明,尤其是关于如何安装的部分。因为这些说明经常更新,你可以在这些库的网站上找到更好的示例。下面是我安装的一些工具:
      CUDA利用 GPU 的并行计算平台
      cuDNN加速深度学习的英伟达库
      AnacondaPython 数据科学 (numpy, scikit, jupyter..)
      OpenBLAS快速的线性代数方法
      Tensorflow谷歌的机器学习框架
      Theano深度学习框架
      Keras另一种框架,可以简化 Tensorflow 或 Theano 的工作
      在这之后,我进行了一些测验以保证一切正常运行,并开始运行 Jupyter 笔记本。
      6. 设置远程访问
      再是一个可选步骤。但是如果你希望通过笔记本电脑远程操作,下面是一些方法。
      Teamviewer 是一款屏幕分享软件。如果你安装了这一软件,并在两个机器上运行,你便可以通过你的笔记本电脑控制 Ubuntu  主机,反之亦可。这让工作变得更加方便,但是在进行屏幕分享时做所有的事情都会有一点延迟且不灵活。

      SSH 和端口转发
      我想要远程通过 SSH 访问我的新机器,并且和它进行互动,就好像它是我在笔记本上多了个 Tab 键一样。为了做到这一点,我在 Ubuntu 上安装了  OpenSSH。
      sudo apt-get install openssh-server sudo service ssh status
      之后,我将 Comcast 路由器配置到将外部通信量直接转发到我的主机。我根据 Comcast 的说明,出乎意料的是这居然管用!我通过在  www.canyouseeme.org 查看端口 22,确认了这一点。部分过程可能需要你的公共 IP 地址,你可以通过运行下面的代码找到:
      dig +short myip.opendns.com @resolver1.opendns.com
      远程笔记本
      另外一个很酷的技巧就是,如果你喜欢  Jupyter,你可以在你的深度学习主机上运行你的笔记本,但是在你笔记本电脑上进行浏览和编辑。这里有关于这一技巧的一些教程  (http://www.justinkiggins.com/blog/zero-configuration-remote-jupyter-server/),所以我在下面只列出了命令:
      $laptop: ssh -l bfortuner@DEEPLEARNINGIP $server: jupyter notebook --no-browser --port=8888 $laptop: ssh -NL 8888:localhost:8888 bfortuner@DEEPLEARNINGIP
      现在你就可以在笔记本电脑的浏览器上访问 http://localhost:8888,开始编辑你在深度学习机器上的笔记本。


    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 04:34 , Processed in 0.132515 second(s), 22 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表