查看原文
其他

Tensorlayer团队的最新作品,跨平台开源框架TensorLayerX来了!

PKU Hyperplane 北京大学前沿计算研究中心 2022-12-22

关键词TensorLayerX

导  读

如今,行业内 AI 硬件和开发框架都越来越多,很多开发者开始发现,这些工具的使用方法越来越像。工具随着行业的发展形成统一的规范,开发者们将更容易得到便利。


本文介绍了一个多后端深度学习框架 TensorLayerX,它兼容 TensorFlow、Pytorch、PaddlePaddle、MindSpore 等国内外主流深度学习计算引擎作为计算后端,用户可以在各类操作系统和AI硬件上使用相同的代码进行开发。


该项目由北京大学、鹏城实验室、爱丁堡大学、帝国理工学院、清华大学、普林斯顿大学、斯坦福大学等机构的研究人员维护。


国内启智平台:

https://git.openi.org.cn/OpenI/TensorLayerX

GitHub 开源地址:

https://github.com/tensorlayer/TensorLayerX

文档地址:

https://tensorlayerx.readthedocs.io/en/latest/


本文首发于知乎,经作者授权标注“原创”发表于此,有部分删减。转载需标注首发出处。

知乎原文(点文末“阅读原文”跳转):

https://zhuanlan.zhihu.com/p/515354933


何为 TensorLayerX?

TensorLayerX 是新一代的多后端深度学习框架,兼容 TensorFlow、Pytorch、PaddlePaddle、MindSpore 等国内外主流深度学习计算引擎作为计算后端,用户可以在各类操作系统和AI硬件上(如英伟达 GPU 和国产华为 Ascend)使用相同的代码进行开发。


TensorLayerX 是为了顺应深度学习跨平台开发的趋势而诞生的。如果你有以下需求,欢迎选择 TensorLayerX:


  • 使用统一的代码在多中框架环境开发深度学习应用;

  • 使用国产 AI 框架和芯片,希望降低学习成本;

  • 参与中国人为主的一线开发者社区。


跨平台开发趋势

深度学习发展到2022年,呈现出计算框架、计算硬件、操作系统、应用种类的多样化趋势。在百花齐放、欣欣向荣的背后也存在着弊端:由于计算引擎众多、它们的接口差异化明显,而且不同厂家的计算引擎往往与特点的芯片绑定,造成开源生态的割裂。因此,跨平台、跨硬件的开发需求愈发强烈。


现在深度学习研究的主流框架包括 TensorFlow、Pytorch 和国内的 PaddlePaddle、MindSpore 等。


近年来,国内 AI 计算框架和芯片得到了很大的发展,这对我国人工智能进步起到了基础性的作用。包括百度的 PaddlePaddle 和华为的 MindSpore 在内的优秀国产计算框架都在蓬勃发展,百度昆仑、华为 Ascend 等优秀国产芯片国产 AI 芯片获得了更多的使用。


国外的 TensorFlow 和 Pytorch 框架的用户最多、生态最完善,大多数公布的新论文算法都是用这两个框架实现的。然而,这两个框架所代表的深度学习生态完全由欧美主导,优先支持的是英伟达 GPU 和谷歌 TPU 等计算设备,几乎不支持国内的计算设备和操作系统


各位开发者可能都遇到过这样的困惑:为了运行几个开源算法,需要安装多个框架多个版本的环境、cuda 等依赖库版本冲突,需要使用国产框架的时候学习成本高、生态资源少。总之,在开发深度学习应用的过程中,需要耗费很大的精力处理不同框架间的差异,而且国产计算硬件和框架的发展受到了很大的阻碍。


如今,行业内人工智能开发工具很多,很多开发者开始发现,这些工具的使用方法越来越像。工具随着行业的发展形成统一的规范,开发者们将更容易得到便利。


开发者们对一个跨平台、跨硬件、兼容多后端的开发工具的需求愈发强烈。


回顾:Tensorlayer和Keras高级API

2016 年,北京大学董豪博士在帝国理工学院读博期间,在 Github 上开源 TensorLayer1.0,Github 上总 Star 项目超过1万次,TensorLayer 开发框架下载量超过40万次,开源应用涉及计算机视觉和强化学习。


TensorLayer 是一款基于 TensorFlow 开发的深度学习与强化学习库。当时的 TensorFlow 的定位是“基于图的科学计算库”缺少用于深度学习的网络组件和高级API,TensorLayer 提供了高级别的深度学习 API,非常易于修改和扩展,可以同时用于机器学习的研究与产品开发。


2015年,Keras——由 Python 编写的开源人工神经网络库发布了,它提供了一套深度学习模型的设计、调试、评估、应用的高级 API,可以使用 Tensorflow、Microsoft-CNTK 和 Theano 作为计算后端。一直以来,Keras 因为其便捷直观的接口和跨平台跨后端的特性,受到了广大开发者的欢迎。


但是在 Google 正式接管 Keras 以后,Keras 基本上变成了 TensorFlow 的高级 API 模块,不再继续支持更多框架作为计算后端,导致市场上失去了跨平台跨框架开发的工具。


TensorLayer 最初的版本和 Keras 很相似,但 Keras 当时兼容多框架,而TensorLayer 当初只支持 TensorFlow 一个框架。随着近几年国内的开发框架和 AI 芯片厂商的发展,不论从软件层还从芯片层的生态圈,都出现了割裂分散的形势。


基于这个背景,TensorLayer 团队希望打造一套通用的与平台无关的一种开发框架, 发布了的 TensorLayer 升级版本 TensorLayer X


TensorLayerX 是一个兼容众多计算引擎的开发框架,目前兼容的引擎包括 TensorFlow、Pytorch、PaddlePaddle、MindSpore 等,基本具备了兼容国内外主流深度学习开发平台的跨平台开发能力,接下来就请随我详细了解一下 TensorLayerX 吧!


快速入门

千言万语的介绍,不如动手用几行代码体验 TensorLayerX 的便利性!


安装

TensorLayerX 的安装非常简单,只需要一行 pip 命令,除了自动安装普通依赖库外,程序还会帮你检查并安装支持的后端框架!

pip3 install tensorlayerx#==0.5.2


比如程序检测到你的环境中已经安装了 TensorFlow、Pytorch、PaddlePaddle、MindSpore 框架之一,就不会额外下载后端框架。反之,如果你的环境没有安装任何后端框架,则会自动帮你下载后端框架库!


指定后端

TensorlayerX目前支持包括TensorFlow、Pytorch、PaddlePaddle、MindSpore作为计算后端,指定计算后端的方法也非常简单,只需要设置环境变量即可。

import osos.environ['TL_BACKEND'] = 'tensorflow'# os.environ['TL_BACKEND'] = 'mindspore'# os.environ['TL_BACKEND'] = 'paddle'


除了在代码中使用os模块定义外,你也可以在运行程序前使用命令来指定。

#Linuxexport TL_BACKEND= 'tensorflow'#Windowsset TL_BACKEND= 'tensorflow'


搭建模型

TensorLayerX 在设计模型的搭建方式时,为了照顾开发者的习惯,尽可能的和主流的深度学习框架保持一致。


同时,作为特色,TensorLayerX 提供了自动推断输入张量形状的功能,开发者不必再手动计算并指定 in_channels 和 in_features 参数了!


你可以轻松地继承 nn.Module 类型来编写自己的算法。

from tensorlayerx.nn import Moduleimport tensorlayerx as tlxfrom tensorlayerx.nn import (Conv2d, Linear, Flatten, MaxPool2d, BatchNorm2d)
class CNN(Module):
def __init__(self): super(CNN, self).__init__() self.conv1 = Conv2d(64, (5, 5), (1, 1), padding='SAME', W_init=W_init, b_init=None, name='conv1', in_channels=3) self.bn = BatchNorm2d(num_features=64, act=tlx.ReLU) self.maxpool1 = MaxPool2d((3, 3), (2, 2), padding='SAME', name='pool1')
self.conv2 = Conv2d( 64, (5, 5), (1, 1), padding='SAME', act=tlx.ReLU, W_init=W_init, b_init=None, name='conv2', in_channels=64 ) self.maxpool2 = MaxPool2d((3, 3), (2, 2), padding='SAME', name='pool2')
self.flatten = Flatten(name='flatten') self.linear1 = Linear(384, act=tlx.ReLU, W_init=W_init2, b_init=b_init2, name='linear1relu', in_features=2304) self.linear2 = Linear(192, act=tlx.ReLU, W_init=W_init2, b_init=b_init2, name='linear2relu', in_features=384) self.linear3 = Linear(10, act=None, W_init=W_init2, name='output', in_features=192)
def forward(self, x): z = self.conv1(x) z = self.bn(z) z = self.maxpool1(z) z = self.conv2(z) z = self.maxpool2(z) z = self.flatten(z) z = self.linear1(z) z = self.linear2(z) z = self.linear3(z)        return z


除了搭建模型,TensorLayerX 还提供了其他帮助你快速开发深度学习算法的接口,包括高效简洁的数据加载及处理接口、高级封装的训练 API、用户自定义的 OneStep 训练 API。


具体的示例代码可以点击文末“阅读原文”转详细说明。


TensorLayerX 介绍

TensorLayerX 特色

TensorLayerX 是一套跨平台的深度学习开发工具,它使用纯 Python 代码开发。通过对多后端的 Python 接口进行封装,TensorLayerX 提供了一套兼容多个框架的深度学习开发统一 API,再由各后端框架的底层程序负责调用硬件计算,使得开发者可以无视后端框架和硬件平台地进行深度学习开发。在这个过程中,几乎没有计算性能的损耗。


TensorLayerX 的开发范式是面向对象的,所有的层和模型的定义都通过继承并改写 nn.Module 类型。


TensorLayerX 的底层,是对于各个后端框架的基础张量操作进行的包装 tlx.ops,在此基础上通过改写  nn.Module 类型,TensorLayerX 封装了许多常用的神经网络层、模块,开发者可以轻松地编写自己的算法。


同时,TensorLayerX 在设计时考虑了简洁的训练过程和定制化的训练过程。用户既可以使用封装的 model.train() 方法一键开始模型训练,也可以使用循环的方式精确控制每个 Step 的训练过程。


TensorLayerX 生态

TensorLayerX 不只是一个框架,而是一系列开源产品、开源社区、开源活动组成的深度学习开源平台,从多方面构成了 TensorLayerX 的开源生态。我们为构建并完善这个国产深度学习生态的工作,命名为“腾龙开源计划”


“腾龙开源计划”内容包括作为一系列开源软件:TensorLayerX 开发框架、TLXZOO 算法库、RLZOO 强化学习工具箱、OpenIVA 智能视觉分析开发套件等,还包括一系列社区生态支持计划:开源开发者社区、学术合作平台、多语言文档、国际化推广等。


  • TLXZoo算法库:基于 TensorLayerX 开发的常用算法库,方便开发者复用。其中的算法涵盖计算机视觉、自然语言处理等领域各类常用神经网络算法。同时,会及时复现学术界最新的算法。

  • RLzoo:最实用的强化学习算法、框架和应用程序的集合,为强化学习实践和基准测试提供快速开发的方法。它支持基本的 toy 测试,如 OpenAI Gym 和 DeepMind Control Suite,机器人学习基准环境 RLBench 等,配置非常简单。

  • 开源社区:TensorLayerX 将持续的建设中国人为主的深度学习开发者社区,包括线上交流群组、举办比赛、线下沙龙(视疫情情况),以及和高校师生的合作等。


关于生态产品的详情,请点文末“阅读原文”了解。


前景展望

TensorLayerX 目前处于刚刚发布的阶段,还有很多的功能正在改进完善,更多的模块和生态产品也在开发当中。


即将开发完成的包括:

  • 多种硬件的分布式训练;

  • TLX2ONNX,实现了 TensorLayerX 模型转换为 onnx 模型,最大程度上和主流深度学习生态接轨;

  • OpenIVA,一个端到端的基于多推理后端的智能视觉分析开发套件,旨在帮助个人用户和初创企业快速部署启动自己的视觉 AI 服务。支持 TensorLayerX / TensorRT / onnxruntime 等多推理后端。


加入我们

TensorLayerX 刚刚发布,羽翼未丰,迫切的需要广大开发者提供宝贵的意见,也欢迎各位开源贡献者参与,一起打造中国人主导的深度学习生态社区


欢迎加入微信群进行日常的问题解答/交流:

↑扫码加微信后申请加入微信群↑


可以通过 Star 启智社区仓库、GitHub 仓库来跟踪最新进展,参与开源软件开发。


如果您有关于开源软件、学术合作方面的意向,请联系董豪老师:hao.dong[at]pku.edu.cn。


图文 | 刘奕良、董豪



—   版权声明  —

本微信公众号所有内容,由北京大学前沿计算研究中心微信自身创作、收集的文字、图片和音视频资料,版权属北京大学前沿计算研究中心微信所有;从公开渠道收集、整理及授权转载的文字、图片和音视频资料,版权属原作者。本公众号内容原作者如不愿意在本号刊登内容,请及时通知本号,予以删除。


“阅读原文”转项目详细介绍

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存