分类目录归档:Deep Learning

无 root 权限的服务器使用的一些记录

在没有 root 权限的服务器上安装 pip

假设有这么一台服务器,你没有 root 权限,然后预配置的 tensorflow 环境很神奇地调用不了 GPU,只有 pip2 没有 pip3,python2 python3 都试过了都没法用 GPU,pip list 也显示安装了 tensorflow-gpu,且给你用户的人信誓旦旦地告诉你我这配置没问题,但是你就是用不了 GPU,那么怎么办呢?

解决方法还是比较简单的,首先在用户态安装一个 pip(本文要装 pip3)

wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py --user

这时候 pip3 会被安装到 ~/.local/bin 下面,如果你的 PATH 里面有这个路径的话,直接 pip3 就可以运行。

然后就很简单了,该干嘛干嘛,比如安装 virtualenv 等等,只不过这时候你安装任何 python 包的时候,要加上 –user 参数,才能安装到 $HOME 下面,例如 pip3 install virtualenv –user。

我之前提到的那台服务器呢,在装了 pip3 以后,list 一下发现根本就没有 tensorflow-gpu,只有 tensorflow;pip2 里面有,但是调用不了显卡,搞不懂 IT 究竟是怎么配置的。最后我也懒得烦了,直接 virtualenv,装一个 tensorflow-gpu,问题就解决了。

安装一个简单的 deb 包(没有 dependency 问题那种)

apt download <package>
dpkg-deb -x package_x.y.z_x86_64.deb my-private-root
#dpkg-deb -e package_x.y.z_x86_64.deb my-private-control

然后就装在了你自己的 $HOME 下面。

如果你装的是 screen,且你对 /var/run/screen/ 也没权限的话,这么干:

mkdir ~/.screen && chmod 700 ~/.screen
export SCREENDIR=$HOME/.screen

然后把对应的内容添加到 .bashrc 里面去让你每次都可用,比如说:

PATH=~/usr/bin:$PATH
export SCREENDIR=$HOME/.screen

 

控制 AWS p2 实例的 GPU 频率

AWS p2 实例虽然方便,不用本地买显卡,但是碰到比较大的网络,p2 开一天就得 50 块钱,还是有点肉疼的。那么,既然付了钱,就把实例的性能发挥到极致吧。

Tesla K80 显卡通常工作在 AutoBoost 模式,这个模式会动态调整显卡的频率,在很多情况下都比最大频率要低,并且显卡驱动默认的功率限制并没有被开到最大,因此这两点都会影响我们最终获得的性能。

设置显卡工作频率比较简单:

sudo nvidia-persistenced
sudo nvidia-smi --auto-boost-default=0
sudo nvidia-smi -ac 2505,875 #(2505,875) for p2; (877,1530) for p3; (2505,1177) for g3

关于功率的调整,首先我们要查看显卡的最大功率限制 nvidia-smi -q | grep 'Power Limit',如果是 p2 实例,发现这个值是 175W,而驱动默认的限制是 149W,我们需要提高这个限制,使用  nvidia-smi -pl 175 即可,如果权限不足,用 sudo 运行。

参考资料:

https://www.ibm.com/support/knowledgecenter/en/SSFHY8_5.5.0/com.ibm.cluster.essl.v5r5.essl100.doc/am5gr_nvidcap.htm
https://devblogs.nvidia.com/increase-performance-gpu-boost-k80-autoboost/
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/optimize_gpu.html

NumPy 部分操作的理解

  • 矩阵操作中 axis = -1,相当与对矩阵最后一维进行操作
  • NumPy 的 ndarray 进行算术运算符操作是 element-wise 的,即是逐元素进行操作
  • np.mean 等操作中的 keepdim 选项,将平均掉的那一维保留,但是长度只为 1

Reference:

  • http://www.scipy-lectures.org/intro/numpy/operations.html

Amazon AWS 配置 TensorFlow 与 Keras 环境记录

因为一些需求,需要在 AWS 上进行一些 GPU 的计算,按道理 AWS 已经提供了深度学习的 AMI 映像供我们使用,但是我实在是搞不清他到底做了些什么,因此也不怎么会用。加上自带各种用不到的库实在太大,为了放下我所有的数据需要开 80G 的 EBS 存储卷,感觉有些小贵,无奈之下只能从最干净的 Ubuntu 16.04 开始配置一台符合我需求的 EC2 实例。

具体步骤我打算按照 Keras 官方文档上的方案,由于我也不确定能不能搞定,这里就做一个实时的记录:

  • 配置 python 与 CUDA 环境,这个相对比较简单,需要注意一点的是 cuDNN 库需要在国内自己找,这个 CSDN 上有很多,文件名是 cudnn-8.0-linux-x64-v5.1.tgz 就好了。这一步我进行得十分顺利。
  • Keras 相关依赖包的安装,这里开始出现了问题
    • 首先安装 Anaconda,需要注意一点的是,Anaconda 安装包会将其自身路径写入 .bashrc,但是需要执行 source .bashrc 这条命令才能使 Anaconda 做的修改生效,这里一定要注意,不要认为是安装出了问题。完成之后运行 python,应该就会发现你的 python 已经是 Anaconda 发行版了。
    • 接下来 pip install –U –pre pip setuptools wheel 这步也出现了问题,执行 pip 后报错 “FileNotFoundError: [Errno 2] No such file or directory: ‘/home/ubuntu/anaconda3/lib/python3.6/site-packages/setuptools-27.2.0-py3.6.egg’
      • 解决方案是这里,手工指定 setuptools 版本进行安装:pip install setuptools==27.2.0
    • 然后是安装 scipy numpy tensorflow-gpu keras 等一干所必要的包,安装一切顺利
    • 检查 TensorFlow 安装时再次出现问题,import tensorflow 出现 ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory
      • 查询后发现,pip 默认安装是 tensorflow 1.3,这个版本需要 cuDNN 6.0,但是考虑到教程通用性需求,不选择升级到 tf 1.3,采用 pip install –U –pre tensorflow-gpu==1.2 命令强制安装 1.2 版本使用 cuDNN 5.1

之后的操作就相当顺利了,所有的操作都和本地类似,还是熟悉的东西好用啊。

由于我不需要现在就继续进行计算,因此在停止了实例之后,为其配置的环境创建一个 AMI,供下次继续计算时开启竞价型实例使用。