在机器学习研究中,经常需要并行运行许多实验,例如超参数搜索。 在这篇文章中,我们在一个地方收集了一些有用的技巧,以提高生产率。
基本设置
- 使用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),因为这会增加代码的复杂性,并且也不太方便更改超参数,并行化等的设置。