道翰天琼认知智能机器人平台API接口大脑为您揭秘。目前国内外的AI开源框架领域,以TensorFlow、PyTorch、MindSpore等为代表,正处于一种群雄林立、七国八制的状态,但也增加了AI应用的平台移植成本,所以 TensorLayer的问世难能可贵,它基于各个主流的开源框架,提供了一个统一的AI算法模型接口,不仅稳定了AI应用层,也促进了各开源框架的良序竞争。同时令人称道的是,TensorLayer 也是AI领域为数不多的、由中国学者主导研发并获得国际认可的开源项目,它还曾经获得了ACM Multimedia 2017年度最佳开源软件奖。
鉴于中国AI开源框架实力,整体尚处于一种相对薄弱的状态,那么对于正蓄势待发、投身于AI 开源项目的学者或从业者们来说,TensorLayer 有哪些值得学习的经验呢?为此,我们采访了TensorLayer的项目发起人董豪以及核心开发骨干麦络。
董豪,北京大学前沿计算研究中心助理教授,英国帝国理工学院博士。研究方向是生成模型。 麦络,爱丁堡大学信息学院助理教授。研究方向是计算机系统,机器学习和大数据。 通过董豪和麦络抽丝剥茧般的独到解析,笔者发现:在AI框架领域,生态建设越来越重要,几个人打天下的时代已经过去,其背后是人工智能潮流正奔着技术和产业融合的方向滚滚向前;对于下一代AI开源框架,它的成功将是团队合作、国际视野、技术创新、市场落地和持之以恒的综合结果。 下面,是董豪和麦络在访谈中的精彩观点。
整理:智源社区 常政
智源社区:TensorLayer曾经获得了ACM Multimedia 2017年度最佳开源软件奖,截止目前为止已经有280k下载量,Star超 6k,相关官方项目Star超10k,你觉得它获得成功和公众关注的主要原因是什么?你自己如何定位它的意义和价值? 董豪:TensorLayer能走到现在的一个重要原因,是早在2016年我们就开始做了。当时TensorFlow并不那么好用,需要靠Keras库等来给它做一些支撑。但Keras是属于高度封装的一个库,而我们在做量化网络的时候需要对底层做一点定制化,所以完全无从下手。所以我们最后通过研发TensorLayer,做了简化,让大家在制定Layer时变得非常简单。 我们对自己的定位是面向学术界和工业界,学术界讲究的是更加透明化的编程方式,工业界追求简洁的编程方式,所以这里面需要找到一个平衡点。首先,在学术界的一个优势,便是不用象企业那样更新一个软件版本需要制定计划,今天突然得到一篇论文,可以很快地实现、迭代更新上面的算法模型,并分享给其他人使用;这样带来另外一个好处,便是工业界也可以通过我们的库发现他们没有的一些Layer,从而能够很好地促成学术界的新进展在工业界的使用。另外一方面,是在抽象设计上,对于定制化的东西要简单,同时写出来的代码,要方便大家容易看懂。 麦络:我补充两个点。我们在研发TensorLayer的时候,深度学习的开发者主要有两个选择:TensorFlow或者 Keras。 早期的TensorFlow提供很多底层的API(例如session和graph),足够灵活但是难以上手。另一方面,Keras提供高层次API,简单上手,但是难以对模型和训练过程做定制。非常多的像董豪和我这样的AI研发人员在寻找一个兼顾灵活性和高层次抽象的库,从而帮助我们快速实现新型AI模型。因此我们设计了TensorLayer,并将这种抽象且灵活的哲学贯穿其中。 此外,TensorLayer还提供了很多前沿的算法复现。比如董豪在里面实现了近一、两个月才提出来的算法复现,而Keras注重的是经典算法复现,未必很前沿,这也使得TensorLayer的第一批用户很多来自顶尖大学的PhD。这样,TensorLayer 的生态也就慢慢建立起来了。
智源社区:TensorLayer 和目前业界的主流AI框架是一种什么关系,能否做到兼容? 董豪:我们在这方面的思路是,使得TensorLayer在上层定义出AI模型的一套规范,也就是说AI算法上层的模型都可以拿TensorLayer的基本API定义出来。而对于底层,我们会尝试做到TensorLayer的模型定义是可以运行在MindSpore、TensorFlow和PyTorch等上面。这里面我们可以利用的一个契机是,这些主流框架现在都在尝试做出一套中间表达,比如MLIR、TBM。所以,TensorLayer可以通过在中间做好转接,让很多应用运行在不同的AI框架上面。 智源社区:TensorLayer 目前它的产业应用情况如何?有没有令你印象深刻的几个行业应用? 董豪:首先是垃圾文本,它主要应用于视频直播。TensorLayer 开发了文本垃圾分类程序,可以自动屏蔽视频中的脏话文本等。此外还有视觉识别中的人体姿态估计,影响力也很大,在TensorLayer的Github上,人体姿态估计获得了700、800个Star,而且经常收到全球各地的来信探讨商业化事宜。我们的强化学习库也有量化对冲基金团队在使用。 麦络:还有就是超分辨率复原有很多落地的案例,比如有某家美国上市公司用TensorLayer研发PCB复原。我们这方面的项目获得了2,000多个Star。TensorLayer的应用之所以集中在上述几个领域,其中一个原因是它在视觉和生成对抗网络方面,有很多独有或者比较好的例子。最近一年TensorLayer开始重点支持强化学习,这方面的例子也将会越来越多。
二、通过AI框架看人工智能:
生态建设和团队合作
智源社区:我看到 TensorLayer 目前的版本是2020年4月的 V2.2.2,在近几年TensorLayer的版本更新中,主要经历了哪些重要变化?TensorLayer 的下一个版本预计在什么时候发布,将有哪些新特点? 董豪:深度学习框架如TensorFlow、PyTorch近几年的一个主要变化往支持动态网络的方向发展。TensorLayer 也基于这个大趋势,不断更新,目前已经做了针对RL、NLP、CV及其它工业界需求的具体应用库;此外我们还出版了相关的中英文教程、书籍,包括2017年出版了一本深度学习教程,今年还会出版两本关于强化学习的书籍。 在北大和鹏城实验室的支持下,TensorLayer的下一个版本预计在今年年底发布,其重要特色是将会兼容华为的MindSpore框架。众所周知,华为在AI硬件领域实力雄厚,拥有AI训练芯片,也拥有嵌入式推断芯片等。如果能将华为MindSpore兼容进来,那我们就将GPU、TPU、华为昇腾系列等各类硬件都兼容了,这会使得TensorLayer 用户的代码将具有更大的兼容性。比如可以将GPU上训练出来的内容,通过同一套代码打通国内外的产品。 麦络:MindSpore目前AI模型的生态仍然在建立之中。因此,MindSpore本身也需要像TensorLayer这样的高层次库帮它将生态构建起来,完善强化学习,自然语言处理,生成对抗学习等相关应用。 智源社区:通过TensorLayer的历年升级变化,我们可以从中看到人工智能技术或产业的哪些发展趋势? 董豪:现在开发人工智能基础软件的门槛已经降低,很多前人的工作可以参考,但开发工作量变得越来越大,特别是生态建设要求也越来越高,所以以往那种一两个人写出一个库已经很难成功了,现在好的AI框架基本上都是由大企业来维护,以前来自高校的一些优秀框架如Caffe、Theano、Lasagne等正渐渐退出历史舞台。 另外一个趋势是,国内各类AI 硬件、芯片等出得越来越多,但相对以前来说,现在做AI芯片的难度不大,关键在于能否有生态的支持。所以现在AI基础软件也更加看重如何构建生态。 麦络:人工智能产业正在从算法井喷期,慢慢进入全面应用期。在这个期间,我们的AI基础架构会迎来很大的发展。 首先,在AI框架的架构方面,我们会慢慢看到基于模块化设计的AI框架的出现。计算机乃至芯片的发展也有相似的脉络。例如说,从大型机的整体设计到今天的家用机模块化设计。芯片行业从一开始的大包大揽,到如今的芯片设计和生产的分工。在AI框架的发展上,我们也能看到类似的风格。TensorFlow自上而下全部包揽设计的模式,在行业早期是非常有好处的,能快速发展。但是行业成熟以后,又会阻碍整个产业的健康发展。因此,AI框架最近在开始模块化的尝试,相关标准组织也在慢慢出现。例如说,JAX,MLIR和ONNX等。而模块化架构一旦成熟,会引领下一波AI框架的出现。 同时,AI技术会沉淀到我们日常使用的软件里面。非常多的传统软件(例如说办公软件,数据库,集群管理,芯片设计等)会进行重构,从而高效支持AI算法参与软件运行中的决策。另外,软件开发工具也会更好的支持AI算法。例如说设计对AI友好的编程语言,原生支持异构硬件和自动差分等。Swift和Julia等语言已经开始积极的探索。理论基础方面,2019年底,谷歌和爱丁堡大学在POPL这个顶级编程语言会议上首次提出了一种原生支持自动差分的编程语言。 最后,就是隐私保护会很大程度影响AI产业的发展。现在世界各国对数据安全非常看重。各大互联网公司的推荐系统高度依赖用户数据,而且数据保护法出现后,为了保证互联网广告和推荐系统的可持续发展,也必须要开始思考如何平衡对于数据的利用和保护。今年Google已经第一次在产品上部署基于隐私保护的联邦学习技术。Facebook和阿里巴巴也快速推进,开始了大量隐私保护的预研和产品研发。我觉得这类技术将影响下一代AI框架的研发。例如,新的框架要更好支持云-边-端的统一训练和推断,从而避免数据上传。又或者利用起来新型的加密AI芯片。 智源社区:从长远的角度,TensorLayer 将有哪些发展规划? 董豪:TensorLayer的定位是提供一个AI编程标准,再基于此来兼容不同的计算引擎和训练芯片等,不仅对工业界应用提供一些库支持,同时也支持好科学研究。短期来看,我们目前计划先支持好谷歌TensorFlow、华为MindSpore,因为这两个计算引擎覆盖了国外的GPU和TPU,以及我们华为的训练和推理AI芯片。长期来看,我们的规划主要是根据现有的资源来制定,如果将来有资金、团队等,我们也可以开发下一代商用级的底层计算引擎。这方面,请麦络来谈一下。 麦络:在计算引擎这块,我们作为一个开源软件团队,受限于人力和计算资源的限制,因此我们决定TensorLayer接下来会在差异性,独特性上进一步推进。如果需要做到AI框架的整体突破,就需要像华为MindSpore和英国的GraphCore公司那样做到硬件和软件两手抓,利用硬件成本和性能优势吸引使用者,并且集中大量的开发人员持续对AI框架的各个模块提出创新设计。 聚焦细分领域也给了TensorLayer一个很大的优势就是:我们可以集中力量做大跨步创新,做精品。特别是在“AI新型算法”和“分布式执行”这两个方面。超大NLP模型,深度强化学习,图神经网络,联邦学习正在快速崛起。这些AI算法的多样性会催生出非常多的开源AI软件。例如说,我们最近主推的强化学习方面的RLzoo和实时视觉计算的HyperPose就得到了开源社区的良好反馈和企业用户的使用。 另外,新型AI计算任务往往需要大量计算资源,分布式执行。而这给使用者设立了极高的门槛。我们接下来会在分布式AI软件和算法设计做出创新。例如说,我们最近在重点开发的KungFu项目,就通过在分布式训练领域做精做细,持续攻关自适应分布式训练这一个技术难题。相关的成果已经收获不少社区和学术界关注,并且吸引到头部科技公司(华为,阿里巴巴,微软和Google DeepMind)的大量资源支持和技术合作。同时,在AI趋向于全球云-端协同部署的大背景下,嵌入式AI这块企业需求也很大,我和董老师认为这一块TensorLayer也会有发挥空间。
三、AI开源项目的建议:
智源社区:能否结合TensorLayer 社区的经验谈一谈,如何保持一个开源社区的创造性、活跃度?能否谈一下令你印象深刻的社区几个贡献者? 董豪:首先是社区人员的构成要多样化,背景尽可能不一样,这样才能相互学习。比如我的兴趣是深度学习,但是麦络是做AI系统的,这样我们的交流讨论就能够有更多的创新性。下面列举几个印象比较深的贡献者,他们的年龄段、专业背景等都挺多样化的。
董豪、麦络
张敬卿、丁子涵
张敬卿,清华大学本科,后来到我们帝国理工DSI实验室读PhD,他在NLP上面的贡献比较多。 李国,帝国理工研究员,前伦敦Google高级工程师,他帮助解决了TensorLayer研发中的很多技术难题。 丁子涵,帝国理工研究生,即将攻读普林斯顿大学博士生,TensorLayer强化学习库的主要贡献者,最近我们还出版了强化学习方面的图书。 下面两位是我来北大工作之后认识的吴睿海和吴润迪,都是北大16级本科生。睿海是高中打信息竞赛(OI)的。润迪是北大首届图灵班,计划去哥大读博,睿海准备跟我读博士了。他们对TensorLayer 2.0升级的贡献非常大。 吴睿海、吴润迪 国外的贡献者中,印象最深的便是Jonathon Dekthtia,他是法国的一名PhD,飞行爱好者,研究工业AI,现在去英伟达做Researcher了。他对TensorLayer早期版本,尤其是规范化开源项目管理方面的贡献很大。
Jonathon Dekthtia 智源社区:通过这几年TensorLayer 的研发和开源社区经营,对于你个人主要有哪些收获? 董豪:对我来说主要是能认识AI各个领域的一些朋友,包括我的第一个博士生,正是因为开发TensorLayer认识的。同时开发TensorLayer对我来说,也是一个学习过程。比如在强化学习领域,大家在做的过程中,一起来写一个库,写一本书,这对我来说也是一种学习。 麦络:研发TensorLayer的经历,让我们在AI开源社区具有一席之地。比如我们2018年被邀请到Google的伦敦开发者大会上做演讲,让我们在开源社区中能施加影响力,也更容易获得工业界的资源支持。同时,TensorLayer使得我们能频繁地接触前沿的AI实践者,发掘出重要的AI系统科研问题。 智源社区:在深度学习领域,除了TensorLayer之外,国内外有没有令你比较关注的其它开源项目?为什么? 董豪:除了TensorFlow、PyTorch这些众所周知的项目以外,我比较佩服一个项目的是日本的Chainer,它不仅是比PyTorch还要早的一个库,甚至PyTorch的设计也很大程度上借鉴了它。日本整个国家不大,搞AI的人可能还不如北京市多,但日本人在做事的风格上,非常专注于自己的领域、精益求精并形成一个自己的生态。Chainer的生态一度还是挺强的,在伦敦的时候还有很多人推荐,而且很多日本人发论文只用Chainer来写,并不用TensorFlow或者Pytorch。当然鉴于日本国家体量的局限性,Chainer无法竞争过后来出现的PyTorch,但它一直能很好地维持着自己的生态。 利益相关,旷视、清华/腾讯、一流科技等的工作也值得关注,他们进行了非常大胆的尝试,通过一些优化来提升性能。我们也参与了鹏城实验室正在开发的新一代开源项目,敬请期待。 如果说国产框架翻身的希望,比较看好华为的MindSpore,架构设计得非常好,而且能得到华为的强大支撑:长期的海量资金投入、国际化大团队、自主训练芯片、自主嵌入式芯片、华为云等等。 麦络:很赞同,我平时经常关注MindSpore,其所推崇的模型自动并行,算子自动生成,在云-边-端将训练和推理进行统一,都是我很感兴趣的技术点。框架以外,我也关注AI框架中的各个模块的开源项目,例如,JAX,MLIR和TensorFlow Swift。另外,发布不久的OpenMinded项目,我也很关注。他们试图在云-边-端中实现高效的隐私保护计算解决方案。 智源社区:在深度学习领域,中国学者或研发者要做出世界影响力的开源项目,在哪些方面比较有机会? 董豪:在深度学习领域,一定要做下一代的开源项目,不能总是重复别人已经做过的。所以我建议,大家首先要研究一下5年之后深度学习的软件会变成什么样,这样才有可能取得突破。 麦络:AI系统依然是我认为最有机会的。AI是可能开启第四次工业革命的关键钥匙。我们社会中已经投入了大量的资源和人才,并且已经看到许多良好的商业和社会应用。我相信持续的投入是该领域能持续发展的关键。与此同时,大量中国企业开始产品出海,研发也开始大量的整合世界各国的研发力量,这种国际化的氛围也会让中国的研发者们更容易做出世界级的AI开源软件项目。 智源社区:对于深度学习领域的中国开源工作者,能否提供一些发展建议?
董豪:我觉得分三个方面来说。
首先是项目上,开发的项目要有大幅度的创新,要有预判性。 其次是管理上,需要了解的是开源并不是为了盈利,需要长期维护,即使是有了生态之后,还是要持续投入下去。同时要重视的是,项目有人用才是关键。这一点中国的AI框架还是比较弱,目前我们的下载量是280K,百度 Paddle 是300K,均比TensorFlow少了很多很多。此外,还有许多其他团队开发的库,甚至总下载量都不如国外框架一个小时的下载量。总的来说,如果开源项目没有市场的话,可能刚开始的两年你会很兴奋,但如果没有人用你也坚持不了很久的。 第三,在讲究生态的时代,几个人搞定全部已经不现实了,而且也不可能几个人做一辈子。举个例子,比如TensorLayer,我们也不可能什么都做,我们下一个版本,对于分布式的支持,我们用的是麦络帝国理工那边的Kungfu来实现跨平台兼容,反正都在我们社区可控的范围内就行。 麦络:我们发现许多咱们本土的开源项目的国际化程度欠佳。我身边不少欧美的合作者会顾虑代码质量和社区文化,而不愿意使用这些项目。我们在构建开源软件中,要在文档,代码规范,集成测试,国际宣讲,社区互动和管理,等很多方向做到国际最顶尖的标准。这样,我们的开源软件才能争取大量国际用户,日后在AI软件发展中形成能覆盖全球的话语权。这一点在中美科技竞争的大背景下显得尤为重要。 另外,就是长期地投入也相对欠缺。一旦软件开源后,后续维护管理不足。这就形成了恶性循环:维护越不够,大家就越不敢用;越不敢用,就越没有动力维护。解决这个问题的关键是,开源软件开发者对于自身的信心,以及对于开源项目长期投入的价值认同。我和董豪在过去四年开发过程中,很多朋友都劝我们放弃,说一些功能TensorFlow已经做了,TensorLayer的没必要做了。但我们觉得Google毕竟是一家商业公司,许多设计考量并不是对于全行业最优,这反而给了很多开源项目发挥的空间。另外,TensorLayer不仅仅是一个软件,也是一个源源不断培养开源人才的社区,而这都让TensorLayer在最近几年越活越好。我相信只要认清自身项目的独特性和优势,形成良好的社区文化,很多项目坚持下去,都会最终开花。
董豪:是的,星星之火可以燎原,慢慢来、能一直做下去就好。
道翰天琼CiGril认知智能机器人API用户需要按步骤获取基本信息:
请求地址:http://www.weilaitec.com/cigirlrobot.cgr
请求方式:post
请求参数:
参数 |
类型 |
默认值 |
描述 |
userid |
String |
无 |
平台注册账号 |
appid |
String |
无 |
平台创建的应用id |
key |
String |
无 |
平台应用生成的秘钥 |
msg |
String |
"" |
用户端消息内容 |
ip |
String |
"" |
客户端ip要求唯一性,无ip等可以用QQ账号,微信账号,手机MAC地址等代替。 |
接口连接示例:http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552
注意事项:参数名称都要小写,五个参数不能遗漏,参数名称都要写对,且各个参数的值不能为空字符串。否则无法请求成功。userid,appid,key三个参数要到平台注册登录创建应用之后,然后查看应用详情就可以看到。userid就是平台注册账号。
示例代码JAVA:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class apitest {
/**
* Get请求,获得返回数据
* @param urlStr
* @return
*/
private static String opUrl(String urlStr)
{
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try
{
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5 * 10000);
conn.setConnectTimeout(5 * 10000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() == 200)
{
is = conn.getInputStream();
baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[128];
while ((len = is.read(buf)) != -1)
{
baos.write(buf, 0, len);
}
baos.flush();
String result = baos.toString();
return result;
} else
{
throw new Exception("服务器连接错误!");
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (is != null)
is.close();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
if (baos != null)
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
conn.disconnect();
}
return "";
}
public static void main(String args []){
//msg参数就是传输过去的对话内容。
System.out.println(opUrl("http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552"));
}
}