伊瓢 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

不久前,Julia Computing官方放出了一篇论文,展示将Julia代码和机器学习模型编译到谷歌云TPU的方法,可以实现在0.23秒内完成100张图片VGG19正向传递。

Jeff Dean看到这个方法后,开心的转了一作的Twitter,并且评价:真是又快又容易呀!

该方法应用的正是谷歌上个月给TPU开放权限的XLA(Accelerated Linear Algebra)编译器。

XLA嵌入

首先,需要定义动态语义和静态嵌入,定义一个运行时结构来嵌入XLA值

 1const AA{T, N} = AbstractArray{T, N} 2struct XRTArray{T, Shp, N} <: AA{T, N} 3storage::XRTAllocation 4# XRTArrays are constructable by 5# conversion from regular arrays 6function XRTArray( 7a::Array{T, N}) where {T, N} 8new{T, size(A), N}(transfer(a)) 9end10# XRTArrays are constructable from a11# remote memory allocation if12# (T, Dims, N) are specified13function XRTArray{T, Dims, N}(14a::XRTAllocation) where {T, Dims, N}15new{T, Dims, N}(a)16end17end
 XRTArray的定义

假设我们有一个示例XLA操作’Foo’采用一个静态操作数(例如一个整数)和两个动态操作数。 我们将声明此嵌入如下:

1struct HloFoo <: HloOp{:foo}2static_operand::Int3end45function (hlo::HloFoo)(dop1::XRTArray,6dop2::XRTArray)7execute(hlo, dynamic_op1, dynamic_op2)8end

手动构建XLA嵌入:

 1# An HLO operand that generates a random 2# uniform random number of the specificed 3# shape and element type: 4struct HloRng <: HloOp{:rng} 5Type 6Shape 7end 8 9"""A function that adds random numbers to10each entry of a 1000x1000 matrix"""11@eval function add_rand_1000x1000(12A::XRTArray{Float32, (1000, 1000), 2}13random = $(HloRng(Float32,14(1000, 1000)))()15result = $(HloAdd())(random, A)16return result17end18

将Julia映射到XLA

现在,可以将Julia代码编译到XLA,不过Julia不是用HLO运行的,而是根据Julia库提供的功能编写的。

好在,Julia使用多个调度可以很容易地表达如何用HLO实现标准库抽象。下面是一个简单的例子:

 1# Matrix-Matrix and Matrix-Vector product 2function Base.:*(A::XRTMatrix, 3B::Union{XRTMatrix, XRTArray}) 4ddots = DimNums((1,), (0,), (), ()) 5HloDot(ddots)(A, B) 6end 7Base.transpose(A::XRTArray) = 8HloTranspose((1,0))(A) 9# Scalar addition10Base.:+(A::XRTArray{T, (), 0},11B::XRTArray{T, (), 0})12where {T<:XLAScalar} =13GenericHloOp{:add}(T, ())(A, B)

结果比对

论文中举了VGG19正向传递和反向传递的例子。

VGG19正向传递使用Metalhead软件包Mike Innes&Contributors(2018)中的VGG19实现,它利用了Flux Innes&Contributors(2017)框架将熟悉的机器学习层(卷积层,密集层)转换为线性代数运算。

但是,重要的是,Flux框架中的每一层都只是一个常规函数,而这些函数又调用常规线性代数运算。因此用Flux表达的机器学习模型只需要简单的Julia函数,适用于本文所述的方法。

VGG反向传递则使用基于Zygote.jl编译器的AD框架Innes(2018)。Zygote对Julia代码进行操作,其输出也是Julia函数,适合重新引入Zygote以获得更高阶导数,但也适合编译到TPU。

这张表格展示编译到XLA后,Metalhead.jl VGG19正向传递和反后传递的指令计数细分。

传送门

Automatic Full Compilation of Julia Programs and ML Models to Cloud TPUs
作者:Keno Fischer, Elliot Saba
https://arxiv.org/abs/1810.09868

加入社群

量子位AI社群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;

此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。

进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

活动策划招聘

量子位正在招聘活动策划,将负责不同领域维度的线上线下相关活动策划、执行。欢迎聪明靠谱的小伙伴加入,并希望你能有一些活动策划或运营的相关经验。相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

谷歌云TPU上可以用Julia啦!0.23秒跑100张图片,Jeff Dean点赞推荐相关推荐

  1. 谷歌大脑提出“洗发水”二阶优化算法,Transformer训练时间减少40%,Jeff Dean点赞...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 机器学习的优化步骤,目前都是一阶方法主导. 无论是SGD还是Adam,此类优化算法在都是计算损失函数的一阶导数--梯度,然后按照某种规定的 ...

  2. pytorch resnet50_PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?...

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI Facebook在PyTorch开发者大会上正式推出了PyTorch 1.3,并宣布了对谷歌云TPU的全面支持,而且还可以在Colab中调用 ...

  3. PyTorch终于能用上谷歌云TPU,推理性能提升4倍,我们该如何薅羊毛?

    点击我爱计算机视觉标星,更快获取CVML新技术 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI Facebook在PyTorch开发者大会上正式推出了PyTorch 1.3,并宣布了对谷歌 ...

  4. 谷歌云TPU服务正式全面开放:「AlphaGo背后的芯片」进入商用化

    来源:机器之心 概要:作为科技巨头的谷歌早已把这种高度定制化产品应用在了自己的服务器中,而本周一,谷歌宣布其他公司马上也将可以享受新型芯片带来的计算服务了. 2016 年 5 月,谷歌向世人发布了一款 ...

  5. 1美元从零开始训练Bert,手把手教你优雅地薅谷歌云TPU羊毛

    大数据文摘出品 来源:Google Colab 编译:武帅.曹培信 2018年10月,Google AI团队推出了Bert,可以说Bert一出生就自带光环. 在斯坦福大学机器阅读理解水平测试SQuAD ...

  6. bert 中文 代码 谷歌_1美元从零开始训练Bert,手把手教你优雅地薅谷歌云TPU羊毛...

    大数据文摘出品 来源:Google Colab 编译:武帅.曹培信 2018年10月,Google AI团队推出了Bert,可以说Bert一出生就自带光环. 在斯坦福大学机器阅读理解水平测试SQuAD ...

  7. 在谷歌云服务器上搭建深度学习平台

    2018年9月8日笔记 登录谷歌云控制台需要科学上网,连接云主机不需要科学上网. 阅读此文并进行操作的前提是已经成功申请谷歌云的使用资格,并获得300美元使用金额. 如何申请谷歌云的使用,请阅读另外一 ...

  8. 李飞飞公布谷歌云TPU、AutoML、行业方案等多项进展,AI云计算成谷歌全新增长点...

    来源:全球人工智能 摘要:7 月 24 日-26 日,Google Cloud NEXT 18 大会在美国旧金山举行. 7 月 24 日-26 日,Google Cloud NEXT 18 大会在美国 ...

  9. 2亿人信息遭泄露 谷歌云服务器上发现未受保护数据库

    华纳云: 据外媒报道,2019年10月,一个汇总了12亿用户个人信息的数据库被发现毫无保护的存在于某个服务器上,这些个人信息中包括社交媒体帐户.电子邮件地址和电话号码. 到目前为止还不清楚该数据库出现 ...

最新文章

  1. Hadoop集群高可用及zookeeper+kafka组件搭建
  2. 成功解决_catboost.CatBoostError: Bad value for num_feature[non_default_doc_idx=0,feature_idx=0]=“FDO09“:
  3. arthas 查看哪个方法调用最耗时_Java开源诊断工具Arthas使用方法详解
  4. 使用React和Tailwind CSS搭建项目模板
  5. KNN实现CIFAR-10数据集识别
  6. 影响大数据和分析的5大趋势
  7. [Advance] How to debug a program (下):示例
  8. 光干涉波谷,有可能低于绝对零度
  9. Android自定义选座,Android实现电影院选座效果
  10. windows环境下neo4j下载安装配置
  11. 第62篇:批量去除EXCEL文件密码
  12. SpringCloud微服务实战——搭建企业级开发框架(三十一):自定义MybatisPlus代码生成器实现前后端代码自动生成
  13. BandZIP无广告版(v6.25)安装及禁止联网设置
  14. 正则表达式语法简介说明
  15. 手机桌面上的计算机为什么不能删除,为什么我的电脑无法删除C盘上的文件当删除 – 手机爱问...
  16. 关于MYM码支付系统
  17. [CSP-J 2021] 网络连接
  18. JS中终止函数执行的代码
  19. IntelliJ IDEA远程调试设置
  20. Vue 实例实战之 Vue webpack 仿去哪儿网App页面开发(应用中的几个页面简单实现)

热门文章

  1. rabbitmq视频教程,面试官:
  2. mysql-libs 5.6.23_利用rpm包手把手教你安装MySQL5.6.23
  3. java utf8 简繁转换 类库_在Java中进行中文繁体简体转换,基于OpenCC(Open Chinese Convert)方案...
  4. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...
  5. 广义典型相关分析_一文教你掌握广义估计方程
  6. 学习vue3系列computed
  7. 测试交友软件哪个最好用,陌陌与比邻你觉得哪个好用?陌陌比邻两大交友软件对比...
  8. 搭建oracle运行环境,搭建 Oracle Warehouse Builder 11
  9. java modal_Java 源码-模态对话框(Modal Dialog Box)的实现
  10. Spring MVC上传文件后重命名读取不显示,报错已解决(The origin server did not find a current representation for the targe)