阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

    阅读完需:约 11 分钟

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

要说哪门语言能扛起深度学习的大旗,搁以前就是妥妥的 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 吧,及早加入,你将获得先发优势。



公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2019-05-29 08:0521922
用户头像

发布了 525 篇内容, 共 240.2 次阅读, 收获喜欢 1543 次。

关注

评论

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

Apsara Stack 技术百科 | 可运营的行业云,让云上资源跑起来

阿里云 科技 混合云

百度智能云开物再收“一个奖状”

百度大脑

Linux中Shell重定向

入门小站

Linux

前端培训:3 个可能有用JavaScript 类

@零度

JavaScript 前端开发

四款你必须知道的前端开发工具

编程江湖

在阿里,我们如何管理测试环境

阿里云云效

阿里云 DevOps 云原生 敏捷开发 研发提效

加入科学计算SIG,挑战最前沿的AI+Science研发与创新

百度大脑

做好云管理一定要云管平台吗?云管理平台应具备什么功能?

行云管家

云服务 云管平台 云资源 云管理

天数智芯携手龙蜥社区,以高性能算力助力开源发展

OpenAnolis小助手

Linux 开源 芯片

Java培训:封装的含义及实现方式

@零度

JAVA开发 封装

动态加载不适合数组类?那如何动态加载一个数组类?

华为云开发者联盟

Java 数组 动态加载 数组类

语义级代码克隆检测数据集的评估与改进

华为云开发者联盟

软件工程 代码克隆检测 代码克隆 语义代码克隆 BigCloneBench

聚焦业务价值:分众传媒在 Serverless 上的探索和实践

Serverless Devs

阿里云 Serverless 运维管理 分众传媒 2月月更

大数据培训:Hadoop HDFS 实现原理

@零度

hadoop 大数据开发

上市商业银行推进智慧银行建设,全方位赋能零售业务数字化转型

易观分析

商业银行 智慧银行

Client-go源码分析之SharedInformer及实战| 社区征文

雪雷

Kubernetes Informer 新春征文

巧用这几种文本检索工具,节省80%的时间!

优麒麟

Linux 操作系统 grep 检索 优麒麟

一文详解Kafka API

华为云开发者联盟

kafka API 拦截器 Consumer API Producer API

Springboot中,如何读取配置文件中的属性

华为云开发者联盟

数据库 springboot 映射 配置文件

在线脑图思维导图生成工具

入门小站

工具

PingCode Wiki 权限设计之ACL

阿杰

权限系统 权限控制 acl 权限设计

Hango Rider:网易数帆开源 Envoy 企业级自定义扩展框架

网易数帆

开源 云原生 envoy Hango Rider

开源最佳实践

LinuxSuRen

开源 最佳实践

美景本天成,妙笔偶得之——“妙笔”是怎样炼成的?

百度大脑

SENSORO基于TDengine助力基层政府打造数字化应用标杆

TDengine

数据库 tdengine 开源 物联网

这个Dubbo注册中心扩展,有点意思

捉虫大师

dubbo 注册中心

你会写java脚本吗?-JShell

蜜糖的代码注释

Java 后端开发 2月月更

netty系列之:channel,ServerChannel和netty中的实现

程序那些事

Java Netty nio 程序那些事 2月月更

等保级别最高为几级?市面上常见吗?

行云管家

网络安全 等保 等级保护 过等保

Worktile 权限设计

阿杰

权限控制 rbac 权限设计

程序员必知的8个Java开源IDE工具

编程江湖

ide

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