自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么我用Go寫機(jī)器學(xué)習(xí)部署平臺(tái),而偏偏不用Python?

新聞 機(jī)器學(xué)習(xí)
雖然在機(jī)器學(xué)習(xí)中,Python已經(jīng)無孔不入。但Python并不是全能之神手中的魔杖可以為所欲為。

 ä¸ºä»€ä¹ˆæˆ‘用Go写机器学习部署平台,而偏偏不用Python?

雖然在機(jī)器學(xué)習(xí)中,Python已經(jīng)無孔不入。但Python并不是全能之神手中的魔杖可以為所欲為。很多情況下其實(shí)用Python的效果并不如其他語言,比如Go更好,甚至可能更糟。本文介紹了為什么在作者的工作環(huán)境下選擇Go而非Python的理由,引發(fā)社區(qū)關(guān)注和熱議。

編程語言就是一個(gè)江湖,永遠(yuǎn)有人覬覦霸主的位子。

 

Python如今卻穩(wěn)坐編程語言界的霸主,尤其是在機(jī)器學(xué)習(xí)領(lǐng)域,所有主流機(jī)器學(xué)習(xí)框架都在用Python。

 

然而即使是被絕大多數(shù)人認(rèn)可的Python,也并非真的無所不能,也有讓其無能為力、無中生有的情況。

 

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

 

自動(dòng)縮放,以便流量波動(dòng)不會(huì)破壞您的APIAPI管理,以處理的API部署滾動(dòng)更新,以便您可以在更新模型的同時(shí)仍為用戶提供服務(wù)

 

對(duì)于像Cortex這樣的開源機(jī)器學(xué)習(xí)部署平臺(tái),旨在使所有這些基礎(chǔ)架構(gòu)自動(dòng)化,以及日志記錄和成本優(yōu)化等其他方面的關(guān)注,作者Caleb Kaiser認(rèn)為相比Python而言,Go更合。

 

相比于出身寒門、一個(gè)應(yīng)屆生的圣誕節(jié)無聊之作的Python,Go語言出自Google,作者是三位宗師級(jí)人物:Rob Pike、Ken Thompson 和 Robert Griesemer。在以下方面超越了Python:

 

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

用戶可以將許多不同的模型部署為不同的API,所有模型都在同一個(gè)Cortex集群中進(jìn)行管理。

 

為了讓Cortex Operator能夠管理這些不同的部署,需要糾纏一些不同的API。

 

Cortex調(diào)用Kubernetes API在集群上部署模型;同時(shí)也需要考慮各種AWS API(EC2 Auto Scaling,S3,CloudWatch等)

 

用戶不會(huì)直接與任何這些API進(jìn)行交互,取而代之的是,Cortex以編程方式調(diào)用這些API來供應(yīng)集群,啟動(dòng)部署和監(jiān)視API。

 

以一種有效,可靠的方式進(jìn)行所有這些重疊的API調(diào)用是一個(gè)挑戰(zhàn)。

 

同時(shí)處理它們是最有效的處理方式,但同時(shí)也引入了復(fù)雜性,因?yàn)楝F(xiàn)在我們不得不擔(dān)心諸如競(jìng)賽條件之類的事情.Go有一個(gè)優(yōu)雅的,開箱即用的解決方案來解決這個(gè)問題:Goroutines。

 

Goroutines是正常的Go并發(fā)執(zhí)行的功能。許多Goroutine可以放在一個(gè)OS線程上,如果Goroutine阻塞了OS線程,則Go運(yùn)行時(shí)會(huì)自動(dòng)將其余Goroutines移至新的OS線程。

 

Goroutines還提供了一個(gè)稱為“通道”的功能,允許Goroutines執(zhí)行在彼此之間傳遞消息,使我們能夠調(diào)度請(qǐng)求并避免出現(xiàn)競(jìng)爭(zhēng)情況。

 

使用asyncio等最新工具在Python中實(shí)現(xiàn)所有這些功能可能是可行的,但是Go的設(shè)計(jì)充分考慮了這種用例,這一事實(shí)使我們的生活變得更加輕松。

 

在Go中構(gòu)建跨平臺(tái)CLI更容易

Cortex CLI是一種跨平臺(tái)工具,允許用戶直接從命令行部署模型和管理API。

 

下面的GIF顯示了正在使用的CLI:

事實(shí)證明,Python編寫的CLI嘗試在各種平臺(tái)之間分發(fā)太困難了。

 

因?yàn)镚o可以編譯成一個(gè)二進(jìn)制文件(不需要依賴管理),所以它為我們提供了一個(gè)在平臺(tái)之間分發(fā)CLI的簡(jiǎn)單解決方案,而無需進(jìn)行過多的工程工作。經(jīng)過編譯的Go二進(jìn)制文件和解釋型語言的性能優(yōu)勢(shì)也很明顯。

 

根據(jù)計(jì)算機(jī)基準(zhǔn)測(cè)試游戲,Go的運(yùn)行速度比Python快得多。許多其他基礎(chǔ)結(jié)構(gòu)CLI工具都是用Go編寫的,這并非巧合,這使我們進(jìn)入了下一步。

 

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

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

 

  • kubectl:Kubernetes的CLI
  • minikube:一種在本地運(yùn)行Kubernetes的工具
  • helm:Kubernetes程序包經(jīng)理
  • kops:用于管理生產(chǎn)Kubernetes的工具
  • eksctl:Amazon EKS的官方CLI

 

以上所有內(nèi)容都是用Go語言編寫的,而不僅僅是Kubernetes項(xiàng)目。

 

無論你是在看CockroachDB還是Hashicorp的基礎(chǔ)設(shè)施項(xiàng)目,包括Vault,Nomad,Terraform,Consul和Packer,它們都是用Go編寫的。

 

Go在基礎(chǔ)設(shè)施領(lǐng)域的流行還有另一個(gè)影響,這就是大多數(shù)工程師都感興趣!在基礎(chǔ)架構(gòu)方面工作的人對(duì)Go很熟悉,這使得吸引工程師更加容易。

 

用Go是一種樂趣

相對(duì)于Python,Go入門起來有點(diǎn)痛苦,但這是指暫時(shí)的。一旦你跨越了門檻,進(jìn)入Go的世界里,你會(huì)發(fā)現(xiàn)簡(jiǎn)直是“一馬平川”。

 

Go寬容的性格使它對(duì)于大型項(xiàng)目而言如此令人愉悅。

 

除此以外,相比Python,Go的優(yōu)勢(shì)還體現(xiàn)在:

 

  • 擁有非常棒的編譯器,編譯器可以檢測(cè)出你犯的所有低級(jí)錯(cuò)誤
  • 更好的并行性。Go 語言就是為并行而生的
  • 部署簡(jiǎn)單。代碼所需要的所有依賴都在一個(gè)二進(jìn)制文件里
  • 風(fēng)格一致。格式化工具會(huì)讓所有代碼風(fēng)格都保持一致
  • 更便捷的工具。一個(gè)編輯器+插件滿足幾乎所有需求,都不需要IDE

 

適用于機(jī)器學(xué)習(xí)的Python,適用于基礎(chǔ)架構(gòu)的Go

Cortex服務(wù)于TensorFlow,PyTorch,scikit-learn和其他Python模型,這意味著與這些模型的接口以及推理前后的處理,用Python完成。

 

但是,即使將Python代碼打包到了Docker容器中,這些容器都是用Go語言編寫的代碼精心編排的。如果你有興趣成為一名機(jī)器學(xué)習(xí)工程師,那么了解Python是必須的。

 

但是,如果你對(duì)使用機(jī)器學(xué)習(xí)基礎(chǔ)結(jié)構(gòu)感興趣,則應(yīng)認(rèn)真考慮使用Go。

 

 

責(zé)任編輯:張燕妮 來源: 新智元
相關(guān)推薦

2020-02-14 13:13:04

Go機(jī)器學(xué)習(xí)Python

2020-02-14 15:22:58

編寫基礎(chǔ)架構(gòu)Python

2023-03-30 14:10:30

2012-06-18 14:51:09

Python

2023-07-10 10:23:30

2012-11-13 10:27:45

PythonGo編程語言

2019-04-19 11:56:48

框架AI開發(fā)

2019-05-15 08:29:56

Web面板運(yùn)維

2009-04-20 09:45:44

HR招聘求職

2012-05-18 10:21:30

程序員CC++

2020-06-16 09:17:33

ESRedis監(jiān)控

2020-05-11 09:00:57

Redis監(jiān)控Zabbix

2021-04-06 15:38:01

手機(jī)國(guó)產(chǎn)蘋果

2012-10-10 16:52:21

CentOSDebianUbuntu

2019-03-11 08:36:11

Python代碼Flask

2016-01-12 16:58:31

C游戲

2021-12-30 19:36:48

GoDubboJava

2022-01-07 14:05:33

DubboGoJava

2019-11-18 09:56:48

谷歌Go語言開發(fā)者

2020-09-25 08:10:55

Rust系統(tǒng)編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)