Python@机器学习基础架构方面,Go是比python更好的选择?
全文共1881字 , 预计学习时长7分钟
本文插图
图源:unsplash
毋庸置疑 , Python是如今最受欢迎的机器学习语言 。 虽然机器学习框架使用CUDA C / C ++之类的语言进行实际运算 , 但它们都提供了Python接口 。 这也是为什么大多数机器学习从业人员都工作中都使用Python 。
而机器学习基础设施——Cortex的代码库88.3%都是Go语言编写的 。
本文插图
图源:Cortex GitHub
大规模部署模型不同于编写调用PyTorch和TensorFlow函数的Python脚本 。 为了实际大规模运行生产机器学习API , 需要基础架构来执行以下操作:
· API管理 , 以处理多个部署进程 。
· 自动缩放 , 这样流量波动就不会破坏API(并且AWS保持可管理性) 。
· 滚动更新 , 以便更新模型的同时仍然服务于请求 。
我们构建了Cortex来提供此功能 , 并决定在Go语言中进行编写 , 有以下几个原因:
本文插图
1.基础设施社区已经接受了Go
我们是软件工程师而不是数据科学家 , 之所以加入机器学习 , 是因为想要构建Gmail的智能编写之类的功能 , 而不是因为对反向传播着迷 。
我们希望有一个简单的工具 , 能够采用经过训练的模型并自动实现所需的所有基础设施(例如可复制的部署 , 可扩展的请求处理 , 自动监视等) , 从而将其部署为API 。
尽管还不存在多合一的模型到微服务平台 , 但我们之前已经在普通软件中实现了所有这些功能 。 我们知道哪种工具最适合这份工作 , 以及用什么语言编写 。
构建Kubernetes , Docker和Terraform等工具的团队使用Go , 是因为它运行很快 , 可以很好地处理并发程序 。 它编译为单个二进制文件 。 选择Go风险相对较低 , 其他团队也在使用Go来解决类似的问题 。
此外 , 用Go编写可以使基础架构工程师(他们可能已经熟悉该语言)工作起来更容易 。
本文插图
2.在Go中构建跨平台的CLI更容易
我们希望CLI在Linux和Mac上均可使用 。 最初 , 我们尝试用Python进行编写 , 但是用户总是很难让它在不同的环境中工作 。 当在Go中重建CLI时 , 可以将其编译为单个二进制文件 , 可以在各个平台上发布 , 而无需做太多工程工作 。
编译后的Go二进制代码与解释型语言相比 , 其性能优势也很明显 。 根据计算机语言基准测试游戏 , Go运行得比Python快得多 。
因此用Go编写许多其他基础结构CLI(例如eksctl , kops和Helm客户端)也并非偶然 。
本文插图
3.Go解决了与并发和调度相关的问题
管理部署需要许多服务同时并准确地运行 。 幸运的是 , Goroutines , channels和Go的内置计时器和周期性计时器为并发和调度提供了一种巧妙的解决方案 。
在较高的层次上 , Goroutine是一个正常函数 , Go通过在虚拟的独立线程上执行来同时运行 。 多个Goroutine可以安装在单个OS线程上 。 channels允许Goroutine共享数据 , 而内置计时器和周期性计时器允许部署Goroutine 。
本文插图
图源:unsplash
我们在需要时使用Goroutines来实现并发(例如当Cortex需要将多个文件上传到S3 , 而且并行运行将节省时间) , 或使可能长时间运行的功能(例如CloudWatch的流日志)不会阻塞主线程 。
- 『学霸』学渣变学霸:教育界证明最有效的4个学习方法,建议家长收藏
- 【物理】初二发力学习,初三语文成绩才能逆袭,别让你的小聪明耽误了语文
- 「小学语文」100篇小学语文阅读理解及答案,孩子学习用得上!
- 军人驿站国际观察俄土科技差距显露无疑,美称此战可载入史册,叙利亚爆发机器人大战
- 埃尔法哥哥还可以做扫地机器人啊,自动驾驶不做了
- 「maven」国乒许昕母亲节的彩虹P,老小都甜蜜,男同胞们排队来学习
- 界面新闻MIT:美国制造业每多1个机器人,平均取代3.3名工人
- 读懂新金融营销、城市、机器人、养牛养鱼……新型科技公司的十八般武艺
- 极客公园机器人大爆发的时代来了?风口上的优必选说要「保持冷静」
- 15个最流行的GitHub机器学习项目