吾们为什么用 Go 编写机器学习架构,却不必 Python?

时间:2020-01-20 04:43来源:http://www.ydygl.cn 作者:合水县诺嘚旅游网 点击:

原标题:吾们为什么用 Go 编写机器学习架构,却不必 Python?

“倘若你乐趣味成为别名机器学习工程师,那么必须谙练掌握Python——但是,倘若你对机器学习的基础架构感趣味,则答该仔细考虑Go。”

作者 | Caleb Kaiser

译者 | 曲月,责编 | 郭芮

现在,多所周知Python是机器学习项现在中最通走的说话。尽管R、C 和Julia等说话都有各自的声援者和操纵情况,但Python照样是操纵很远大的说话,几乎每个主流的机器学习框架都操纵了Python。

然而,在吾们的Cortex(用于将机器学习模型安放成API的开源平台)代码库中,87.5%的代码都是Go。

Python引以为豪的机器学习算法只是生产机器学习体系的一个构成片面。倘若想大周围运走生产机器学习API,你的基础架构必要实现以下功能:

自动缩放,确保流量震动不会影响API。 API管理,处理同步API安放。 起伏更新,确保更新模型时不会休止用户服务。

吾们构建Cortex的方针是自动化上述一切的基础架构,以及日志记录和成本优化等其他题目。

出于以下因为,吾们认为Go才是构建已足上述需求的柔件的理想之选。

并发对于机器学习的基础架构至关主要

用户能够将很多分别的模型安放成分别的API,并把一切模型都放到联相符个Cortex集群中进走管理。Cortex Operator必要议决一些API来管理这些分别的安放,比如:

Kubernetes API,Cortex调用这个API在集群上安放模型。 各栽AWS API,包括EC2 Auto Scaling、S3、CloudWatch等,Cortex调用这些API来管理AWS上的安放。

用户不会直接与这些API进走交互。Cortex议决程序调用这些API来管理集群、启动安放和监视API。

以高效、郑重的手段交叉调用这些API是一项难题。采用并发的手段处理这些API调用是最为高效的手段,但同时也带来了复杂性,由于吾们不得不不安竞争状况等题目。

Go为解决这个题目挑供了一个开箱即用的解决方案:Goroutines。

睁开全文

Goroutines是Go以并发的手段实走代码的函数。吾们能够另写一篇文章深入探讨Goroutines背后的做事手段,但概括来说,Goroutines是由Go运走时自动管理的轻量级线程。你能够将多个Goroutine放在一个OS线程上,而且倘若Goroutine壅塞了OS线程,则Go运走时会自动将其余的Goroutines移到新的OS线程上。

Goroutines还挑供了一栽名叫“通道”(channel)的功能,你能够行使这个功能在Goroutines之间传递新闻,协助吾们调度乞求并防止展现竞争状况。

自然,你也能够行使asyncio等最新的工具在Python中实现这些功能,但Go的设计考虑到了这些情况,操纵Go能够减轻吾们的做事义务。

操纵Go构建跨平台的CLI更容易

Cortex CLI是一个跨平台工具,用户能够操纵这个工具直接遵命令走安放模型和管理API。

最初,吾们操纵Python编写了这个CLI,旅行吧但原形表明,在多个平台上分发这个CLI太难得了。由于Go能够编译成一个二进制文件(不必要管理倚赖),因而能够为吾们挑供了一个浅易的解决方案,协助吾们在平台之间分发CLI,而无需额表的工程做事。

Go编译后的二进制文件与注释型说话相比,其性能上风也很清晰。按照计算机基准测试效果,Go的速度远胜Python。

很多其他的基础设施CLI工具也是用Go编写的,这绝非未必,详细的理由请参照下面的第三点。

Go的生态体系专门正当基础设施项现在

开源的益处之一在于,你能够向本身赏识的项现在学习。例如,Cortex存在于Kubernetes的生态体系中,而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。因而,很容易吸引到这些工程师。吾们公司最特出的一位工程师就是议决AngelList找到吾们的,吾们很幸运他找到了吾们。

Go说话编程是一栽享福

吾们操纵Go构建Cortex的末了一个理由就是,吾们很享福Go说话编程。

相对于Python,Go的入门有点艰难。但是,Go的宽容性能够为大型项现在带来喜悦感。吾们在测试柔件上专门厉肃,但是静态输入和编译(对于初学者来说Go的两大难题)对吾们来说就像是防护栏,协助吾们编写(相对而言)异国bug的代码。

你能够会说其他说话有分别的上风,但总的来说,Go能够最大限度地已足吾们的技术和美学需求。

Python适用于机器学习,而Go适用于基础架构

吾们也很爱Python,它在Cortex中占据一席之地,尤其是在处理推理方面。

Cortex服务于TensorFlow、PyTorch、scikit-learn以及其他Python模型,这意味着与模型的接口以及推理之前和之后的处理均在Python中完善。固然Python代码经过打包安放到Docker容器中,但这些容器是由Go编写的代码编排的。

倘若你乐趣味成为别名机器学习工程师,那么必须谙练掌握Python。但是,倘若你对机器学习的基础架构感趣味,则答该仔细考虑Go。

原文:https://towardsdatascience.com/why-were-writing-machine-learning-infrastructure-in-go-not-python-38d6a37e2d76

本文为 CSDN 翻译,转载请注解来源出处。

网站分类
相关内容
热点内容
相关站点
友情链接
返回顶部