微软 KB4598298 更新功能
|
不同的企业在实施DevOps的时候可以根据企业实际情况定制不同的流水线。 注意流水线设计最基础的是要实现持续集成和持续部署能力,里面涉及到最基本的内容包括了源代码和配置管理,编译构建,自动化部署。 在整个DevOps最佳实践中实际包括了敏捷研发和过程管理,因此可以看到整个DevOps流水线涉及到了类似Scrum敏捷研发工具之间的集成。而集成的重点主要是组织,团队,产品,项目,项目版本,任务,缺陷。 原来谈的比较多的是CI/CD,即持续集成和持续部署。而在DevOps实施中谈的比较多的是持续集成和持续交付。持续集成过程不包含最终生产环境面向客户的部署和交付过程,而持续交付则单独出来。
持续集成和持续交付的分离,也带来了流水线设计上的区别。简单的流水线你可以从编译构建,一直编排到测试验证到生产环境发布。而在持续集成和持续交付分离后,往往交付流水线需要进行单独设计。 最近在某乎看到一篇文章,大意是海淀妈妈们已经嫌弃 Python 低级,准备让娃直接入门 C++。看得我这个写了 15 年代码的老码农心惊胆战,感觉随时都会被后浪拍死在沙滩上。我其实非常赞成小朋友学习编程的,但做为一名码农奶爸,我觉得还是有必要给各位海淀妈妈们解释一下什么是计算机编程,C++ 和 Python 有什么区别,娃是否应该学习计算机编程,以及编程怎样从入门到放弃。 什么是计算机编程 学习计算机编程,简单来说就是学习怎样给计算机下命令。你说话,让计算机听明白,然后老实去做,和你平时教育娃没什么区别。不过计算机非常听话,只要你能说明白,他就一定能按你的意思执行,比带娃省事多了。
当然,想要给计算机下命令,你得先了解计算机。我们天天使用的电脑、iPhone、iPad 等等,其实遵循的都是“冯·诺伊曼架构”,简单说就是要有 CPU,内存,显示器和键盘。你用键盘给 CPU 下命令,CPU 和内存一起合作,算出结果输出给显示器就可以。如下图所示: 与标准数据并行基准相比,ZeRO 在三个阶段中节省的内存和通信用量。 让我们来回顾一下 ZeRO: 为了解决数据并行和模型并行存在的问题,ZeRO 提供了三阶段的优化方法,分别为优化器状态分割、梯度分割、参数分割,三个阶段按顺序实施。 在优化器分割状态:ZeRO 降低了 3/4 的内存,通信量和数据并行相同; 加入梯度分割:降低了 7/8 的内存,通信量和数据并行相同; 加入参数分割:内存减少与数据并行度呈线性关系。例如,在 64 个 GPU 上进行分割的时候,可以将内存降至 1/64。在通信量上有 50% 的提升。 在去年 9 月份的博客中,微软这么介绍 ZeRO-Offload: ZeRO-Offload 继承了 ZeRO-2 的优化器状态和梯度分割。但与 ZeRO-2 不同的是,ZeRO-Offload 不在每块 GPU 上保持优化器状态和梯度的分割,而是将二者卸载至主机 CPU 内存。在整个训练阶段,优化器状态都保存在 CPU 内存中;而梯度则在反向传播过程中在 GPU 上利用 reduce-scatter 进行计算和求均值,然后每个数据并行线程将属于其分割的梯度平均值卸载到 CPU 内存中(参见下图 g offload),将其余的抛弃。一旦梯度到达 CPU,则每个数据并行线程直接在 CPU 上并行更新优化器状态分割(参见下图 p update)。
之后,将参数分割移回 GPU,再在 GPU 上执行 all-gather 操作,收集所有更新后的参数(参见下图 g swap)。ZeRO-Offload 还利用单独的 CUDA 流来穷尽通信与计算中的重叠,从而最大化训练效率。 (编辑:周口站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
