简明深度学习工作站常用技巧和软件配置
使用自己的 PC 作为深度学习工作站已经有一段时间了。由于硬件配置是根据自己预算量力而行(当然是越贵越好 🤷♂️),所以这里只讨论软件配置。
由于笔者经验较少,能力有限,本文目的在于抛砖引玉而非最佳实践,帮助大家构建易用的深度学习工作站。
深度学习工具相关
- Python 包管理工具:这里推荐还是 Anaconda,如果很想保守一点,可以在 pyenv 里安装 miniconda。当然这个问题是见仁见智,Google 开发者的一期视频大概也是这么讲的:https://www.bilibili.com/video/av24863161/
- CUDA 和 cudnn:这个当然是根据目前你使用的深度学习框架来配置,目前主流的是 CUDA 9.x。似乎 Anaconda 也可以无痛让多个版本的 CUDA/cudnn 共存。比如,在通过 conda 安装 PyTorch 的时候,默认情况下会自动安装所需的 CUDA。
- 编辑器:老生常谈,当然是 Jupyter Notebook 了,配合 nbextensions 和 nbextensions_configurator,可以实现自动代码格式化(学术界太多 shit 一样的代码了 )。如果你的 conda 有多个环境但是懒得为每个环境都单独开一个 notebook,可以直接为每个环境创建一个 kernel,这样随便在任意环境下跑 Jupyter Notebook 都可以使用不同的工具链了,比如我个人就有 TensorFlow、PyTorch 和 Python 2 专用 kernels。Help 菜单下就有快捷键介绍,经常看看很有帮助。
- Jupyter Notebook 快捷键:很值得一学的,比如 Shift + Tab 有个简单的函数文档,有时候特别好用。
- 可视化:常用的还是 TensorBoard,因为社区强大,功能也挺多的(虽然我只用 scalar 😂)。即使目前主要用 PyTorch 了,也可以通过 tensorboardX 支持这些功能。
通用工作站/服务器相关
- 端口映射:由于自己用学校宿舍的垃圾网络(吐槽下英国 ASK4 这个毒瘤公司,早点倒闭吧。我写这篇博客的时候都断网了)做了内网封锁,只能用一台公网 VPS 做跳板机,把 SSH、jupyter、TensorBoard 的端口暴露出来。在这个领域,ngrok 是个传统工具,个人看来并不好用。笔者选择了 frp 作为端口映射工具,原因如下:
- 简单明了的配置文件
- 提供 Web UI 界面
- 支持 kcp 协议转发
- 与 systemd 配合比较完美,随客户端系统自动启动、连接
- 不过目前链接断开后似乎不会重连,所以使用 TeamViewer 作为备选方案,用于重启 frp 服务。
- SSH 多任务:由于自己服务器用了 yubikey 做二次验证,开多个 terminals 连接服务器做二次验证还是挺烦的。所以用了 iTerm 2 配合
tmux -CC
命令(参见 iTerm 2 documentation)多做任务窗口。其实 Jupyter Notebook 也可以开 Terminal,这两种方式都挺好用的。 - 任务终端重连:
screen
是个很好用的工具,使用screen -S [name]
创建虚拟 screen,跑耗时任务,即使 SSH 链接断开也没关系。更多使用技巧参见 GNU screen quick reference。
其他
- Dash 仍旧是一个 macOS 上不错的文档查询工具,也是大幅提升开发效率的软件,强烈推荐入手。
- Visual Studio Code 和 PyCharm 仍旧不错,不过由于大部分实验代码都直接跑在工作站上,这两者的使用频率并不高。
总结
今天趁着网络不好大概总结这么多,以后再慢慢补充完善。工具这种事情肯定是见仁见智,本文的目的也不是为了提供一个完美的解决方案,只是一个参考而已。如果你有其他不错方案,欢迎在评论里提出。感谢。