写点什么

为什么说 Swift 会是深度学习的下一个大热门?

  • 2019-05-29
  • 本文字数:3339 字

    阅读完需:约 11 分钟

为什么说Swift会是深度学习的下一个大热门?

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

要说哪门语言能扛起深度学习的大旗,搁以前就是妥妥的 Python。但深度学习“三巨头”之一 Yann LeCun 就断言,深度学习可能需要一种新的编程语言了,Python 已成为“过去式”。而 Swift 一经开源,就让众多饱受 Python 性能和灵活性困扰的开发者兴奋高呼:“终于可以抛弃 Python 了!”TensorFlow 官网也曾发文吐槽过 Python 种种缺点,如性能极差、运行时依赖包过多,不擅长并发处理等等。研究人员 Max Pechyonkin 日前撰文认为,就深度学习而言, Swift 会是下一个大热门。为什么 Swfit 如此备受青睐?让我们看看 Max Pechyonkin 是怎么说的。

前 言

如果你非常喜欢编程,当你听到 Swift 时,你可能会联想到 iOS 或 MacOS 的应用程序开发。如果你对深度学习感兴趣,那你一定听说过 Swift for TensorFlow(缩写为 S4TF)。然后你就可以扪心自问:“为什么 Google 要为 Swift 创建 TensorFlow 版呢?不是已经有了 Python 版和 C++ 版吗?那为什么还要添加另一种版本呢?”在本文中,我将尽力回答这一问题,并概述为什么应该要认真遵循 S4TF 以及 Swift 语言本身。本文写作目的并非提供非常详细的解释,而是提供包含大量链接的总体概述,这样如果你感兴趣的话,就可以点击这些链接进行更为深入的研究。


译注:Swift for TensorFlow 官网:

https://www.tensorflow.org/swift/

Swift 背后有强大的支持

Swift 是 Chris Lattner 在 Apple 工作时创造的一门语言。Chris Lattner 目前已经跳槽到 Google Brain 工作,Google Brain 是全球最优秀的人工智能研究团队之一。Swift 语言的创建者目前在实验室从事有关深度学习的研究,这一事实表明 Swift 是一个严肃的项目。


不久前,Google 意识到,尽管 Python 是一门优秀的语言,但它有许多难以克服的局限性。TensorFlow 需要一门新的语言,经过长时间的考虑,Swift 被选为候选者。我并不会在本文详细阐述这些内容,不过有一个文档讲述了 Python 的缺点,以及考虑过哪些其他语言,并阐述了最终如何缩小范围到 Swift 的。


这个文档可参阅:

https://github.com/tensorflow/swift/blob/master/docs/WhySwiftForTensorFlow.md

Swift for TensorFlow 不仅仅是一个库

S4TF 不仅仅是另一种语言版本的 TensorFlow。从本质上来讲,它就是 Swift 语言本身的另一个分支(从 Git 意义来说)。这意味着 S4TF 并非一个库;它本身就是一门语言,内置了支持 TensorFlow 所需的所有功能。例如,S4TF 有一个非常强大的自动微分(automatic differentiation)系统,这是计算梯度所需的深度学习的基础之一。对比一下 Python,在 Python 中,自动微分并不是该语言的核心组成部分。最初作为 S4TF 的一部分开发的一些功能,后来集成到 Swift 语言本身中。


译注: S4TF 的 Git 地址:

https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is

有关 Swift 的自动微分的资料可参阅:

https://github.com/tensorflow/swift/blob/master/docs/AutomaticDifferentiation.md

Swift 运行特别快

当我第一次知道 Swift 的运行速度和 C 代码一样快的时候,我感到很惊讶。因为我知道 C 是经过高度优化过的,可以实现非常快的运行速度,但这是以微内存管理为代价,结果导致了 C 无法保证内存安全。


现在,Swift 在数值计算中的运行速度与 C 一样块,而且还不存在内存安全问题,还有,Swift 学习起来也容易得多。Swift 背后的 LLVM 编译器非常强大,具有非常高效的性能优化,可确保你的代码运行速度非常快。


译注:Swift 在数值计算中的运算速度与 C 不相上下,可参阅 fast.ai 发布的文章《Swift 的高性能数值编程:探索与思考》

(《High Performance Numeric Programming with Swift: Explorations and Reflections》)

网址如下:

https://www.fast.ai/2019/01/10/swift-numerics/

你可以在 Swift 中使用 Python、C、C++ 代码

鉴于用于机器学习的 Swift 还处于非常早期的阶段,这意味着 Swift 的机器学习库并不多。但你也无需太过担心这个问题,因为 Swift 具有惊人的 Python 互操作性。你只需在 Swift 中导入任何 Python 库,它就可以正常工作。类似地,你也可以将 C 和 C++ 库导入 Swift(对于 C++,你需要确保头文件是用普通的 C 语言编写的,没有 C++ 特性)。


译注:Python 互操作性,请参阅:

https://github.com/tensorflow/swift/blob/master/docs/PythonInteroperability.md

如何将 C 和 C++ 库导入 Swift,可参阅文章《如何使用 Swift 包管理器将 C 库导入 Swift 》(《How to import a C library in Swift using the Swift Package Manager》),网址如下:

https://oleb.net/blog/2017/12/importing-c-library-into-swift/


总之,如果你需要特定的功能,但尚未在 Swift 中实现的话,你可以导入相应的 Python、C 或 C++ 包。这点令人印象深刻!

Swift 可以在非常低的底层中运行

如果你曾经使用过 TensorFlow,那么很有可能是通过 Python 包来实现的。在底层,Python 版的 TensorFlow 库下面有 C 代码。因此,当你调用 TensorFlow 中的任何函数时,在某种程度上你会碰到一些 C 代码。这意味着,当你尝试检查源代码时,存在一个下限。例如,如果你想知道卷积是如何实现的,但你却无法看到相关的 Python 代码,因为它是用 C 实现的。


如果是 Swift,那情况就不一样了。Chris Lattner 称 Swfit 是“LLVM『汇编语言』的语法糖”。也就是说,从本质上来讲,Swift 非常靠近硬件,而且在这两者之间没有用 C 语言编写的其他代码层。这就意味着,Swift 代码运行速度如上所述非常快。这一切使得开发人员能够从非常高的层次开始检查代码到非常低的层次,而无需使用 C。


译注:语法糖,syntactic sugar,也译为糖衣语法,是由英国计算机科学家 Peter John Landin 发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便进程员使用。通常来说使用语法糖能够增加进程的可读性,从而减少进程代码出错的机会。

LLVM 的语法糖可参阅文章《fast.ai 拥抱 Swift 进行深度学习》(《fast.ai Embracing Swift for Deep Learning》),网址如下:

https://www.fast.ai/2019/03/06/fastai-swift/

下一步的方向

Swift 只是 Google 深度学习创新的一部分,还有一个非常密切相关的组成部分:MLIR,表示多级中间语言。MLIR 将是 Google 的统一编译器基础,允许用 Swift(或任何其他支持的语言)编写代码,并将其编译到任何支持的硬件。目前,有许多针对不同目标硬件的编译器,但 MLIR 将改变这一点,不仅允许代码重用,而且还允许编写编译器的自定义底层组件。它还允许研究人员应用机器学习来优化低级算法。


译注:中间语言(英语:Intermediate language),在计算机科学中,是指一种应用于抽象机器(abstract machine)的编程语言,它设计的目的,是用来帮助我们分析计算机进程。这个术语源自于编译器,在编译器将源代码编译为目标代码的过程中,会先将源代码转换为一个或多个的中间表述,以方便编译器进行最佳化,并产生出目的机器的机器语言。

有关 MLIR 更多信息可参阅《MLIR:一种新的中间语言和编译框架》(《MLIR: A new intermediate representation and compiler framework》),网址如下:

https://medium.com/tensorflow/mlir-a-new-intermediate-representation-and-compiler-framework-beba999ed18d

虽然 MLIR 充当了机器学习的编译器,但我们也看到了它支持在编译器中使用机器学习技术!这一点尤为重要,因为开发数值库的工程师的扩展速度赶不上机器学习模型,也不及硬件的多样化。


想象一下,如果我们能够使用深度学习来帮助优化数据的低级内存分块算法(memory tiling algorithms)(类似于 Halide 试图完成的任务)会怎么样。此外,这只是机器学习在编译器中的开始,还有其他创造性应用等待我们去开发!


译注:有关 Halide 更多信息可观看视频《使用 Halide 进行快速图像处理》(《Fast Image Processing using Halide》),视频网址如下:

https://www.youtube.com/watch?v=3uiEyEKji0M

结 语

如果你对深度学习很感兴趣,那么 Swift 就是一门你应该开始学习的语言。和 Python 相比,Swift 有很多优势。Google 正大力投资,使 Swift 成为其 TensorFlow 机器学习基础的关键组成部分,而 Swift 有望成为深度学习的语言。因此,现在就开始学 Swift 吧,及早加入,你将获得先发优势。



公众号推荐:

AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。

2019-05-29 08:0521998
用户头像

发布了 530 篇内容, 共 251.0 次阅读, 收获喜欢 1552 次。

关注

评论

发布
暂无评论
发现更多内容

HarmonyOS Connect FAQ第四期

HarmonyOS开发者

HarmonyOS

大数据训练营毕业总结

Geek_Q

什么!阿里最新版Spring Cloud Alibaba项目文档,竟将重要组件弃用

收到请回复

Java spring 阿里巴巴 面试 spring-cloud

20万字的《Kafka运维实战宝典》PDF现在免费下载了

石臻臻的杂货铺

大数据 kafka

故障处理 | DM 搭建 MySQL 8.0 同步链路报错:code=26005

TiDB 社区干货传送门

安装 & 部署 TiDB 源码解读

离线部署系列文章之二:TiDB集群升级(5.3.0->5.4.2)&缩扩容 TiDB Server、PD、TiKV、TiFlash

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 安装 & 部署

TiDB 和 Java 的简单 CRUD 应用程序

TiDB 社区干货传送门

离谱!这份笔记及实战手册帮助你四天快速上手SpringSecurity

了不起的程序猿

Java springsecurity java程序员 框架

某站下载量过W的近4000页“Java面试合集”号称大厂面试零门槛

收到请回复

Java 程序员 面试 金九银十

五天玩转EMAS Serverless

云端explorer

云计算 Serverless emas

如何让 TiDB 集群管理“更省心”?TiUniManager(原 TiEM)使用教程来了

TiDB 社区干货传送门

云堡垒机主要针对运维过程中的什么进行管理和审计?

行云管家

运维 堡垒机 IT运维 云堡垒机

一对一直播软件——如何实现音视频传播?

开源直播系统源码

软件开发 直播系统源码 一对一语音聊天软件 语音直播系统

采访22年第一批秋招上岸的同学后,我整理了这份Java面试手册

Java面试那些事儿

Java 编程 程序员 架构 面试

离线部署系列文章之一:TiDBv5.3.0集群部署&源码部署 Haproxy v2.5.0

TiDB 社区干货传送门

实践案例 版本升级 管理与运维 安装 & 部署 扩/缩容

利用现有数据库管理系统创建一个安全的分布式数据库集群

亚马逊云科技 (Amazon Web Services)

大数据 分布式 Tech 专栏

Go-Excelize API源码阅读(十四)——GetSheetFormatPr

Regan Yue

开源 源码刨析 Go 语言 8月日更 8月月更

优雅,永不过时!SpringBoot中这样编写Controller层代码,那叫一个完美

Java永远的神

Java 程序员 面试 程序人生 springboot

如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南

TiDB 社区干货传送门

传统堡垒机数据可以迁移到云堡垒机上吗?方式有哪些?

行云管家

云计算 网络安全 堡垒机

如何在企业数字化团队内部实现数据分析建模成果的结构化整合沉淀

ModelWhale

工作流 数字化转型 数字化 案例分享 提高效率

PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

TiDB 社区干货传送门

对话ACE第五期:到底什么才是真正的HTAP?

OceanBase 数据库

当内卷风波及代码领域,看Alluxio将会采取怎样的块分配策略

Alluxio

腾讯 存储 Alluxio block 8月月更

希捷亮相OCP China Day 2022,与生态伙伴共话绿色存储之道

Geek_2d6073

基础到高级涵盖11个技术,Alibaba最新出品711页Java面试神册真香

收到请回复

Java 大数据 架构 编程语言 语言 & 开发

手把手教你实现 TiFlash 向量化函数丨十分钟成为 TiFlash Contributor

TiDB 社区干货传送门

TiDB 和 Golang 的简单 CRUD 应用程序

TiDB 社区干货传送门

多并发下线程创建、释放的阻塞问题

TiDB 社区干货传送门

TiFlash Proxy 模块介绍

TiDB 社区干货传送门

魅族高校新生充电计划进行中,直播课让科目一新生直呼厚道

Geek_2d6073

为什么说Swift会是深度学习的下一个大热门?_AI&大模型_Max Pechyonkin_InfoQ精选文章