深度学习后端开发工具【免费下载链接】tpuReference models and tools for Cloud TPUs.项目地址https://gitcode.com/gh_mirrors/tpu/tpu点击查看免费下载本篇技术指南以本仓库 benchmarks/ResNet-50_v1.5_Performance_Comparison_TensorFlow_1.12_GCP.md 为骨架系统拆解 Google Brain 团队在 GCP 上对比 Cloud TPU v2 Pod 与 NVIDIA V100 GPU 训练 ResNet-50 v1.5 时采用的性能测量方法论并给出 V100 GPU 与 Cloud TPU 两条完整、可复现的实验操作路径。读完本文你将掌握一套公平、可复现的 ML 训练基准设计原则理解 ResNet-50 v1.5 与原始 ResNet 的架构差异、bfloat16/FP16 精度策略、LARS 大 batch 优化原理并能按步骤在 GCP 上跑通训练、评估与计时全过程。一、性能测量方法论公平可复现基准的设计思路机器学习训练性能基准的最大难点在于硬件配置、软件框架、训练协议各不相同任何一环的差异都会让对比结果失真。该文档强调构建能公平且可复现地对比 ML 训练性能的基准需要极大的细心并据此确定了本次对比的几个关键约束。硬件与框架选型对比对象锁定为当时 Google Cloud 上两款旗舰级加速器——NVIDIA V100 GPU 与 Google Cloud TPU v2 Pod全部实验在 GCP 上完成使用经过充分优化的开源 TensorFlow 1.12 实现收集数据。精度策略这是本次基准最能体现公平性的地方——两边都采用针对各自硬件专门设计的低精度方案而非让一方裸跑Cloud TPU 使用bfloat16专为 ML 设计的 16 位半精度数据类型保留了与 FP32 相同的指数范围NVIDIA V100 使用混合精度float16以最大化 Tensor Cores 的利用率。同时GPU 侧通过XLA编译优化计算图进一步压榨 V100 性能。这套做法的核心思想是对比的是经过良好调优的系统真实性能而不是某个框架的默认配置性能。关于规模趋势的背景文档同时指出最大的 ML 训练任务的规模在过去数年间快速扩张且该趋势会持续因此超大规模分布式训练如 Cloud TPU Pod的性能评估具有长期价值。二、基准模型ResNet-50 v1.5 的架构定义与实现细节2.1 什么是 ResNet-50 v1.5ResNet-50 在 ImageNet 上知名度高、被众多平台充分优化是理想的基准模型。但 ResNet-50 存在多种架构变体与训练流程其计算特征和最终精度差异很大。本基准选用的是被非正式称为ResNet-50 v1.5的变体。它与 He 等人原始 ResNet 论文arXiv:1512.03385描述的架构几乎相同唯一关键差异在于每个残差 block 的 stride 2 下采样放在第一个 3x3 卷积上而不是第一个 1x1 卷积上。该变体源自 Accurate, Large Minibatch SGD: Training ImageNet in 1 HourarXiv:1706.02677对应的 fb.resnet.torch 实现输入尺寸沿用原始 ResNet 论文的 224x224。这一架构差异在仓库源码中有直接对应。查看 models/official/resnet/resnet_model.py 中bottleneck_block的实现第一个 1x1 卷积使用strides1见 resnet_model.py#L541仅做通道压缩中间的 3x3 卷积使用stridesstrides承担下采样见 resnet_model.py#L563。每个 block group 仅第一个 block 使用 projection shortcut 与 stride见 resnet_model.py#L632这与 v1.5 的定义完全吻合。2.2 GPU 侧实现tf_cnn_benchmarks FP16 XLAGPU 基准使用 tf_cnn_benchmarks 的 ResNet-50 v1.5 训练实现其要点为混合精度 FP16 以最大化 V100 Tensor Cores 利用率XLA 优化图执行以进一步提升性能训练协议采用最标准的 ResNet-50 流程固定计算量再对比不同系统完成同样逻辑运算的耗时。2.3 TPU 侧实现官方参考模型 bfloat16 transposeCloud TPU Pod 侧使用标准 Cloud TPU 参考模型实现即本仓库 models/official/resnet 目录下的 ResNet-50 v1.5包含面向 TPU 的针对性优化在更多变量上使用 bfloat16 数值精度将 NCHW 格式的数据转置为 NHWC 再送入 TPU以获得更好性能。这一转置优化在源码中体现为transpose_input开关默认配置transpose_input: True见 models/official/resnet/configs/resnet_config.py#L30。训练输入经ImageNetInput构建在 models/official/resnet/imagenet_input.py 中通过use_bfloat16参数控制是否将数据转换为 bfloat16 张量见 imagenet_input.py#L314。2.4 为何不采用加速收敛的新协议文档明确指出业界新出现的多种加速收敛协议如训练中渐进放大图像尺寸、更激进的 learning rate 调度可以更快达到收敛但本次基准刻意坚持最标准的训练协议——固定计算量只比较不同系统执行相同逻辑运算的性能从而保证对比的纯粹性。三、可复现性设计与训练时长测量方法3.1 目标精度5 次运行均达 76% top-1 且无黑名单基准将 ImageNet top-1 精度目标设定为76.0%文档认为这接近 ResNet-50 v1.5 在标准训练协议下的可达精度上限。理由很实际训练 ML 模型时有许多牺牲精度换吞吐的手段但真实业务中最有价值的往往就是最后几个百分点的精度因此基准选择挑战以最高可达精度训练知名模型。为保证可复现每种硬件配置独立运行 5 次完整训练并验证所有运行均在 ImageNet 验证集上达到至少 76.0% 的 top-1 精度且无黑名单no blacklists——即不通过剔除运气不好的运行来粉饰结果。3.2 训练 epoch 数90 epochs 1 warm-up epoch参照 Training ImageNet in 1 Hour 论文每种配置测量 90 个训练 epoch。正式计时前先运行一个warm-up epoch用于排除一次性启动成本并确保数据缓存填满。文档还特别解释了为何要排除这些开销当最大 Cloud TPU Pod 配置下训练时间缩短到分钟级时初始化和编译开销占比显著符合 Amdahl 定律。但 Cloud TPU Pod 客户如 eBay 这类大规模商品图像识别场景通常训练比 ImageNet 大得多的数据集这些开销占比不再显著因此本次基准选择将其排除。3.3 计时方法基于 events/summary 文件训练时长的定义非常精确warmup epoch 最后一步记录训练 loss 的时间戳与整个训练最后一步记录 loss 的时间戳之间的间隔。这个时间差准确捕获了 90 epoch 的训练时间同时排除 GPU 与 Cloud TPU 两侧的一次性开销和缓存预热延迟。仓库为此提供了专门脚本 models/official/resnet/benchmark/read_training_time.py其实现逻辑为通过--model_dir定位模型目录下的events.out.tfevents.*事件文件TPU 模式为events.out.tfevents.*.n-*用tf.train.summary_iterator逐条遍历事件匹配--event_name指定的标量默认loss找到--warmup_steps对应 step 的记录作为start_time记录该事件在事件文件中的最大wall_time作为结束时间输出elapsed time分钟。# 核心逻辑见 read_training_time.py target_step FLAGS.warmup_steps for e in tf.train.summary_iterator(event_file): ... if v.tag FLAGS.event_name: if current_step target_step: start_time e.wall_time max_wall_time max(e.wall_time, max_wall_time) elapse_time max_wall_time - start_time运行 TPU 侧计时时需额外传入--tpuTrue以匹配 TPU 的事件文件命名模式。四、大 batch 训练的两大关键优化LARS 与 label smoothingCloud TPU 最大配置v2-128 及以上的 batch size 达到 16,384 甚至 32,768。为在这种规模下仍能高效训练开源 ResNet-50 实现加入了两个重要优化4.1 LARS 优化器Layer-wise Adaptive Rate Scaling当 batch size 达到 16,384 及以上时实现从传统的 momentum SGD 切换为 You 等人提出的 LARS 优化器arXiv:1708.03888。LARS 按层自适应地缩放学习率缓解超大 batch 下梯度更新的不稳定问题。仓库中 models/official/resnet/lars_util.py 的poly_rate_schedule给出了 LARS 模式下的学习率档位策略多项式衰减power2.0train_batch_size峰值学习率 plrwarmup epoch 数 16,38410.0516,384 ~ 32,76725.0532,768 ~ 65,53532.014 65,53635.640init_lars_optimizer构建LARSOptimizer时带有skip_list[batch_normalization, evonorm, bias]见 lars_util.py#L92-L96即对 BatchNorm 层和 bias 不做 LARS 缩放。在 models/official/resnet/resnet_main.py#L495-L497启用--enable_larsTrue时直接走 LARS 分支并跳过 L2 weight decay 项LARS 自身内置 weight decay。4.2 Label Smoothing标签平滑大 batch 下启用标签平滑依据 TensorFlow 文档中softmax_cross_entropy的label_smoothing参数实现。文档解释当整个训练过程的梯度更新总次数减少时标签平滑变得更重要。在 resnet_main.py#L465-L468交叉熵损失通过tf.losses.softmax_cross_entropy(..., label_smoothingparams[label_smoothing])计算。4.3 小 batch 下的学习率调度补充源码细节不使用 LARS 时即 batch 16,384learning_rate_schedule采用标准调度学习率按base_learning_rate * (train_batch_size / 256.0)线性缩放基准学习率 0.1 对应 batch 256见 resnet_config.py#L25前 5 个 epoch 线性 warmup30/60/80 epoch 处依次除以 1090 epoch 训练结束见 resnet_main.py#L239-L280。默认动量 0.9、weight decay 0.0001见 resnet_config.py#L36-L37。五、在 GCP 的 NVIDIA V100 GPU 上复现实验5.1 ImageNet 数据准备GPU 版在 image-net.org 注册 ImageNet 数据库账号获取下载训练与评估数据的用户名和访问密钥使用本仓库的 tools/datasets/imagenet_to_gcs.py 工具处理数据并上传到 Google Storage Bucket。该工具将原始 JPEG 转换为 TFRecord训练集切分为 1024 个 shard、验证集 128 个 shard运行方式示例python3 imagenet_to_gcs.py \ --projectTEST_PROJECT \ --gcs_output_pathgs://TEST_BUCKET/IMAGENET_DIR \ --raw_data_dirpath/to/imagenet5.2 V100 的 VM 规格选择GCP 允许给不同规格的 VM 挂接 GPU。由于 JPEG 解码、图像预处理等输入流水线全部发生在 VM CPU 上必须租用足够大的 VM 才能跟上 GPU 的消费速度。实验表明训练 ResNet-50 v1.5 时每块 V100 GPU 大约需要 8 个 vCPU 线程才能满载。据此选定如下配置在最小化总成本的同时最大化性能GPU 数量GCE 机器规格1 x V100n1-standard-84 x V100n1-standard-328 x V100n1-standard-645.3 创建训练实例基于针对 TensorFlow 优化的 Google Deep Learning Images 镜像启动实例镜像家族tf-1-12-cu100并安装 NVIDIA 驱动export IMAGE_FAMILYtf-1-12-cu100 export ZONEYour Zone export PROJECTYour Project export INSTANCE_NAMEv100-training # 1 GPU gcloud compute instances create $INSTANCE_NAME \ --machine-typen1-standard-8 \ --maintenance-policyTERMINATE \ --acceleratortypenvidia-tesla-v100,count1 \ --tagshttp-server,https-server \ --image-family$IMAGE_FAMILY \ --image-projectdeeplearning-platform-release \ --boot-disk-size100GB \ --boot-disk-typepd-ssd \ --local-ssd interfacenvme \ --metadata install-nvidia-driverTrue # 4 GPU挂 2 块 local NVMe SSD gcloud compute instances create $INSTANCE_NAME \ --machine-typen1-standard-32 \ --maintenance-policyTERMINATE \ --acceleratortypenvidia-tesla-v100,count4 \ --tagshttp-server,https-server \ --image-family$IMAGE_FAMILY \ --image-projectdeeplearning-platform-release \ --boot-disk-size100GB \ --boot-disk-typepd-ssd \ --local-ssd interfacenvme \ --local-ssd interfacenvme \ --metadata install-nvidia-driverTrue # 8 GPU挂 4 块 local NVMe SSD gcloud compute instances create $INSTANCE_NAME \ --machine-typen1-standard-64 \ --maintenance-policyTERMINATE \ --acceleratortypenvidia-tesla-v100,count8 \ --tagshttp-server,https-server \ --image-family$IMAGE_FAMILY \ --image-projectdeeplearning-platform-release \ --boot-disk-size100GB \ --boot-disk-typepd-ssd \ --local-ssd interfacenvme \ --local-ssd interfacenvme \ --local-ssd interfacenvme \ --local-ssd interfacenvme \ --metadata install-nvidia-driverTrue5.4 配置本地数据存储local SSD 与 RAID数据放在实例本地 NVMe SSD 上以获得最高 I/O 性能。1 GPU 实例直接使用单块 NVMe 盘4 GPU 与 8 GPU 实例分别挂载 2 块、4 块 NVMe 盘需要通过 RAID0 合并成单一逻辑盘gcloud compute ssh $INSTANCE_NAME ## 4 和 8 GPU 实例 # 安装 raid 管理工具 sudo apt-get update sudo apt-get install mdadm --no-install-recommends # 仅 8 GPU4 块 nvme 盘执行 sudo mdadm --create /dev/md0 --level0 --raid-devices4 \ /dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 # 仅 4 GPU2 块 nvme 盘执行 sudo mdadm --create /dev/md0 --level0 --raid-devices2 \ /dev/nvme0n1 /dev/nvme0n2 # 格式化并挂载阵列 sudo mkfs.ext4 -F /dev/md0 sudo mkdir -p /data sudo mount /dev/md0 /data ## 1 GPU 实例 sudo mkfs.ext4 -F /dev/nvme0n1 sudo mkdir -p /data sudo mount /dev/nvme0n1 /data5.5 拷贝数据并安装 TensorFlow 1.12sudo mkdir -p /data/imagenet sudo chmod -R 777 /data gcloud storage cp --recursive gs://your bucket with imagenet/imagenet/* /data/imagenet/ # 安装针对 CUDA 10.0、cuDNN 7.3、AVX2 编译的 TensorFlow 1.12 定制版 pip install --upgrade --force-reinstall \ https://storage.googleapis.com/tf-performance/tf_binary/tensorflow-1.12.0.a6d8ffa.AVX2.CUDA10-cp27-cp27mu-linux_x86_64.whl5.6 启动训练克隆 benchmarks 仓库并固定到文档使用的 commit用 tmux 保持训练进程不中断。注意--batch_size312在 tf_cnn_benchmarks 中是每 GPU 的 batch size8 GPU 时有效总 batch 为 8 x 312 2496--num_epochs91即 1 个 warm-up epoch 90 个训练 epoch。训练时只记录 loss 与 learning rate 及其时间戳用于计时summaries 异步写盘经验证不影响性能。git clone https://github.com/tensorflow/benchmarks.git cd benchmarks git reset --hard 1e7d788042dfc6d5e5cd87410c57d5eccee5c664 tmux new -s bench # 8 GPUs python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --batch_size312 \ --modelresnet50_v1.5 \ --optimizermomentum \ --variable_updatereplicated \ --nodistortions \ --gradient_repacking2 \ --num_gpus8 \ --num_epochs91 \ --weight_decay1e-4 \ --use_fp16 \ --all_reduce_specnccl \ --save_summaries_steps1 \ --summary_verbosity1 \ --num_warmup_batches0 \ --data_dir/data/imagenet/train \ --train_dir$HOME/test00 \ --compute_lr_on_cpuTrue \ --single_l2_loss_opTrue \ --loss_type_to_reportbase_loss \ --xla_compileTrue # 4 GPUs python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --batch_size312 \ --modelresnet50_v1.5 \ --optimizermomentum \ --variable_updatereplicated \ --nodistortions \ --gradient_repacking2 \ --num_gpus4 \ --num_epochs91 \ --weight_decay1e-4 \ --use_fp16 \ --all_reduce_specnccl \ --save_summaries_steps1 \ --summary_verbosity1 \ --num_warmup_batches0 \ --data_dir/data/imagenet/train \ --train_dir$HOME/test00 \ --compute_lr_on_cpuTrue \ --single_l2_loss_opTrue \ --loss_type_to_reportbase_loss \ --xla_compileTrue # 1 GPU python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --batch_size312 \ --modelresnet50_v1.5 \ --optimizermomentum \ --nodistortions \ --num_gpus1 \ --num_epochs91 \ --weight_decay1e-4 \ --data_dir/data/imagenet/train \ --use_fp16 \ --train_dir$HOME/test00 \ --save_summaries_steps1 \ --summary_verbosity1 \ --num_warmup_batches0 \ --compute_lr_on_cpuTrue \ --single_l2_loss_opTrue \ --loss_type_to_reportbase_loss \ --xla_compileTrue5.7 评估训练完成后执行评估评估用单 GPU 即可--evalTrue验证集 batch 250、共 200 个 batch# 4 和 8 GPUs 训练后的评估 python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --batch_size250 \ --modelresnet50_v1.5 \ --variable_updatereplicated \ --num_gpus1 \ --num_batches200 \ --use_fp16 \ --data_dir/data/imagenet/validation \ --train_dir$HOME/test00 \ --evalTrue \ --xla_compileTrue # 1 GPU 训练后的评估 python scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py \ --batch_size250 \ --modelresnet50_v1.5 \ --nodistortions \ --num_gpus1 \ --num_batches200 \ --use_fp16 \ --data_dir/data/imagenet/validation \ --train_dir$HOME/test00 \ --evalTrue \ --xla_compileTrue评估结束应看到类似输出Accuracy 1 0.7649 Accuracy 5 0.9309 [50000 examples]5.8 计算训练时间使用本仓库的 read_training_time.py 读取事件日志。各配置的--warmup_steps与--end_step与 batch 配置一一对应——以 ImageNet 训练集 1,281,167 张图计算steps_per_epoch 1281167 / (312 x num_gpus)warmup_steps 为一整轮 epoch 的步数8 GPU 约 513 步、4 GPU 约 1026 步、1 GPU 约 4107 步end_step 约为 91 个 epoch 的总步数git clone https://github.com/tensorflow/tpu.git cd tpu/models/official/resnet/benchmark # 8 GPUs python read_training_time.py --model_dir$HOME/test00/ \ --warmup_steps513 \ --end_step46710 \ --event_namebase_loss # 4 GPUs python read_training_time.py --model_dir$HOME/test00/ \ --warmup_steps1026 \ --end_step93419 \ --event_namebase_loss # 1 GPU python read_training_time.py --model_dir$HOME/test00/ \ --warmup_steps4107 \ --end_step373674 \ --event_namebase_loss注意--event_namebase_loss对应训练命令中的--loss_type_to_reportbase_loss。六、在 GCP 的 Cloud TPU / TPU Pod 上复现实验6.1 ImageNet 数据准备TPU 版新建 GCS bucket务必选择Regional 存储类别且区域与 Cloud TPU 的目标位置一致在 image-net.org 注册并获取数据下载凭证在 GCE VM 或本地桌面运行本仓库的 tools/datasets/imagenet_to_gcs.py下载、处理并重新上传数据到 GCS bucket。6.2 VM 规格为什么只需 n1-standard-2GCP 上的多种 Cloud TPU 硬件配置均由主机与 TPU 加速器均衡组合而成通过网络自动构建并对外提供。与 GPU 场景预处理在 VM CPU 上完成不同TPU 场景下训练数据存放在 GCS所有输入预处理都发生在 Cloud TPU server 侧因此协调计算只需要一个很小的 VM。本次所有 Cloud TPU 实验均使用 n1-standard-2。6.3 Cloud TPU 训练步骤通过 Google Cloud console 创建 TensorFlow 1.12 版本的 Cloud TPU 或 Cloud TPU Pod slice启动 n1-standard-2 的 GCE VMUbuntu 16.04 LTS勾选 Allow full access to all Cloud APIs并在 VM 上安装 TensorFlow 1.12克隆仓库并切换到r1.12分支git clone https://github.com/tensorflow/tpu cd tpu git checkout r1.12将models目录加入 PYTHONPATH 并启动训练建议在 screen 会话中运行避免 SSH 断线中断训练export PYTHONPATH$PYTHONPATH:~/tpu/models python tpu/models/official/resnet/resnet_main.py \ --tpuMY_TPU_NAME --tpu_zoneMY_TPU_ZONE --num_coresTPU_CORES \ --data_dirgs://IMAGENET_DATA_BUCKET/DIRECTORY \ --model_dirgs://RESNET_CHECKPOINT_BUCKET/DIRECTORY \ --train_batch_sizeBATCH_SIZE --iterations_per_loopITERATIONS \ --train_stepsITERATIONS \ --modetrain --eval_batch_size1000各 TPU 系统规模对应的关键参数如下BATCH_SIZE与ITERATIONS的设计关系以训练集 1,281,167 张图计算steps_per_epoch 1281167 // BATCH_SIZEITERATIONS 约等于 91 个 epoch 的总步数保证 1 个 warm-up 90 个训练 epochTPU 类型TPU_CORESBATCH_SIZEITERATIONSCloud TPU v2810241138541/16 Cloud TPU Pod (v2-32)324096284641/4 Cloud TPU Pod (v2-128)1281638471161/2 Cloud TPU Pod (v2-256)256327683558Full Cloud TPU Pod (v2-512)512327683558当 batch size 16,384 时还需追加以下参数以启用 LARS 优化器与标签平滑--enable_larsTrue --label_smoothing0.1这正对应上文第四节分析的源码逻辑--enable_larsTrue时 resnet_main.py 走 LARS 分支对应 lars_util.py 的 poly 学习率调度--label_smoothing0.1传入 softmax 交叉熵损失。该脚本共运行 91 个 epoch1 个 warm-up 90 个训练 epoch。对每个结果文档要求完整运行 5 次并报告中位数训练时长按上表 BATCH_SIZE 与 ITERATIONS 参数运行的所有实验均观察到达到 76% top-1 精度。训练结束后按上文训练时长测量方法计时。各 TPU 配置的warmup_steps对应一个训练 epoch 的步数如下TPU 类型warmup_stepsCloud TPU v212511/16 Cloud TPU Pod (v2-32)3131/4 Cloud TPU Pod (v2-128)781/2 Cloud TPU Pod (v2-256)39Full Cloud TPU Pod (v2-512)39示例命令注意 TPU 侧要加--tpuTruepython ~/tpu/models/official/resnet/benchmark/read_training_time.py \ --model_dirgs://RESNET_CHECKPOINT_BUCKET/DIRECTORY \ --warmup_stepsWARMUP_STEPS \ --tpuTrue6.4 Cloud TPU 评估评估命令与训练类似但目前评估仅支持单个 Cloud TPU因此--num_cores8python ~/tpu/models/official/resnet/resnet_main.py \ --tpuMY_TPU_NAME --tpu_zoneMY_TPU_ZONE --num_cores8 \ --data_dirgs://IMAGENET_DATA_BUCKET/DIRECTORY \ --model_dirgs://RESNET_CHECKPOINT_BUCKET/DIRECTORY \ --train_batch_sizeBATCH_SIZE --iterations_per_loopITERATIONS \ --train_stepsITERATIONS \ --modeeval --eval_batch_size1000评估结束应看到类似输出Eval results: {loss: 2.2301836, top_1_accuracy: 0.76658, global_step: 28151, top_5_accuracy: 0.93422}. Elapsed seconds: 33该输出格式与 resnet_main.py#L785-L786 的日志语句一致——评估完成后打印Eval results与Elapsed seconds。七、仓库中的配套参考资源除上述复现路径外本仓库还提供了与 ResNet-50 基准相关的配套资源可进一步深化理解models/official/resnet/resnet_main.pyCloud TPU 侧 ResNet 训练的完整入口含学习率调度、LARS 分支、TPU host_call 摘要写入与评估逻辑models/official/resnet/resnet_model.pyResNet-50 v1.5 网络结构定义可对照验证 stride 位置models/official/resnet/lars_util.pyLARS 优化器初始化与多项式学习率调度models/official/resnet/configs/resnet_config.pyResNet 训练默认超参数train_batch_size1024、base_learning_rate0.1、precisionbfloat16 等models/official/resnet/benchmark/read_training_time.py 与 models/official/resnet/benchmark/README.md训练计时工具与单 TPU 复现说明tools/datasets/imagenet_to_gcs.pyImageNet 数据集转换与 GCS 上传工具。结语这套基准方法论的核心价值在于公平二字两边都使用各自硬件上最合适的低精度方案bfloat16 vs FP16 Tensor Cores、都运行相同的标准训练协议、都以 5 次无黑名单运行确保可复现、都通过统一的 events 时间戳口径测量 90 epoch 的净训练时长。无论你关注的是 V100 GPU 的 XLA 混合精度优化还是 Cloud TPU 的 bfloat16、double-transpose 与大 batch LARS 训练本文给出的命令与参数都可以作为在 GCP 上自行验证、复现乃至拓展对比实验的起点。赞分享深度学习后端开发工具【免费下载链接】tpuReference models and tools for Cloud TPUs.项目地址https://gitcode.com/gh_mirrors/tpu/tpu点击查看免费下载相关推荐Cloud TPU 上的 ResNet-50 基准测试复现 DAWNBench 训练与评估全流程tpu 仓库 benchmark 实战指南Cloud TPU 上的 ResNet 50 基准测试复现 DAWNBench 训练与评估全流程tpu 仓库 benchmark 实战指南 导读 本文围绕深度学习后端开发工具Spinning Up PPO 基准测试指南PyTorch 与 TensorFlow 实现在 MuJoCo 任务上的性能对比与复现Spinning Up PPO 基准测试指南PyTorch 与 TensorFlow 实现在 MuJoCo 任务上的性能对比与复现 Spinning UpO人工智能强化学习深度学习机器学习教程【亲测免费】 深入解析 ResNet-50 v1.5性能评估与测试方法深入解析 ResNet 50 v1.5性能评估与测试方法 在深度学习领域模型性能的评估与测试是确保模型有效性和稳定性的关键步骤。ResNet 50 v1.5上一篇Mosquitto 0.4 版本技术解析通配符订阅、非阻塞网络与 $SYS 监控体系的奠基下一篇Humanizer 多语言格式化核心DefaultFormatter 类全面解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?