CS194 Full Stack Deep Learning(2) Infrastructure and Tooling

0. 前言

  • 相关资料
  • B站视频(字幕是自动生成的,但也差不多够用)
  • 引子:
    • 理想状态下的工作:获取数据 -> 构建预测系统(如服务器API或本地部署程序)
    • 实际工作:标注数据 -> 构建/测试模型 -> 管理计算资源 -> 训练/测试模型 -> 部署模型 -> 监控测试结果、构建 flywheel
  • 为了实现实际工作中的各种功能,我们需要选择开发套件与相关工具。
    • 本节课关注的就是中间这部分。

image-20210308020723787

  • 主要内容图包括:
    • 编程语言以及编辑器选择

1. 编程语言与编辑器

  • 语言 Python,主要因为第三方包多
  • 编辑器选择很多,推荐的有
    • VSCode:推荐使用的编辑器
    • Jupyter:Data science 中常用
      • 适合编写 getting started 教程等简单程序
      • 不适合复杂的任务,如难以版本控制、难以测试、没有IDE功能(如代码跳转)、难以运行分布式任务
    • Streamlit:完美解决了interactive applets的问题,即写Python发布一个简单Web应用(替代flask和前端)

2. 计算资源

2.1. 为什么计算资源很重要

  • 可以从两个维度考虑对应功能
维度 所需功能 理想状态 解决方案
开发(Development) 写代码、调试模型、查看结果 快速开发模型并进行训练,最好有图形界面 有1-4GPU的桌面系统或云服务器
训练/测试(Training/Evaluation) 模型结构以及超参数搜索、训练大模型 快速执行训练并回顾结果 4卡桌面系统,或GPU集群
  • 另外,随着深度学习的发展,模型也越来越大,需要的算力也越来越多。
  • 算力很重要,但新模型、新结构也很重要,可以用更少的算力做更多的事情。

2.2. 如何选择计算资源

  • 本节主要介绍以下几个部分:
    • GPU简介
    • 云服务器简介
    • 实体机简介
    • 如何选择
  • GPU简介:
    • 主要就是使用NVidia设备,目前最快的是TPU(只能在Google Compute Platform中使用),Intel和AMD正在尽力赶上。
    • GPU基础如下表,要介绍一下这些参数
      • Arch就是GPU架构,从上到下就是进化的过程
        • 不要使用Kepler Maxwell架构,比Pascal、Volta慢2-4倍,不应该买,太老了。一般比较便宜。
        • Pscal架构的(P100/1080ti)如果要买就买二手,中档的
        • Volta和Turing是现在应该买的,支持混合精度
          • 2080ti比1080ti在32bit上快1.3倍,但在16bit快2倍
          • 当时V100(2019年秋天)是最快的
      • Use-case就是面向对象,用于服务器(Server)、发烧友(Enthusiast)还是普通用户(Consumer)
      • RAM就是显存大小,目前最重要的参数
      • 32bit TFlops 和 Tensor TFlops 就是计算速度,32位浮点数计算速度,Tensor Cores是为深度学习混合精度计算设计的
      • 16bit就是只使用16位运算(而不是混合精度)
        • 这个只在P100上是有,其他卡要么不支持16bit,要么就是支持Tensor Cores(混合精度计算,比单纯16bit好,所以就不用16bit了)
        • 如果只有P100那就用16bit,速度提高2倍,显存提高1.5倍。

image-20210309004840894

  • 云服务供应商对比
    • AWS最贵,只能使用预设实例。可以关注下Spot实例,很便宜。
    • Google Cloud Platform有多重GPU选择(不是预设实例,可自己选择)且支持TPU
    • 没人推荐使用Azure
    • 有一些新兴选择,国外的也不关心了。
  • 买实体机,可以买组装好的(pre-built),也可以自己组装
  • 价格对比思路:
    • 计算实体机与云服务器的价格,看看实体机的价格能够租服务器跑多久。
    • 另一种思路,我们需要尽快完成训练,一次开多个实例进行训练,总时间(GPU hours)不变,但由于并行训练,实际过去的时间少了。
  • 实际情况:
    • 云服务器很贵,但扩展很容易。
    • 本地服务器便宜,但超过一定数量后维护非常麻烦。
  • 建议:
    • 对于单人开发者、刚刚起步的团队:使用4卡Turing PC开发,使用相同的4卡PC训练(直到architecture is dialed in),如果需要更多算力可以再买一台或租云服务器。
    • 对于大公司:每个ML Scientist配一台4卡Turing PC,或使用V100实例,使用云服务器实例进行训练与测试。

3. 资源管理

  • 主要就是服务器计算资源管理。
  • 需求:多个人使用多台服务器,每个人使用不同的环境。
  • 目标:能够整合各类资源,非常容易地进行多个实验。
  • 解决方案:
    • 手工表格分配,低端但用的人很多。
    • Python脚本,会自动占用空闲资源,会使用以前的集群任务(Job)调度,每个Job定义了要进行的任务,然后这些Job会按顺序执行。
    • Docker(轻量级虚拟机) + Kubernetes(在集群中运行多个容器)
    • Kubeflow,Google开源项目,主要处理 multi-step ML workflows,有超参数调节的插件。
    • polyaxon,全栈机器学习平台,开源,但也提供了一些付费功能。

4. 其他

  • 深度学习框架

    • 如果没有特殊要求,就TensorFlow/Keras和PyTorch二选一。
      • 目前发展方向类似,都是易于开发的 define-by-run 模式(即TF中的eager模式),以及多平台优化的静态计算图(即PyTorch中的TorchScript)。
    • 目前新项目PyTorch较多。
    • fast.ai 可能适合一些新手且不深入的用户。
  • 分布式训练

    • 分布式训练有两种方式,数据并行或模型并行。
    • TF/PyTorch自带分布式训练功能。
    • 其他解决方案包括Ray、Horovod。
  • 实验管理

    • 现状:就算一次跑一个实验,时间长了也会搞糊涂,更不要说跑多个实验了。
    • Tensorboard:记录单次实验不错的方案,但管理多个实验非常不方便。
    • Losswise/Comet.ml/Weights & Biases:这些都类似,都是安装一个包,在训练过程中按照tensorboard的方式调用,不同之处在tensorboard保存数据在本地,而其他库则是上传到对应服务器,然后到对应网站中查看。
    • MLFlow Tracking:开源软件,可以本地部署相关平台,功能非常强大。
  • 超参数调节:

    • Hyperas,即 Keras + Hyperopt
    • Sigopt,没细看
    • Ray-Tune:看来后续要查一下这个相关内容了,有很多SOTA算法
    • Weights & Biases 有相关内容
  • All-in-one,即一体化解决方案

image-20210311012450714

猜你喜欢

转载自blog.csdn.net/irving512/article/details/114650863