前面部分很多只是笔者学习知识记录的部分并且会随着学习的深入不段增加知识,没有什么参考价值,实战部分或许更有借鉴意义。
0 知识学习 1 官方文档学习官方文档参考
学习到的知识及需要学习的知识:
-
异步训练
-
支持keras高阶API和自定义训练(实验需要,目前只学习keras)
-
jobs和tasks两个概念需要明确
-
集群中的三个角色的分工需要了解:chief、worker、ps
-
portpicker是什么?为什么需要这个东西?
-
multiprocessing是什么?为什么需要这个东西?
-
sidecar评估如何实现?
-
官方示例需要创建2个ps服务器和3个worker服务器
-
每个worker上支持调用多个GPU但需要保证所有worker上的GPU数目是一致的。
-
shards成为分片,为将一个变量分为多个小变量
-
如果将数据集转换为tf.data.Dataset输入,则需要使用Dataset.shuffle,Dataset.repeat进行处理
- Dataset.shuffle是用来打乱数据集的,以确保每个worker可以更均匀地进行迭代训练
- Dataset.repeat是在没有参数调用时无限重复数据集。因为worker训练不同步,他们可能会在不同的时间完成数据集的处理。
-
回调与检查点
- tf.keras.callbacks.ModelCheckpoint:以特定频率保存模型
- tf.keras.callbacks.BackupAndRestore:当某个节点中断后,保存备份当前模型和训练轮数,以便后续继续训练。
- tf.keras.callbacks.TensorBoard:在TensorBoard可视化插件中查看模型的日志信息。
-
评估方法
- inline evaluation:推荐,因为适合大规模的模型和数据集,单机很难处理,比较适合多机分布式。
- 直接评估。适合小模型和小数据集。
- 分布式评估。适合大模型和大数据集。
- sidecar evaluation:不推荐,暂不学习
- inline evaluation:推荐,因为适合大规模的模型和数据集,单机很难处理,比较适合多机分布式。
-
通常需要将多个步骤打包到一个函数中以实现最佳性能。
视频链接在此
out-of-the-box:开箱即用,无须另外配置
什么时候需要使用ParameterServerStrategy?
- 异步训练
- 大数据集输入
- 工作节点经常被其他线程所占用,可调用的资源不多。
tf2支持的API:coordinator.schedule()和coordinator.join()方法。
- 在TF1中,都是采用Multi-Client Setup,造成多个worker之间很难协调,造成混乱;TF2中采用Single-Client Setup,只需要从Coordinator中获取变量。
- 测试起来非常方便,因为可以在一台机器上进行测试。
- 需要定义一个coordinator,具体作用暂未知。—>client
- 数据并行,矩阵串联计算
- workers:ps最好为2:1,或接近
参考GitHub项目
出错:
参考github项目
貌似需要多台机器,像视频里边那样开多个桌面,连接网段相同最后一段不同的局域网,不知道怎么操作,暂时搁浅一段时间吧。
具体实战见下篇文章



