机器学习研究中的生产力技巧

机器学习研究中,经常需要并行运行许多实验,例如超参数搜索。 在这篇文章中,我们在一个地方收集了一些有用的技巧,以提高生产率。

基本设置

  • 使用Miniconda + JupyterLab
  • 修改~/.bashrc
    PATH
    export PATH=/miniconda3/bin:$PATH
  • 修改~/.vimrc :默认选项卡为4个空格
 设置tabstop = 4 
设置shiftwidth = 4
设置expandtab

服务器相关

  • passwd :更改服务器上的用户密码
  • ssh :通过JupyterLab通过SSH访问服务器,另请参见此处
    –服务器端: $ jupyter lab --no-browser --port=8000
    –本地: $ ssh -N -L localhost:8001:loacalhost:8000 user@remote_host
    $ ssh -N -L localhost:8001:loacalhost:8000 user@remote_host
    -N :指定不执行任何远程命令的SSH。
    -L :端口转发
    –终止端口: fuser -k 8000/tcp
  • xvfb :服务器上的假屏幕
    xvfb-run -a -s “-screen 0 1400x900x24 +extension RANDR" --python file.py
    –注意:它需要安装带有标志--no-opengl-files nvidia驱动程序和带有标志--no-opengl-libs CUDA安装
  • 获取用户的内存利用率:
    ps -U user_name --no-headers -o rss | awk '{sum+=$1} END {print int(sum/1024/1024) "GB"}' ps -U user_name --no-headers -o rss | awk '{sum+=$1} END {print int(sum/1024/1024) "GB"}'

一些工具

  • htop :CPU监控
  • gpustat :GPU监视。 在nvidia-sim之上具有更好的可视化效果
  • terminator :将所有打开的终端集中在一个位置

杂项

  • 尽可能使用键盘快捷键:GNOME,浏览器(Chrome),Jupyterlab…
  • 实验并行化:
    –将超参数配置为字典(可以使用某些函数来生成字典列表以进行扫描)
    –使用ProcessPoolExecutor或现有库(例如,Ray,Lagom)并行执行运行功能,每个库针对一个配置字典。
    –不建议使用命令行参数(xargs),因为这会增加代码的复杂性,并且也不太方便更改超参数,并行化等的设置。