W3C

Web 中文兴趣组会议

2022年9月6日

题目:Web 图形和机器学习的一些探索

讲者:顾扬(英特尔)[演示文稿]

现场纪要

顾扬:

大家下午好!我是顾扬,来自英特尔。我在英特尔负责Web图形和machine learning的团队,我在英特尔时间比较长了,过去十年我们都是在图形领域,近年来在machine learning领域进行了一些探索,希望有这样的机会和大家分享。很高兴见到大家,上一次见到W3C小伙伴在线下还是2018年。

我主要分三个部分讲一下:第一部分是Web图形;第二部分讲讲我们在机器学习的探索;最后介绍一下我们团队。

首先是Web图形。我画了一个时间轴讲一下图形领域的一些标准演进,从中间这条线开始,这是OpenGL,已经有30岁高龄了,从1.0、2.0演进下去,现在一直演进到4.6的版本。

在OpenGL基础上发展的OpenGL ES,一直发展到了3.2,Web Grasphics,1.0到2.0;微软还有D3D,已经是二十多年的标准。

我们看到老的标准已经非常长的时间,这些年GPU发展很快,老的标准已经无法适应新的GPU硬件技术的发展,所以已经起到很大的阻碍作用,我们知道老的GL、D3D11已经停止了开发,代之以新的native Graphics APIs。近年来发展了新的标准,围绕这些发展,Web肯定要有新的发展。所以在WebGL之后提出了新的标准,在W3C创建一个CG,已经有了五年多的时间。

看一下架构图,[多媒体演示]最上层是各种Usage,所以GPU越来越扮演了更重要的角色。

GPU往下走,WebGPU适应了新的API发展,我们对应了新的API。

看看WebGPU可以说是最复杂的API了,有100多套API,称之为WGSL。在底层主要对接GPU,当然也可以和CPU交互。

要问到WebGPU和WebGL的区别,WebGPU是base新的GPU上,意味着更好、更可控。对Graphics更可知。

还有一个很大的不同,现在已经进入了多核时代,我们肯定知道GPU是多核,但是CPU已经越来越多核了,英特尔的CPU都有8个大的core,还有8个小的core,在这样的情况下,WebGL时代无法充分利用,WebGL只能用一个CPU的core,但是WebGPU会同时用多个,会极大地节省时间。

我们知道WebGL上有一个非常重要的benchmark Aquarium,有很多鱼在水族箱里游来游去,我们做了很多优化,我们需要增加复杂度,就需要把鱼增加到2~3万条,但我们进行调整的时候,发现CPU成为了一个bottleneck。

最后也是WebGPU带来的好处,它第一次把GPU的通用计算能力带到了Web上,这是非常大的好处,我们用它来做machine learning的实例。

三年多时间成立了working group,英特尔在一直参与标准的制定和标准的实现。2020年8月份,我们成立了working group,2021年Chrome发布了第一个Origin Trial版本,让一些developer可以早期适应这些功能。现在我们有计划在明年早些时候正式应用WebGPU。

Chrome的实现现在基本上ready了。其他的浏览器都在积极的追赶,像Firefox有希望在近期完成实现。

尽管我们WebGPU还没有正式发布,但现在已经有非常多的早期用户,我们知道在Web图形领域有两大引擎,一个是Google的,一个是微软的,这两个引擎都全面支持了WebGPU。

我们有知道两大游戏引擎,一个是Unity,一个是Unreal都对接了WebGPU,COCO也做游戏引擎,还有Snap、Node.jS。

这一页讲讲英特尔过去四五年时间在WebGPU里的一些贡献。我们贡献了大约2000多个patches到标准,测试和浏览器实现中。像WGSL、DXIL。看一个程序的perfomance,光CPU不够,如果程序里用了大量的GPU,会有GPU的时间线,只有把两个时间线都弄得非常清楚,才知道问题在哪里。

刚才很多小伙伴们介绍了Video,在这个领域我们花了三四年时间研究标准,就是怎么样把一个Video upload到WebGPU和WebGL里。可以把所有的数据全部留在GPU端。

我们积极参与各种WebGPU的meeting当中,因为我们的参与,本来时间对中国非常不友好,working group非常友好,每个月会专门有一次中国的时间,我们每个月会参与一次meeting,和Google、微软等交流,在各个会议上讲一些我们的进展。

在机器学习领域,我们做了怎样的探索呢?

在Use cases的角度,我们定义了非常常见的Use cases,对应了市面上基本的主流框架。怎么对应这些框架在浏览器领域做支持呢?我们在三个层面做了探索。

我们在里面通过一些优化,把它自动转成256位,现在这个正在review。

下面讲讲TensoFlow.jS。TensoFlow.js WebGPU后端是英特尔负责的,意味着我们可以自己review自己提交项目到code里。

当前任何一个TensoFlow.js发布都会同步发布一个WebGPU Backend,虽然版本号还不一致,我们称之为Alpha Release。WebGPU的Backend已经支持了2/3 ops,为什么没有支持其他1/3呢?因为我们还没有花时间。

当支持2/3之后,我们已经支持所有的benchmark了。

经过三年的发展,我们贡献了几百个patches到TensoFlow.js,现在的性能,我们基本上是WebGL backend的1.5倍,我们正在实现16位浮点数,int8到WebGPU的标准里,这些都会巨大提升machine learing的性能。

对比wasm,我们的proformance远远胜出,但在一些小的模型上,GPU有一些overhead,所以我们要慢一些。比如有的模型只要跑2~3毫秒,WASM只要1毫秒,这没有办法。可能大的模型WebGPU几十毫秒就跑出来了。

为什么做这个项目?一方面因为几年前,我们曾经有一个WebGL的计算能力试图带到Web上,当时我们有一个WebGL 2.0 compute的标准,现在在Khronos可以查到。后来决定不继续这个标准,而拥抱WebGPU,我们统一用WebGPU cover这些能力。

我们做了这些之后,希望用一个比较好的应用用WebGPU的标准实现,我们自己造了WebGPU,也需要自己用、自己反馈。所以,这个过程中,我们提供很多feedback到WebGPU。

后面是我们在WebNN上开创性的工作,大概四年前,我们在W3C上提议,后来英特尔成为了这个标准的领头者,我们和Google、微软一起演进这个标准。目前,我们已经陆陆续续进了一些patch,慢慢会实现CPU的backend,也会实现GPU backend。

所以,我们希望WebGPU在现阶段可以提供相对好的solution,方便大家使用。当然机器学习在WebGPU上还有很多的路要走,我们也积累了一些经验,这个技术本身也发展很快,几个月以前的技术可能几个月之后就会换掉了,所以我们要跟随标准的演进或提出新的标准。

最后一部分介绍一下我们的团队。我们叫做Web图形和机器学习团队。

相对来说历史比较悠久,2011年,也就是十多年前我开始在英特尔内部lead Web图形的开发,慢慢壮大成一个team,现在team有二十多个人,2012~2014年过程中,花了两年时间优化了WebGL 1.0的实现。后来又花了一些实现优化了WebGL2.0。再之后我们提出了新的标准,WebGL2.0 Compute,但非常遗憾不再推进这个标准,但大量的code实现已经在Google的ANGLE的项目当中,这是WebGL的库,会做WebGL API的转化,所以我们大量的code还留在那边,现在ANGLE继续使用。

这个标准还没有结束,我们就开始做WebGPU的开发,也开始做TensorFlow.js的WebGPU backend。

目前我们是英特尔在这些标准组织里的代表,WebGL WG, WebGPU WG、W3C WebNN WG代表。整体来说,十年的时间,很好的塑造了一个团队,我很荣幸能够和这支团队一起成长,我们也在Web Graphics领域和机器学习领域贡献了很多。

我们也是Web Graphics在英特尔平台上所有问题的owner。

这是我的联系方式,前面跟不同的人有过一些交流,之前我在一些交流场合当中分享了Web Graphics的进展,国内很多人可能由于各种原因,由于英语的原因,时差的原因,不是太容易参与到国际化论坛或者会议当中讨论问题,这个情况客观存在,我们希望通过我们团队的努力,缩小这方面的gap。

所以我建立了一个Web Graphics交流的平台,当然更鼓励你们去标准组织直接交流,但如果你们和本土团队交流更顺畅,欢迎你们向我们提出需求,我们会很快的解答你们的问题。谢谢!

顾扬:我很想回应一下问题,很多国内的公司在问upstream,这么长的时间里,很多企业没有办法等待了,或者企业里的个人没有办法等待了,因为每年的绩效考核等逼着它,这个东西的价值到底是什么?回过头来问一下,国内很多企业并不一定在标准上有直接的需求。

但是,这几年在应用层面有大量应用是基于这些技术,比如今天提到的WebCodecs或者是Graphics的技术,这些技术会为我们带来大量的经验,同时我们也会碰到大量的问题。与其个别厂商或者个人单打独斗,还不如把这些问题提到标准组织里,共同面对这些问题。

我很鼓励大家把一些的问题分享到标准组织,也可以提给我们,我们可以帮助你们直接实现在浏览器或者标准里。


返回[会议总结页面]获取其他话题的会议纪要。

若您对上述内容有任何疑问或需进一步协助,请联系:讲者顾扬 <yang.gu@intel.com> 或会议主办方 W3C 北航总部 <team-beihang-events@w3.org>。