抛弃Python,我们为什么用Go编写机器学习架构?
作者 | Caleb Kaiser
译者 | 弯月,编辑 | 郭芮
来源 | CSDN(ID:CSDNnews)
如今,众所周知Python是机器学习项目中最流行的语言。尽管g f 0 ; ] ? C qR、C++ 和Julia等语言都有各自的支持者和使用情况,但Python仍然是使用最普遍的语言,几乎每个主流的机器学习框架都使用了Python。
然而,在我们的Cortex(用于将机器学习模型部署成API的开源平台)代码库中,87.5%的代码都是Go。
Python引以为豪的机器学习算法只是生产机器学习系统的一个组成部分。如果想大规模运行生产机器学习API,你的基础架构需要实现以下功能:
自动缩放,确保流量波动不会影响AW b m % ] KPI。
API管理,处理同步API部署。
滚动更新,确保更新模型时不会中断用户服务。
我们构建Cortex的目的是自动化上述所有的基础架构,以及日志记录和成本优化等其他问题。6 * 2 u
出于以下原因,我们认为Go才是构建满足上述需求的软件的理想之选。* J O T 4 .
并发对于机器学习的基础架构至关重要
用户可以将许多不同的模型部署成不同的API,并把所有模型都放到同一个Cortex集群中进行管理。 n ;CortF x ]ex Operator需要通过一些API来管理这些不同的部署,比如:
Kuberneth G * X Z Ues API,Cortex调用这个API在集群上部署模型。
各种AWS AP1 g GI,包括EC2 Auto Scaling、S3、CloudWatch等,Cortex调用这些API来管理AWS上的X ] R n部署。N s v 7 X -
用户不会直接与这些API进行交互。Cortex通过程序调用这些API来管理集群、启动部署和监视API。
以高效、可靠的方式交叉调用这些API是一项难题。采用并发的方式处理R B : a : ^ g p 3这些API调用是最c 1 e t为高效的方式,但同时也带来了复杂性,因为我们不$ X U , e A C J t得不担心竞争v u d @ .状况等问题。
Go为I X H G F | p q解决这个问题提供了一个开箱即用的解决方案:Goroutines。
Goroutines是Go以并H D u f v d发的方式执行代码的函数。我们可以另写一篇文章深入探讨Goroutines背后的工作方? L Y ; p式,但概括来说,Goroutines是由Go运行时自动管理的轻量级线程。你可以将多个Goroutine放在一个OS线程上,而且如果Goroutine阻塞了OS线程,v o % , 2 ~ G则Go运行时会自动将其余的Goro0 l h 2utines移到新的OS线程上。
Goroutines还提供了一种名叫“通道”(channel)的功能,你可以利用这个功能在Gorout} e U ? _ t -ines之间传递消息,S @ X : #hon模型,H w 6 } C 1 0 3这意味着与模型的接口以及推理之前和之后的处理b r |均在Python中完成。虽然Python代码经过打包部署到Docker容器中,但这些容器是由Go编写的代码编排的。
如果你有兴趣成为一名机器学习工程师,那么必须熟练掌握Python。但是,如果你对机器学习的基础架构感兴趣,则应该认真考虑Go。
原文链接:
https:! I O , f//towardsdatascience.com/why-were-writing-machine-learning-infrastructure-in-go-not-python-38d6a37e2d76
(*本S G + . z W O ! a文为AI科技大本营转载文章,转载请x R + : n 7 D联系原作者)