
人工智能深度学习机器学习强化学习【免费下载链接】TensorLayerDeep Learning and Reinforcement Learning Library for Scientists and Engineers项目地址https://gitcode.com/gh_mirrors/te/TensorLayer点击查看免费下载tensorlayer.distributed是 TensorLayer 提供的分布式训练辅助模块Alpha 版本接口后续可能调整它基于 Horovod 与 TensorFlowMonitoredTrainingSession构建了一个高层Trainer可以让同一份模型代码从单 GPU 无缝扩展到同一集群内多台机器的多块 GPU 上。读完本文你将掌握 Trainer 的全部参数与底层运行机制、MNIST/CIFAR-10 两种分布式训练范例以及 OpenMPI 安装与mpirun启动的完整流程。模块总览distributed 提供什么本文对应的 API 文档位于 docs/modules/distributed.rst模块源码位于 tensorlayer/distributed.py。模块的公开接口由__all__定义__all__ [TaskSpecDef, TaskSpec, DistributedSession, StopAtTimeHook, LoadCheckpoint, Trainer]其中Trainer是当前推荐使用的高层训练接口TaskSpecDef、TaskSpec、DistributedSession、StopAtTimeHook、LoadCheckpoint是面向 TensorFlow 原生分布式parameter server 模式的辅助 API均已在 2018-10-30 标记为弃用deprecated官方建议统一改用Trainer。模块通过LazyImport(horovod.tensorflow)惰性加载 Horovod因此只有在真正构建分布式训练时才会引入 Horovod 依赖见 tensorlayer/distributed.py。tensorlayer.distributed通过 tensorlayer/init.py 中的distributed LazyImport(tensorlayer.distributed)暴露给用户使用方式为tl.distributed.Trainer(...)。Trainer分布式训练的高层接口Trainer是构建在 TensorFlowMonitoredTrainingSession与 Horovod 之上的高层训练接口它透明地将 TensorLayer 模型的训练从单 GPU 扩展到分布在集群不同机器上的多 GPU。官方推荐的配套示例位于仓库 examples/distributed_training 目录。Trainer 的默认参数选择参考了 Facebook 论文Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour中提出的线性缩放学习率linear scaling rule策略。构造参数详解Trainer( training_dataset, build_training_func, optimizer, optimizer_args, batch_size32, prefetch_sizeNone, checkpoint_dirNone, scaling_learning_rateTrue, log_step_size1, validation_datasetNone, build_validation_funcNone, max_iterationfloat(inf) )参数类型说明training_datasetTensorFlowDataSet由样本与标签 zip 而成的训练数据集。Trainer 会根据 GPU 数量自动对数据集做 shard 切分build_training_funcfunction构建训练算子的函数以训练数据集为输入返回神经网络、损失函数、字符串标签到待记录张量的字典/列表optimizerTensorFlowOptimizer损失优化器。Trainer 会按 GPU 数量自动线性缩放学习率optimizer_argsdict优化器参数字典必须包含learning_rate字段且为 float 类型。默认按 GPU 数线性缩放可用scaling_learning_rate关闭batch_sizeint每个 mini-batch 的样本数默认 32prefetch_sizeint 或 None数据集预取缓冲大小。数据准备较重时设置该参数可重叠 GPU 训练与数据准备默认 None此时取batch_sizecheckpoint_dirNone 或 strTensorFlow 模型 checkpoint 保存路径。只有 master 节点会保存 checkpoint传入 None 则禁用log_step_sizeint每训练 N 个 mini-batch 记录一次训练信息默认 1validation_datasetNone 或DataSet可选验证数据集。通常只有 master 需要频繁做验证build_validation_funcNone 或 function构建验证算子的函数返回共享训练网络权重的验证网络及若干验证指标scaling_learning_rateBoolean是否按 GPU 数线性缩放学习率默认 Truemax_iterationint最大训练迭代mini-batch数默认math.inf。设为较小值可提前结束训练常用于测试公开属性与方法成员类型说明training_network属性训练模型TensorLayerLayersession属性Trainer 包装的 TensorFlowMonitoredTrainingSessionglobal_step属性迄今已训练的 mini-batch 数validation_metrics属性验证指标列表指标张量与平均值 zip 的元组列表未配置验证时会抛出AttributeError(Validation is not setup.)train_on_batch()方法训练一个 mini-batch同步执行sess.run(self._train_op)train_and_validate_to_end(validate_step_size50)方法边训练边验证的辅助函数每 N 步执行一次验证并打印日志Trainer 底层机制源码级剖析Trainer.__init__在 tensorlayer/distributed.py 中完成全部装配其核心流程可以拆解为六步理解这些步骤有助于你正确配置参数1. 初始化 Horovod 并确认主从角色。构造时立即调用hvd.init()并以hvd.rank() 0判定当前进程是否为 master。2. 验证集准备可选。若传入了validation_dataset先shard(num_shardshvd.size(), indexhvd.rank()).batch(batch_size)再预取构建make_initializable_iterator并通过build_validation_func(next_example, next_label)得到验证网络与指标列表。3. 训练集按本地 rank 切分。训练集同样执行shard(...).batch(batch_size)与prefetch(buffer_sizeprefetch_size)然后调用build_training_func(*training_iterator.get_next())得到(training_network, loss, log_tensors)。每个进程只消费属于自己的数据分片从源码结构看这是实现数据并行data parallelism的关键。4. 学习率线性缩放与 Horovod 分布式优化器。读取optimizer_args[learning_rate]当scaling_learning_rateTrue时乘以hvd.size()随后创建优化器并用hvd.DistributedOptimizer(opt)包装实现跨节点的梯度 AllReduce 同步。5. 装配 Hooks。依次挂载三个关键 Hookhooks [ hvd.BroadcastGlobalVariablesHook(0), # 从 rank 0 广播初始变量状态 tf.train.StopAtStepHook(last_stepmax_iteration // hvd.size()), tf.train.LoggingTensorHook(tensorslog_tensors, every_n_iterlog_step_size), ]其中BroadcastGlobalVariablesHook保证所有 worker 以一致的随机初始化或 checkpoint 恢复状态开始训练StopAtStepHook将总迭代数按 GPU 数折算。6. GPU 绑定与 master 专属 checkpoint。通过tf.ConfigProto设置gpu_options.allow_growth True与visible_device_list str(hvd.local_rank())实现每个进程独占一块 GPUcheckpoint_dir仅在 masterhvd.rank() 0上生效避免多 worker 并发写 checkpoint 造成损坏。最终MonitoredTrainingSession统一负责会话初始化、checkpoint 恢复/保存与异常关闭。实战一MNIST 分布式训练以 examples/distributed_training/tutorial_mnist_distributed_trainer.py 为例完整流程包含三个环节1构造tf.data.Dataset风格的数据集def make_dataset(images, labels, num_epochs1, shuffle_data_seed0): ds1 tf.data.Dataset.from_tensor_slices(images) ds2 tf.data.Dataset.from_tensor_slices(np.array(labels, dtypenp.int64)) dataset tf.data.Dataset.zip((ds1, ds2)) dataset dataset.repeat(num_epochs).shuffle(buffer_size10000, seedshuffle_data_seed) return dataset2实现build_train与可选的build_validationdef build_train(x, y_): net model(x, is_trainTrue) cost tl.cost.cross_entropy(net.outputs, y_, namecost_train) accurate_prediction tf.equal(tf.argmax(net.outputs, 1), y_) accuracy tf.reduce_mean(tf.cast(accurate_prediction, tf.float32), nameaccuracy_train) log_tensors {cost: cost, accuracy: accuracy} # 训练日志中要记录的张量 return net, cost, log_tensors注意模型函数中使用了tf.variable_scope(mlp, reusetf.AUTO_REUSE)训练与验证阶段共享同一套权重——这正是验证网络“共享训练网络权重”的前提。3实例化 Trainer 并启动训练X_train, y_train, X_val, y_val, X_test, y_test tl.files.load_mnist_dataset(shape(-1, 784)) training_dataset make_dataset(X_train, y_train) trainer tl.distributed.Trainer( build_training_funcbuild_train, training_datasettraining_dataset, optimizertf.train.AdamOptimizer, optimizer_args{learning_rate: 0.001}, batch_size500, prefetch_size500 ) while not trainer.session.should_stop(): try: trainer.train_on_batch() # 同步执行一个训练步 except tf.errors.OutOfRangeError: # 数据集耗尽时抛出 break实战二CIFAR-10 带数据增强的分布式训练examples/distributed_training/tutorial_cifar10_distributed_trainer.py 展示了与真实场景更接近的用法在进入 Trainer 之前先用dataset.map并行施加随机裁剪、随机水平翻转、随机亮度/对比度扰动与标准化def data_aug_train(img, ann): img tf.random_crop(img, [24, 24, 3]) img tf.image.random_flip_left_right(img) img tf.image.random_brightness(img, max_delta63) img tf.image.random_contrast(img, lower0.2, upper1.8) img tf.image.per_image_standardization(img) return img, ann training_dataset make_dataset(X_train, y_train) training_dataset training_dataset.map(data_aug_train, num_parallel_callsmultiprocessing.cpu_count()) trainer tl.distributed.Trainer( build_training_funcbuild_train, training_datasettraining_dataset, optimizertf.train.AdamOptimizer, optimizer_args{learning_rate: 0.0001}, batch_size128, prefetch_size128 )此外该示例在损失中加入了 L2 正则项对relu/W变量以 0.004 系数做l2_regularizer说明build_training_func中可以自由定制损失函数。使用prefetch_size与num_parallel_calls可以让数据增强与 GPU 计算重叠执行缓解数据预处理带来的瓶颈。环境准备OpenMPI 与 mpirun 启动运行 Trainer 需要先安装 Horovod。仓库提供了 Ubuntu 下的 OpenMPI 3 一键编译安装脚本 scripts/download_and_install_openmpi3_ubuntu.sh其要点如下自动探测 CPU 核数下载 OpenMPI 3.1.0 源码包并编译安装前缀为$HOME/local/openmpi耗时约 8 分钟或更长脚本结束时会提示手动更新 PATHPATH$PATH:$HOME/local/openmpi/bin # 若希望开机即用可将此行写入 ~/.bashrc安装完成后在 CIFAR-10 示例的脚本头部给出了mpirun的典型启动命令脚本注释中标明该段为待补全的示意文件名需替换为你的训练脚本mpirun -np 2 \ -bind-to none -map-by slot \ -x NCCL_DEBUGINFO -x LD_LIBRARY_PATH -x PATH \ -mca pml ob1 -mca btl ^openib \ python3 tutorial_cifar10_distributed_trainer.py参数含义-np 2启动两个 worker 进程配合 Trainer 内部hvd.local_rank()的 GPU 绑定每个进程使用一块 GPU-bind-to none -map-by slot允许进程自由调度-x系列将 NCCL 调试、动态库路径等环境变量透传给所有 rank-mca pml ob1 -mca btl ^openib指定 MPI 通信层。训练循环的三种使用方式两个官方示例的注释明确给出了 Trainer 的三种驱动方式一键训练到结束trainer.train_to_end()最简单遍历全部数据中途穿插验证trainer.train_and_validate_to_end(validate_step_size100)每 100 步调用一次validation_metrics并打印各指标均值完全自控手写while not trainer.session.should_stop():循环在每步train_on_batch()之间插入任意自定义逻辑如自定义日志、提前终止条件。其中train_and_validate_to_end的内部实现tensorlayer/distributed.py展示了validation_metrics的典型用法循环执行验证集 iterator累加各指标后取平均再以%s: %f格式输出每个指标的名字与均值。已弃用的旧版分布式 API参考除Trainer外模块还保留了一套面向 TensorFlow 原生 parameter server 分布式模式的辅助 API全部标注deprecated(date2018-10-30, instructionsUsing the TensorLayer distributed trainer.)即官方明确要求改用 Trainer。了解其设计有助于阅读历史代码TaskSpecDef分布式任务规格描述包含 job 类型master/worker/ps、任务索引、trial 标识、ps/worker/master 主机列表。构造函数可从字符串或列表解析ps_hosts、worker_hosts逗号分隔并据此构建tf.train.ClusterSpec。其use_last_worker_as_evaluator()可返回一个去掉最后一个 worker 的新规格worker 数 ≤1 时抛异常device_fn()基于tf.train.replica_device_setter生成设备放置函数create_server()创建tf.train.Serverps 节点会直接join()阻塞。TaskSpec即create_task_spec_def从环境变量推导任务规格。优先读取TF_CONFIGJSONML-engine 场景含task与cluster字段否则读取JOB_NAME/TASK_INDEX/PS_HOSTS/WORKER_HOSTS/MASTER_HOSTTensorPort 场景两者都没有则抛异常。注意其 docstring 提示该实现不支持 TensorFlow 官方文档示例中的稀疏数组TF_CONFIGJSON 定义不支持。DistributedSession即create_distributed_session基于tf.train.MonitoredTrainingSession创建分布式会话参数覆盖checkpoint_dir、scaffold、hooks、chief_only_hooks、save_checkpoint_secs默认 600、save_summaries_steps/save_summaries_secs、config、stop_grace_period_secs默认 120、log_step_count_steps默认 100等。其 docstring 给出了“所有 worker 共用同一数据集”与“数据集按 worker 切分”两种使用范式。StopAtTimeHook按运行时长停止的SessionRunHookbegin()时记录结束时间每次after_run超时即request_stop()。LoadCheckpoint会话创建后恢复 checkpoint 的SessionRunHook通过after_create_session调用saver.restore(checkpoint)且只恢复一次_loaded标志防止重复加载。使用前提与版本说明tensorlayer.distributed为Alpha 版本API 可能随版本演进调整见 docs/modules/distributed.rst 开头的声明Trainer 面向 TensorFlow 1.x 的MonitoredTrainingSession、tf.train.Optimizer与 Horovod 构建示例代码使用tf.logging、tf.train.AdamOptimizer等 TF1 API使用前请对照当前 TensorFlow 版本核对兼容性训练前必须完成 Horovod 安装参考 scripts/download_and_install_openmpi3_ubuntu.sh并保证各节点网络互通checkpoint 仅由 master 保存、验证默认仅 master 执行、数据集按hvd.rank()自动切分——这些行为均由源码直接确认tensorlayer/distributed.py理解它们可以避免多机训练中的常见坑如重复消费全量数据、多节点并发写 checkpoint。赞分享人工智能深度学习机器学习强化学习【免费下载链接】TensorLayerDeep Learning and Reinforcement Learning Library for Scientists and Engineers项目地址https://gitcode.com/gh_mirrors/te/TensorLayer点击查看免费下载相关推荐XGBoost 分布式训练上 Kubernetes基于 Kubeflow Trainer 的多节点训练完整指南XGBoost 分布式训练上 Kubernetes基于 Kubeflow Trainer 的多节点训练完整指南 本指南以 XGBoost 官方教程 doc/t人工智能机器学习基于Azure Machine Learning的分布式TensorFlow训练Horovod实战指南基于Azure Machine Learning的分布式TensorFlow训练Horovod实战指南 概述 在现代机器学习实践中随着模型规模和数据集不断增终极指南如何用命令行工具轻松获取iOS应用IPA文件终极指南如何用命令行工具轻松获取iOS应用IPA文件 还在为获取iOS应用安装包而烦恼吗今天我要为你介绍一款革命性的跨平台命令行工具——ipatool它能CLI开发工具上一篇Fluent UI文档版本迁移文档版本间的迁移指南下一篇如何在Windows系统获得苹果级字体体验PingFangSC字体完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考