溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python

發(fā)布時(shí)間:2021-11-19 13:15:21 來源:億速云 閱讀:180 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python”吧!

Python是機(jī)器學(xué)習(xí)項(xiàng)目中最流行的語(yǔ)言,這點(diǎn)是毋庸置疑的。

雖然像R語(yǔ)言、C++和Julia這樣的程序語(yǔ)言有其特有的使用群體與用例,使它們經(jīng)久不衰,但Python仍是使用最廣泛的語(yǔ)言,并用于每個(gè)主要的機(jī)器學(xué)習(xí)框架中。  然而,你能想象?在Cortex(將機(jī)器學(xué)習(xí)模型部署為API的開放源代碼平臺(tái)之一)代碼庫(kù)中,87.5%的代碼都是使用GO編寫。

為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python

圖源: Cortex GitHub

Python引以為豪的機(jī)器學(xué)習(xí)算法只是生產(chǎn)環(huán)境機(jī)器學(xué)習(xí)系統(tǒng)的一個(gè)組成部分。如要實(shí)際大規(guī)模運(yùn)行生產(chǎn)環(huán)境中的機(jī)器學(xué)習(xí)API,您的基礎(chǔ)結(jié)構(gòu)需要實(shí)現(xiàn)以下功能:

  • ·  自動(dòng)縮放,確保流量波動(dòng)不會(huì)破壞API

  • ·實(shí)行API管理,以處理API同步部署

  • · 滾動(dòng)更新,確保更新模型不會(huì)中斷用戶服務(wù)

Cortex旨在自動(dòng)實(shí)現(xiàn)所有上述基礎(chǔ)架構(gòu),以及其他一些問題,例如日志記錄和成本優(yōu)化。

出于以下考慮,Go是構(gòu)建滿足上述需求軟件的理想之選:

1.  Go生態(tài)系統(tǒng)非常適合基礎(chǔ)設(shè)施項(xiàng)目

來源:zcool

開源的好處之一就是您可以從自己欣賞的項(xiàng)目中不斷學(xué)習(xí)。例如,Cortex存在于Kubernetes(本身用Go編寫)生態(tài)系統(tǒng)中。很幸運(yùn),我們能夠在該生態(tài)系統(tǒng)中參考許多出色的開源項(xiàng)目,其中包括:

  • · kubectl: Kubernetes CLI

  • · minikube: 一種在本地運(yùn)行Kubernetes的工具

  • · helm:  Kubernetes軟件包管理工具

  • · kops: 管理生產(chǎn)Kubernetes的工具

  • · eksctl: 亞馬遜EKS的官方CLI

以上所有工具不僅僅是Kubernetes項(xiàng)目,并且都是用Go語(yǔ)言編寫。無論是查看CockroachDB還是Hashicorp的基礎(chǔ)設(shè)施項(xiàng)目(包括Vault,  Nomad, Terraform, Consul和 Packer),您將發(fā)現(xiàn)它們均是使用Go語(yǔ)言編寫。

Go在基礎(chǔ)架構(gòu)領(lǐng)域的流行還有另一個(gè)影響,那就是大多數(shù)對(duì)基礎(chǔ)架構(gòu)感興趣的工程師都熟悉Go語(yǔ)言。所以,很容易通過GO吸引這些工程師。實(shí)際上,Cortex  Labs最優(yōu)秀的工程師之一就是通過在AngelList上搜索Go職位找到我們的。他找到了我們,我們感到非常幸運(yùn)。

2.并發(fā)對(duì)于機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)至關(guān)重要

用戶可以將許多不同的模型部署為不同的API,并把所有模型都在同一個(gè)Cortex集群中以便管理。而Cortex  Operator也需要通過一些API來管理這些不同的部署。舉例:

  • · Cortex調(diào)用Kubernetes API在集群上部署模型。

  • ·  Cortex調(diào)用各種AWS API(包括EC2 Auto Scaling,S3,CloudWatch等)來管理AWS上的部署。

用戶不會(huì)直接與這些API進(jìn)行交互。相反,Cortex以編程方式調(diào)用這些API來提供群集,啟動(dòng)部署和監(jiān)視API。

以一種高效、可靠的方式交叉調(diào)用API是一項(xiàng)重大挑戰(zhàn)。采用并發(fā)的方式使用API是最高效的方法,但也引發(fā)了問題,因?yàn)楝F(xiàn)在我們不得不擔(dān)心競(jìng)態(tài)條件之類的事情。

Go提供了一個(gè)解決該問題的簡(jiǎn)便方案:Goroutines。

Goroutines是Go以并發(fā)方式執(zhí)行代碼的普通函數(shù)。我們可以另寫一篇長(zhǎng)文深入探討Goroutines背后的工作方式,但是概括而言,Goroutines是Go運(yùn)行時(shí)自動(dòng)管理的輕量級(jí)線程。多個(gè)Goroutine可以放置在一個(gè)OS線程上,如果Goroutine阻塞了OS線程,則Go運(yùn)行時(shí)會(huì)自動(dòng)將其余Goroutine移到新的OS線程上。

Goroutines還提供了一個(gè)稱為“channel”的功能,此功能允許用戶在Goroutines之間傳遞消息,幫助用戶調(diào)度請(qǐng)求并預(yù)防競(jìng)態(tài)條件。

當(dāng)然,用戶也可使用asyncio等最新工具在Python中實(shí)現(xiàn)這些功能,但Go在設(shè)計(jì)時(shí)就考慮到了這些情況,使用GO可以減輕我們的工作和生活負(fù)擔(dān)。

3.使用Go語(yǔ)言編程是一種享受

我們使用Go構(gòu)建Cortex的最后一個(gè)理由就是:Go語(yǔ)言真的非常好。

相對(duì)于Python,Go的入門有點(diǎn)痛苦。但是,Go的包容性能為大型項(xiàng)目帶來舒適感。我們?nèi)匀辉趪?yán)格測(cè)試軟件,但靜態(tài)輸入和編譯(Go初學(xué)者的兩大難題)充當(dāng)了我們的護(hù)欄欄,有助于我們編寫(相對(duì)而言)沒有錯(cuò)誤的代碼。

您可能會(huì)說其他語(yǔ)言也會(huì)提供特定的優(yōu)勢(shì),但總的來說,Go最大限度地滿足了我們的技術(shù)和美學(xué)需求。

4.使用Go構(gòu)建跨平臺(tái)的CLI更容易

Cortex  CLI是一個(gè)跨平臺(tái)工具,允許用戶直接從命令行部署模型并管理API。以下動(dòng)圖顯示了運(yùn)行中的CLI:

為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python

最初,我們使用Python編寫CLI,但事實(shí)證明,跨平臺(tái)分發(fā)CLI太困難了。而Go可以編譯二進(jìn)制文件(無需依賴管理),為我們提供了跨平臺(tái)分發(fā)CLI的便捷易行方案,而無需進(jìn)行額外的工程工作。

Go編譯的二進(jìn)制代碼與解釋型語(yǔ)言相比,具有顯而易見的性能優(yōu)勢(shì)。根據(jù)計(jì)算機(jī)基準(zhǔn)測(cè)試結(jié)果,GO的速度遠(yuǎn)勝Python。

許多其他的基礎(chǔ)設(shè)施CLI工具也是用GO編寫,這可能并非偶然。

Python適用于機(jī)器學(xué)習(xí),而Go適用于基礎(chǔ)架構(gòu)  我們也很喜歡Python,它在Cortex中占有一席之地,特別是在處理推理方面。

Cortex服務(wù)于TensorFlow,PyTorch,scikit-learn和其他Python模型,這意味著與模型的接口,推理之前和之后的處理均在Python中完成。但是,即使Python代碼經(jīng)過打包部署到了Docker容器中,這些容器是由用Go編寫的代碼精心編排的。

感謝各位的閱讀,以上就是“為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)為什么用Go編寫機(jī)器學(xué)習(xí)的基礎(chǔ)架構(gòu)而不用Python這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI