新闻动态
新闻动态

Tensorlayer团队的最新作品,跨平台开源框架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 os
       os.environ['TL_BACKEND'] = 'tensorflow'
      # os.environ['TL_BACKEND'] = 'mindspore'
      # os.environ['TL_BACKEND'] = 'paddle'

 

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

 

  #Linux
      export TL_BACKEND= 'tensorflow'
      #Windows
      set TL_BACKEND= 'tensorflow'

 

      搭建模型

 

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

 

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

 

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

 

  from tensorlayerx.nn import Module
      import tensorlayerx as tlx
      from tensorlayerx.nn import (Conv2d, Linear, Flatten, MaxPool2d, BatchNorm2d)

  class CNN(Module):

  def __init__(self):
             super(CNN, self).__init__()
             # weights init
             W_init = tlx.nn.initializers.truncated_normal(stddev=5e-2)
             W_init2 = tlx.nn.initializers.truncated_normal(stddev=0.04)
             b_init2 = tlx.nn.initializers.constant(value=0.1)

            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。