- 1.2 服务介绍
- 1.3.1 概念介绍
- 1.3.2 快速入门
- 1.3.3 申请Quota
- 1.3.4 集群环境
- 1.3.5 Fdsfuse介绍
- 1.3.6 Tensorflow中使用hdfs
- 1.4 客户端使用
- 1.4.1 安装命令行工具
- 1.4.2 使用命令行工具
- 1.4.3 使用Python SDK
- 1.4.4 使用Web控制台
- 1.5 TrainJob功能
- 1.5.1 训练任务组件和流程
- 1.5.2 上手Trainjob
- 1.5.3 使用GPU
- 1.5.4 使用FDS
- 1.5.5 使用Fuse
- 1.5.6 Trainjob高级功能
- 1.5.6.1 分布式训练
- 1.5.6.2 使用前置/后置命令
- 1.5.6.3 自动超参数调优
- 1.5.6.4 自动超参数调优Hpjob
- 1.5.6.5 自动超参数调优Hpjob
- 1.5.6.6 使用自定义镜像
- 1.5.6.7 使用TensorFlow模板应用
- 1.5.6.8 使用HDFS
- 1.5.6.9 使用HDFS FUSE
- 1.6 ModelService功能
- 1.6.1 模型服务使用流程
- 1.6.2 TensorFlow Serving介绍
- 1.6.3 使用GPU模型服务
- 1.6.4 使用多副本和负载均衡
- 1.6.5 在线服务的模型升级
- 1.6.6 模型服务监控
- 1.6.7 使用前置命令和后置命令
- 1.6.8 定制模型服务Docker镜像
- 1.6.9 使用客户端预测
- 1.6.9.1 使用通用gRPC客户端
- 1.6.9.2 使用Python客户端
- 1.6.9.3 使用Java客户端
- 1.6.9.4 使用Scala客户端
- 1.6.9.5 使用Golang客户端
- 1.6.9.6 使用C++客户端
- 1.7 DevEnv功能
- 1.7.1 开发环境使用流程
- 1.7.2 使用命令行管理开发环境
- 1.7.3 使用WEB控制台管理开发环境
- 1.7.4 高级功能
- 1.7.4.1 使用GPU开发环境
- 1.7.4.2 使用FDS FUSE存储
- 1.7.4.3 使用HDFS存储
- 1.7.4.4 使用HDFS FUSE存储
- 1.7.4.5 网络和安全
- 1.7.4.6 监控
- 1.7.4.7 定制开发环境Docker镜像
- 1.7.5 最佳实践
- 1.8 使用率监控
- 1.8.1 GPU使用率监控
- 1.9 TensorboardService功能
- 1.9.1 TensorBoard使用流程
- 1.9.2 TensorBoard介绍
- 1.10 API文档
- 1.10.1 签名规范
- 1.10.2 API文档
- 1.11 问题反馈
- 1.11.1 FAQ
- 1.11.2 技术支持
1.5.6.1 分布式训练
简介
TensorFlow只是library,分布式TensorFlow应用需要我们在多个节点启动Python脚本组成分布式计算集群。
Xiaomi Cloud-ML支持标准的分布式TensorFlow应用,用户只需编写对应的Python脚本即可提交运行,用法与单机版类似。
代码规范
由于分布式TensorFlow应用需要启动多节点,每个节点需要知道自己的角色,一般都是通过命令行参数传入,而用户自定义的命令行参数名和个数可能不同。Cloud-ML要求用户通过DISTRIBUTED_CONFIG或TF_CONFIG(Cloud-ML原先只支持tensorflow分布式时,使用TF_CONFIG这个环境变量传递分布式参数,当前仍保留,后期会统一为DISTRIBUTED_CONFIG)这个环境变量传入集群和节点的信息。
如1个master、1个ps、1个worker的情况,传入的参数如下:
DISTRIBUTED_CONFIG='{"cluster": {"master": ["127.0.0.1:3000"], "ps": ["127.0.0.1:3001"], "worker": ["127.0.0.1:3002"]}, "task": {"index": 0, "type": "ps"}, "environment": "cloud"}'
TF_CONFIG='{"cluster": {"master": ["127.0.0.1:3000"], "ps": ["127.0.0.1:3001"], "worker": ["127.0.0.1:3002"]}, "task": {"index": 0, "type": "ps"}, "environment": "cloud"}'
注: 其中 environment
赋值为 cloud 表明为云上分布式训练,tensorflow 框架会根据这个变量来判断 is_chief
。
然后用户Python代码中可以直接读取环境变量,获取cluster spec和type、index信息。
if os.environ.get('DISTRIBUTED_CONFIG', ""):
env = json.loads(os.environ.get('DISTRIBUTED_CONFIG', '{}'))
task_data = env.get('task', None)
cluster_spec = env["cluster"]
task_type = task_data["type"]
task_index = task_data["index"]
代码实例
我们也实现了标准的分布式TensorFlow应用,代码地址 https://github.com/XiaoMi/cloud-ml-sdk/blob/master/cloud_ml_samples/tensorflow/linear_regression/trainer/task.py 。
本地运行
本地启动分布式TensorFlow应用,以samples代码为例,可以先打开3个终端,然后分别运行下面的命令。
CUDA_VISIBLE_DEVICES='' DISTRIBUTED_CONFIG='{"cluster": {"ps": ["127.0.0.1:3001"], "worker": ["127.0.0.1:3002"]}, "task": {"index": 0, "type": "ps"}}' python -m trainer.task
CUDA_VISIBLE_DEVICES='' DISTRIBUTED_CONFIG='{"cluster": {"ps": ["127.0.0.1:3001"], "worker": ["127.0.0.1:3002"]}, "task": {"index": 0, "type": "worker"}}' python -m trainer.task
使用Xiaomi Cloud-ML
如果使用Xiaomi Cloud-ML,只需要把Python代码打包,然后运行时传入 -D
,之后根据提示输入task type的名称、数量、资源及定制参数等信息:
cloudml jobs submit -n distributed -m trainer.task -u fds://cloud-ml/linear/trainer-1.0.tar.gz -D
分布式训练任务提交后,可以通过命令行看到多个任务的启动,查看具体某个worker日志发现分布式训练任务也正常完成。
cloudml jobs list
cloudml jobs logs distributed-worker-0
cloudml jobs logs distributed-ps-0
参数介绍
-D
表示使用分布式,按照提示输入分布式相关的信息即可,支持通用分布式
旧版本分布式参数:
-p
表示集群的ps的个数,暂时只支持TensorFlow深度学习框架。-w
表示集群的worker个数,暂时只支持TensorFlow深度学习框架。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论