极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:58
登录|注册

为何用Go而非Python编写机器学习基础设施?

讲述:丁婵大小:8.22M时长:05:58
Go 是一种静态强类型、编译型、并发型且具有垃圾回收功能的编程语言,其优点包括部署简单、并发性好、语言设计良好、执行性能好等等。Python 是机器学习项目中最流行的语言,几乎在每个机器学习项目中都能见到它的身影。最近,Cortex Labs 介绍了团队用 Go 而非 Python 编写机器学习基础设施的原因,其重点内容如下。
最近,我们构建了一个将机器学习模型部署为 API 的开源平台—— Cortex,我们考虑了很久应该如何选择编程语言,而最终的结果是代码库中 87.5% 用了 Go。经过一番比较,我们认为:Python 适用于机器学习,而 Go 适用于基础设施。
Python 所擅长的机器学习算法只是生产机器学习系统的组成部分之一。要大规模运行生产机器学习 API,你需要实现如下功能的基础设施:
可自动伸缩,以便在发生流量波动时不会中断 API。
API 管理,用于处理同时部署的 API。
滚动更新,以便在为用户提供服务的同时更新模型。
Cortex 的构建旨在自动化实现所有这些基础设施的功能,以及其他关注点,如日志记录、成本优化等。Go 是满足这些因素的理想选择,原因有以下四点。

1. 并发性对机器学习基础设施至关重要

用户可以将许多不同的模型部署为不同的 API,所有这些 API 都在同一个 Cortex 集群中进行管理。为了让 Cortex Operator 管理这些不同的部署,它需要处理几个不同的 API。比如 Kubernetes API,Cortex 调用该 API 在集群上部署模型。再比如各种 AWS API,Cortex 调用这些 API 来管理 AWS 上的部署。
用户并不直接与这些 API 中的任何一个进行交互。相反,Cortex 是通过编程方式调用这些 API 来进行配置集群、驱动部署和监控 API 的。
要使所有这些重叠的 API 调用具有可执行性、可靠性是一个挑战。最有效的处理方式,是对它们进行并发处理,但这同时也引入了复杂性,因为我们必须考虑竞争条件之类的问题。
对于这一问题,如果要在 Python 中实现所有这些功能,可以用 Asyncio 之类的最新工具来实现,但 Go 在设计时就考虑到了这个用例,这点让我们的工作变得更轻松。
Go 有一个优雅的、开箱即用的解决方案:Goroutines。它是由 Go 运行时自动管理的轻量级线程,许多 Goroutines 可以放在单个 OS 线程上,如果 Goroutines 阻塞了一个 OS 线程,Go 运行时会自动将其余的 Goroutines 转移到新的 OS 线程上。Goroutines 还提供了称为“通道”的特性,允许 Goroutines 在它们之间传递消息,还允许我们调度请求并防止出现竞争条件。

2. 用 Go 来构建跨平台的 CLI 更容易

Cortex CLI 是一个跨平台的工具,允许用户直接从命令行部署模型和管理 API。
最初,我们用 Python 编写 CLI,但事实证明,试图跨平台进行分发实在是太困难了。因为 Go 可以编译成单一的二进制文件,不需要依赖管理,这就为我们提供了一个简单的解决方案,可以做到跨平台进行分发 CLI,而不需要做太多额外的工程计划。
与解释性编程语言相比,编译后的 Go 二进制代码的性能优势也非常显著。根据计算机基准测试的结果来看,Go 要 比 Python 快得多。

3. Go 语言的生态系统有利于推动基础设施项目

开源的好处之一,就是你可以从你欣赏的项目中学习。例如,Cortex 存在于 Kubernetes(它本身就是用 Go 编写的)生态系统中。很幸运的是,在我们这个生态系统中,有许多伟大的开源项目可供学习,包括:
kubectl:Kubernetes 的 CLI
minikube:本地运行 Kubernetes 的工具
helm:Kubernetes 的包管理器
kops:管理生产 Kubernetes 的工具
以上这些都是用 Go 编写的。
Go 在基础设施领域的流行还有另一个影响,那就是大多数对基础设施感兴趣的工程师都熟悉 Go 语言,这使得 Go 更容易吸引工程师。

4. 用 Go 进行工作是一种乐趣

相对于 Python,Go 入门有点痛苦。然而,Go 的高冷性质使它成为大型项目的乐趣所在。我们仍然对软件进行严格的测试,但静态输入和编译,这两件事会让初学者有点不舒服,而这就像是我们的防护栏,有助于编写没有 Bug 的代码。
也许你会认为,可能还有其他语言可以提供某种优势,但总的来说,Go 最能满足我们的技术和审美需求。
我们仍然喜欢 Python,它在 Cortex 中也占有一席之地,尤其是在推理处理方面。
总而言之,如果你想成为一名机器学习工程师,那么就必须或多或少的了解 Python。但如果你对机器学习基础设施感兴趣的话,那么,你就应该认真考虑使用 Go。
以上就是的今天的内容,希望能给你带来参考价值。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
1. 并发性对机器学习基础设施至关重要
2. 用 Go 来构建跨平台的 CLI 更容易
3. Go 语言的生态系统有利于推动基础设施项目
4. 用 Go 进行工作是一种乐趣
显示
设置
留言
收藏
52
沉浸
阅读
分享
手机端
快捷键
回顶部