

为什么用Go编写机器学习的基础架构,而不是Python?
source link: https://studygolang.com/articles/32197
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为什么用Go编写机器学习的基础架构,而不是Python?
mb5fd8692eb1f28 · 大约4小时之前 · 30 次点击 · 预计阅读时间 3 分钟 · 不到1分钟之前 开始浏览
Python是机器学习项目中最流行的语言,这点是毋庸置疑的。
虽然像R语言、C++和Julia这样的程序语言有其特有的使用群体与用例,使它们经久不衰,但Python仍是使用最广泛的语言,并用于每个主要的机器学习框架中。
然而,你能想象?在Cortex(将机器学习模型部署为API的开放源代码平台之一)代码库中,87.5%的代码都是使用GO编写。
图源: Cortex GitHub
Python引以为豪的机器学习算法只是生产环境机器学习系统的一个组成部分。如要实际大规模运行生产环境中的机器学习API,您的基础结构需要实现以下功能:
· 自动缩放,确保流量波动不会破坏API
· 实行API管理,以处理API同步部署
· 滚动更新,确保更新模型不会中断用户服务
Cortex旨在自动实现所有上述基础架构,以及其他一些问题,例如日志记录和成本优化。
出于以下考虑,Go是构建满足上述需求软件的理想之选:
1. Go生态系统非常适合基础设施项目

开源的好处之一就是您可以从自己欣赏的项目中不断学习。例如,Cortex存在于Kubernetes(本身用Go编写)生态系统中。很幸运,我们能够在该生态系统中参考许多出色的开源项目,其中包括:
· kubectl: Kubernetes CLI
· minikube: 一种在本地运行Kubernetes的工具
· helm: Kubernetes软件包管理工具
· kops: 管理生产Kubernetes的工具
· eksctl: 亚马逊EKS的官方CLI
以上所有工具不仅仅是Kubernetes项目,并且都是用Go语言编写。无论是查看CockroachDB还是Hashicorp的基础设施项目(包括Vault, Nomad, Terraform, Consul和 Packer),您将发现它们均是使用Go语言编写。
Go在基础架构领域的流行还有另一个影响,那就是大多数对基础架构感兴趣的工程师都熟悉Go语言。所以,很容易通过GO吸引这些工程师。实际上,Cortex Labs最优秀的工程师之一就是通过在AngelList上搜索Go职位找到我们的。他找到了我们,我们感到非常幸运。
2.并发对于机器学习的基础架构至关重要
用户可以将许多不同的模型部署为不同的API,并把所有模型都在同一个Cortex集群中以便管理。而Cortex Operator也需要通过一些API来管理这些不同的部署。举例:
· Cortex调用Kubernetes API在集群上部署模型。
· Cortex调用各种AWS API(包括EC2 Auto Scaling,S3,CloudWatch等)来管理AWS上的部署。
用户不会直接与这些API进行交互。相反,Cortex以编程方式调用这些API来提供群集,启动部署和监视API。
以一种高效、可靠的方式交叉调用API是一项重大挑战。采用并发的方式使用API是最高效的方法,但也引发了问题,因为现在我们不得不担心竞态条件之类的事情。
Go提供了一个解决该问题的简便方案:Goroutines。
Goroutines是Go以并发方式执行代码的普通函数。我们可以另写一篇长文深入探讨Goroutines背后的工作方式,但是概括而言,Goroutines是Go运行时自动管理的轻量级线程。多个Goroutine可以放置在一个OS线程上,如果Goroutine阻塞了OS线程,则Go运行时会自动将其余Goroutine移到新的OS线程上。
Goroutines还提供了一个称为“channel”的功能,此功能允许用户在Goroutines之间传递消息,帮助用户调度请求并预防竞态条件。
当然,用户也可使用asyncio等最新工具在Python中实现这些功能,但Go在设计时就考虑到了这些情况,使用GO可以减轻我们的工作和生活负担。
3.使用Go语言编程是一种享受

我们使用Go构建Cortex的最后一个理由就是:Go语言真的非常好。
相对于Python,Go的入门有点痛苦。但是,Go的包容性能为大型项目带来舒适感。我们仍然在严格测试软件,但静态输入和编译(Go初学者的两大难题)充当了我们的护栏栏,有助于我们编写(相对而言)没有错误的代码。
您可能会说其他语言也会提供特定的优势,但总的来说,Go最大限度地满足了我们的技术和美学需求。
4.使用Go构建跨平台的CLI更容易
Cortex CLI是一个跨平台工具,允许用户直接从命令行部署模型并管理API。以下动图显示了运行中的CLI:

最初,我们使用Python编写CLI,但事实证明,跨平台分发CLI太困难了。而Go可以编译二进制文件(无需依赖管理),为我们提供了跨平台分发CLI的便捷易行方案,而无需进行额外的工程工作。
Go编译的二进制代码与解释型语言相比,具有显而易见的性能优势。根据计算机基准测试结果,GO的速度远胜Python。
许多其他的基础设施CLI工具也是用GO编写,这可能并非偶然。
Python适用于机器学习,而Go适用于基础架构
我们也很喜欢Python,它在Cortex中占有一席之地,特别是在处理推理方面。
Cortex服务于TensorFlow,PyTorch,scikit-learn和其他Python模型,这意味着与模型的接口,推理之前和之后的处理均在Python中完成。但是,即使Python代码经过打包部署到了Docker容器中,这些容器是由用Go编写的代码精心编排的。

如果您有兴趣成为一名机器学习工程师,那么必须熟悉掌握Python。但是,如果您对使用机器学习的基础结构感兴趣,认真考虑一下Go语言,一定会收获满满~
留言点赞发个朋友圈
我们一起分享AI学习与发展的干货
编译组:吴亚芳、李韵帷
相关链接:
https://towardsdatascience.com/why-were-writing-machine-learning-infrastructure-in-go-not-python-38d6a37e2d76
如转载,请后台留言,遵守转载规范
推荐文章阅读
ACL2018论文集50篇解读
EMNLP2017论文集28篇论文解读
2018年AI三大顶会中国学术成果全链接
ACL2017论文集:34篇解读干货全在这里
10篇AAAI2017经典论文回顾
长按识别二维码可添加关注
读芯君爱你

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459
Recommend
-
40
-
61
完善Blog Model 前面的章节 我们分别介绍了MySQL、SQLite、PostgreSQL等数据库的使用 本节简单介绍并完善下我们自己的小博客的Model部分,这部分暂时先分享下Blog Model部分 这部分的完善其实很简单...
-
33
通过之前发布的“
-
42
相似度度量和距离度量在整个机器学习领域都是非常基础的概念,数据科学家 Gonzalo Ferreiro Volpi 近日通过浅显易懂的推荐系统示例介绍了这些概念以及它们的计算方式。 在推荐系统中,我们经常谈到「相似度度量」这一概念。为...
-
31
1、背景 人工智能这个词,现在已经家喻户晓。人工智能在人们日常生活中的应用无处不在,极大地方便了人们的生活。人工智能是一个很大的领域,我们最常见的像智能聊天机器人、自动驾驶、智能推荐,而这些功...
-
22
机器学习无疑是一个时髦的话题,它在一定程度上已经改变了商业运作的方式以及我们每一个人的生活。事实上,机器学习并没有什么神秘之处,它就是一套用于识别不同数据模式的方法,随着科技的发展,它正作为一种工具供人类数据工程师使用。
-
20
Numpy是专门为数据科学或者数据处理相关的需求设计的一个高效的组件。听起来是不是挺绕口的,其实简单来说就2个方面,一是Numpy是专门处理数据的,二是Numpy在处理数据方面很牛逼(肯定比Python原生组件牛逼,否则也不会另外再来搞个Numpy...
-
8
机器学习算法更像“黑暗艺术而不是科学”?来自biztechmagazine报道:麻省理工学院电气工程和计算机科学教授 Sam Madden 指出,机器学习算法通常更像是“黑暗艺术而不是科学”。搅动数据的算法通常是不透明的,而且
-
6
机器学习在自动驾驶中落地,核心不是模型,是管道-51CTO.COM
-
6
1、游双Linux高性能服务器编程 2、
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK