字节跳动开源高性能分布式训练框架BytePS,支持PyTorch、TensorFlow等

标签: tuicool | 发表时间:2019-06-27 00:00 | 作者:
出处:http://itindex.net/relian

最近,字节跳动发布了一款通用高性能分布式训练框架 BytePS,该框架支持TensorFlow、Keras、PyTorch 和MXNet,并且可以在 TCP 或 RDMA 网络上运行。

BytePS GitHub 地址:https://github.com/bytedance/byteps

根据该项目的 GitHub 页面,BytePS 显著优于目前的开源分布式训练框架。例如在流行的公有云和同样数量 GPU 上,BytePS 的训练速度可以达到 Horovod (NCCL) 的两倍。

框架性能

开发团队在 BytePS 上测试了两个模型:VGG16(通信密集)和 Resnet50(计算密集)。测试使用了 Tesla V100 16GB GPU 集群,批大小都是 64。机器使用的是公有云上的虚拟机,每个机器有 8 个 GPU,集成了 NVLink。机器之间使用 20 Gbps TCP/IP 网络互通。在测试上,BytePS 在 Resnet50 的表现较 Horovod(NCCL)提高 44%,在 VGG16 则提升了 100%。

在 VGG16 和 Resnet50 模型上,BytePS 和 NCCL 的性能对比。

作者提供了 Docker 文件,帮助用户测试。

抛弃 MPI,迎接云计算

为什么 BytePS 的表现比 Horovod 好太多?主要原因是 BytePS 为云计算和共享集群设计,并抛弃了 MPI。

MPI 是高性能计算(High Performance Computing)的产物。当需要运行单一任务时,MPI 适合用于建立在同质化硬件的计算集群上。但是云计算(或者内部共享集群)是不一样的。

团队因此重新思考了最佳通信策略。总之,BytePS 不仅在机器内使用 NCCL,同时也重新部署了机器间的通信方式。

BytePS 同时继承了许多加速技术,如分级策略、管道、张量分割、NUMA-aware 本地通信、基于优先级的调度机制等。

快速上手

使用 BytePS 前,假设你已经安装了以下一种或更多框架:TensorFlow、Keras、PyTorch、MXNet等。BytePS 基于 CUDA 和 NCCL。

复制 BytePS 和第三方依赖:

git clone --recurse-submodules https://github.com/bytedance/byteps

然后进入 BytePS 文件目录,并安装:

python setup.py install

注意:你可能需要设置 BYTEPS_USE_RDMA=1 来安装 RDMA 支持。

现在你可以试试一些例子。假设你使用MXNet,并想尝试 Resnet50 的基本模型。

export NVIDIA_VISIBLE_DEVICES=0,1 \
       DMLC_NUM_WORKER=1 \
       DMLC_NUM_SERVER=1 \
       DMLC_WORKER_ID=0 \
       DMLC_ROLE=worker \
       DMLC_PS_ROOT_URI=10.0.0.1 \
       DMLC_PS_ROOT_PORT=1234 \
       DMLC_INTERFACE=eth0

python byteps/launcher/launch.py byteps/example/mxnet/train_imagenet_byteps.py --benchmark 1 --batch-size=32

对于分布式训练,你可能需要建立一个服务器镜像。团队提供了 Docker 文件作为例子。你可以使用同样的镜像用于调度和提供服务。

更多启动分布式任务和上手教程可参考:https://github.com/bytedance/byteps/tree/master/docs

在你的代码中使用 BytePS

BytePS 和 Horovod 接口高度兼容。选择 Horovod 可以降低测试工作量。

如果你的任务只依赖 Horovod 的 allreduce 和广播,你可以在一分钟内切换到 BytePS。

只需要用 import byteps.tensorflow as bps 替换 import horovod.tensorflow as hvd,并将代码中所有的 hvd 替换成 bps。

项目计划

BytePS 目前不支持单纯的 CPU 训练,一些底层逻辑可能不支持。你可以使用 CUDA 或 NCCL 来运行 BytePS。

BytePS 即将增加以下特性:

  • 异步训练
  • 容错机制
  • 延迟减缓

相关 [字节 开源 性能] 推荐:

字节跳动开源高性能分布式训练框架BytePS,支持PyTorch、TensorFlow等

- - IT瘾-tuicool
最近,字节跳动发布了一款通用高性能分布式训练框架 BytePS,该框架支持TensorFlow、Keras、PyTorch 和MXNet,并且可以在 TCP 或 RDMA 网络上运行. BytePS GitHub 地址:https://github.com/bytedance/byteps. 根据该项目的 GitHub 页面,BytePS 显著优于目前的开源分布式训练框架.

PHP高性能全文检索开源解决方案:Xunsearch

- - 互联网旁观者
Xunsearch 是一个高性能、全功能的全文检索解决方案. Xunsearch 旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎. Xunsearch 中文译名为“ 迅搜”,代码中的经常被缩写为 XS,既是英文名称的缩略也是中文声母缩写. 这儿的“迅”是快速的意思,至少包含了两层涵义:其一代表了搜索结果的响应能力,其二则为二次开发难度、速度.

CitusDB发布提高PostgreSQL数据库性能的开源工具

- - TechCrunch 中国
数据库分析初创公司CitusDB今天发布CSTORE,一款针对PostgreSQL的纵列储存插件,试图抢占甲骨文的奶酪. 这款开源工具是该公司面向PostgreSQL的第一款工具,从今天开始就可以免费下载. “在批量加载数据的分析工作中,使用纵列储存的优势非常明显,”CitusDB在其 官方博客中这么写道,暗示用户使用这款工具可以达到更好的数据库性能.

Zynga开源其服务器性能监控分析工具

- - IT经理网
流年不利的社交游戏服务商Zynga近日在 官方博客宣布开源zPerfmon——该工具负责监控Zynga数以千计的社交游戏服务器. zPerfmon的源代码目前已经上传至 Github. 包括Facebook、Google、Netflix和Twitter在内的众多互联网公司经常会开源自己的开发的工具,但是zPerfmon不同寻常之处在于其规模:作为单一服务器系统,zPerfmon每天处理的数据量高达150G,增加1亿条数据库记录,并能生成“5000万个档案和上百种查看方式.

[原]btrace 开源!基于 Systrace 高性能 Trace 工具

- - 字节跳动技术团队官方博客
btrace(又名 RheaTrace) 是抖音基础技术团队自研的一款高性能 Android Trace 工具,它基于 Systrace 实现,并针对 Systrace 不足之处加以改进,核心改进点如下. 效率提升:编译期间为 App 方法自动注入自定义事件,并提供高效、灵活配置规则. 性能提升:改进 Systrace 文件实时写 atrace 数据方式,性能提升最大 400 % 以上.

开源软件实践之linux高性能服务器编程框架和选型(续)

- - CSDN博客架构设计推荐文章
    接着昨天的Proactor模式介绍.      proactor模式将所有IO操作交给主线程和linux内核来处理,工作线程负责业务逻辑. 异步IO实现这种模式的工作流程如下:. 1)主线程使用aio_read函数注册socket读完成事件,提供用户接收数据的缓冲区地址以及读操作完成时如何通知应用程序(有信号等手段);.

sky walking 监听程序的性能开源项目 - 不忘初心,方得始终。 - ITeye博客

- -
apm (Application Performance Managment :应用性能管理)简写,业界有很多成熟的收费工具,听云、OneAPM等. 当然也有开源的apm,git地址: https://github.com/wu-sheng/sky-walking. 功能方面当然和收费的没法比,但是了解一下也挺不错的,skywalking采用elasticsearch数据存储.

免费可商用开源GPT模型问世,50G权重直接下载,性能不输GPT-3

- - 量子位
量子位 | 公众号 QbitAI. 真·开源GPT模型,终于来了. 参数量级130亿,大小比肩最近Meta开放的LLaMA-13B,但从数据集、模型权重到计算优化训练, 全部开源. 没错,虽然就GPT-3而言,之前DeepMind、Meta等组织陆陆续续开源过几个模型,不过基本都是半遮半掩. 尤其最接近GPT-3的Meta OPT模型,不仅权重只开放给研究者,而且不可商用:.

JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码

- - ImportNew
本文是《 JVM 性能调优实战之:一次系统性能瓶颈的寻找过程》 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍),并准确定位系统瓶颈:我们应用里静态对象不是太多、有大量的业务线程在频繁创建一些生命周期很长的临时对象,代码里有问题.

一个对象占用多少字节?

- - 编程语言 - ITeye博客
        老早之前写过一篇博客,是关于一个Integer对象到底占用多少字节的,现在看来,那篇文章竟然计算错了. 这次再去计算,是因为之前写的一篇 关于字长的文章里,看到了hotspot jvm里,对象占用空间是 8字节对齐的,再加上之前关于字节那文章里带着一点-XX:+UseCompressedOops压缩指针参数的疑问,重新探究了下一个对象到底占用多少字节,以及如何计算它占用空间的方法.