December 25, 2019

深度学习环境搭建

深度学习环境搭建
2080TI + Mantiz + XPS15 9750, ubuntu18.04

实验一直用的是 Google Colab百度的 aistudio。蹭 TPU/GPU 蹭的还算爽,吧,就是前者网络时断时续、后者只能跑 paddlepaddle,免费给用,推广自家产品,也是,没啥话说。生产环境用的 UCloud 的 gpu 服务器,跟所有其他 gpu 服务器一样,小贵,所以还是想自己折腾一个本地环境,方便随时折腾。

手头正好有两台 Dell 的 XPS 15 9570,看了下,带一个雷电3 的接口,恰好前几天听说了 eGPU 这个东西,正好折腾一下,搜了一下外接的显卡坞有技嘉一款,还有一个 Mantiz的,后者长得比较顺眼,还可以内置一个 SATA3 的硬盘,挺好,但比较纳闷的是既然硬盘都有了,内部空间也够,干脆电路上再进一步加上 cpu、内存得了,呗...

不废话,第一步先把 xps15 做成 win+linux 双系统,话说 xps15 的系统做的不错,recovery 模式也很方便,虽然有点浪费硬盘(光隐藏系统镜像就11g,还不包括恢复系统)。开机进入(F12)BIOS,把硬盘模式从 RAID ON 改成 AHCI,注意!改了之后 windows 就进不去了!想用 windows 可以再改回来...

除了硬盘模式,还有 Secure Boot 也需要关掉,选 Disable,搞定后重开机。

当然,默认你已经把磁盘分区搞好,给 linux 预留了分区...

安装 Linux 比较容易了,我用的是 ubuntu 18.04.3 LTS 版本,找个 U盘做成启动盘,启动的时候选 u盘,分区的时候稍微小心点,别把系统或者其他重要数据分区干掉就没啥问题。

装好 linux 后就是安装 GPU 驱动了,这里稍微有些麻烦,需要先把原来带的反向工程得来的 noveau 驱动去掉再装,否则在 login 的时候会无限循环进不了系统。

驱动安装有好几种方式,推荐 ubuntu-drivers devices 这种吧省心些,不推荐下载二进制文件自己执行安装。

在安装之前需要想好装那个版本的驱动,对应的 cuda 什么版本、cudnn 什么版本,装错了就白浪费时间。由于我要在机器上搭配 3 个环境: Tensorflow 1.4+/Pytorch1.2/PaddlePaddle 1.6.2,查过文档后发现 Paddle 这货只支持 CUDA 10.0, 所以其他两个 lib 都照顾下它吧,最后安装的版本如下:

  1. nvidia-driver-430 开源
  2. cuda 10.0
  3. cudnn 7.6

其实只要 cuda 版本没问题,cudnn 和 nvidia-driver 要求没有那么严格,如果想折腾可以自己试试,不想折腾就按照这个来就好。

如果由于系统升级等原因导致 nvidia-smi 执行出问题,直接安装 apt install nvidia-driver-440 最新版的驱动就好,不影响 cuda 和 cudnn

当第一步驱动装好后先确认两件事情:

  1. 可以正常开机进系统
  2. 执行 nvidia-smi 查看下驱动是否正常工作--2019-12-25--12.31.45

如果有问题试着查一下是不是驱动装完后没有更新 initramfsupdate-grub 导致的,总之先把驱动装好再进行下面的动作就对了。

cuda 10.0 装好,cudnn 7.6+ 需要注册账号后登陆,如果 nvidia 的官网访问慢请自行搬梯子,也可以参考这个方案,临时搭个代理。

以上工作都完事,就可以安装 Anaconda3,Python2.x 明年就正式退役了,所以没有特别的原因就别 Anaconda2 了.这步需要注意的是装完了之后一定记得把 conda 的源切换到国内源,[比如清华的](https://mirror.tuna.tsinghua.edu.cn/help/anaconda/_,否则安装过程太慢

conda 装好后,分别创建 pytorch、tensorflow/keras、paddle 的环境,装好依赖。然后开始配置 jupyter notebook。

这里有个需要注意的地方:

为了能在 jupyter notebook 中自由切换不同运行环境,需要安装一个叫 nb_conda 的包(conda install nb_conda), 装好后需要确认再每个环境里面都安装了 jupyter notebook! 否则你会发现无法切换到该环境下。

一切都配置完成后,你就可以在本地局域网愉快的访问这台机器了,有两个 tips 分享:

  1. 如果想加快拷贝速度可以考虑类似 BBCP 的这种多线程 scp 拷贝方式。
  2. 如果想从外网访问的话,比较稳妥的方式是有一个固定 ip,比如在阿里云、百度云等公有云上租一个便宜的主机,然后给分配的 ip 配置较高的带宽,之后通过 frp 或者 nps配置一个比较稳定的外网映射,这样你就可以在几乎任何地方自有访问这台机器了。

updated: 2019-12-31
content: 配合 visual studio code 的 Remote-SSH 插件,可以做到近乎完美的远程开发体验。下一个目标是摆脱固定开发机器的依赖,code anywhere