为什么我用Go写机器学习部署平台,而偏偏不用Python?
作者头像
  • 长江商学院
  • 2020-02-04 18:03:05 0

【机器学习领域的编程语言选择】

尽管在机器学习领域,Python曾一度占据主导地位,但它并非万能的工具。在某些情况下,其他语言如Go可能更为适合。本文探讨了作者在其工作环境中选择Go而非Python的原因,引发了社区的广泛关注和讨论。

编程语言的世界充满了竞争,而Python目前在编程领域占据着霸主地位,尤其是在机器学习领域,几乎所有主流的机器学习框架都在使用Python。

然而,即使Python得到了广泛的认可,它也并非无所不能。在实际应用中,它可能会遇到一些局限性。Python擅长于实现机器学习算法,但要真正实现大规模生产环境中的机器学习API,还需要具备以下基础设施功能:

  • 自动扩展,以应对流量变化
  • API管理,以支持API的部署和更新
  • 滚动更新,以确保在更新模型时仍能为用户提供服务

例如,开源平台Cortex致力于自动化这些基础设施功能,包括日志管理和成本优化等。Cortex的作者Caleb Kaiser认为,在实现这些功能方面,Go比Python更具优势。

Go是由Google开发的语言,由Rob Pike、Ken Thompson和Robert Griesemer三位大师级人物设计。相较于Python,Go在以下方面具有显著优势:

并发性能

在机器学习基础设施中,并发性能至关重要。用户可以将多个模型部署为独立的API,并在同一Cortex集群中进行管理。为了使Cortex Operator能够管理这些不同的部署,需要调用多种API,包括Kubernetes API和AWS API(如EC2 Auto Scaling、S3、CloudWatch等)。

用户通常不会直接与这些API交互,而是通过编程方式调用这些API来供应集群、启动部署和监控API。高效可靠地处理这些复杂的API调用是一项挑战。Go提供了名为“Goroutines”的解决方案,这是一种轻量级的并发执行单元,可以自动切换到新的操作系统线程,从而避免阻塞。此外,Goroutines还支持“通道”机制,允许它们之间传递消息,从而实现请求调度和避免竞争状态。

虽然在Python中也可以使用如asyncio等工具实现类似的功能,但Go的设计充分考虑了这种应用场景,使其更加简便易用。

构建跨平台命令行工具

Cortex CLI是一种跨平台工具,允许用户直接从命令行部署模型和管理API。相比之下,用Python编写的命令行工具在不同平台上分发较为困难。由于Go可以直接编译成二进制文件,无需依赖管理,因此提供了更简单的分发方案。此外,Go的高性能也使得它成为构建跨平台工具的理想选择。

根据计算机基准测试,Go的运行速度远超Python。许多基础设施相关的命令行工具都是用Go编写的,这并非偶然。这也进一步说明了Go在基础设施领域的优势。

Go生态系统

开源软件的一大好处在于可以从优秀的项目中学习。Cortex位于Kubernetes生态系统中,后者本身就是用Go编写的。在该生态系统中,许多出色的开源项目也是用Go编写的,如kubectl、minikube、helm、kops和eksctl等。这些工具不仅限于Kubernetes项目,还包括CockroachDB和HashiCorp的基础设施项目,如Vault、Nomad、Terraform、Consul和Packer等。Go在基础设施领域的流行,使得它成为了工程师们熟悉且感兴趣的语言。

Go编程的乐趣

虽然Go的学习曲线可能比Python稍陡峭,但一旦掌握了基础知识,它就会变得非常有趣。Go宽容的特性使得它非常适合大型项目。相比Python,Go还有以下几个显著优点:

  • 强大的编译器,可以检测并修正低级错误
  • 更优的并行性
  • 简单的部署过程,所有依赖都包含在一个二进制文件中
  • 代码风格统一,格式化工具确保所有代码风格一致
  • 工具丰富,一个编辑器加插件即可满足大部分需求

Python与Go的分工

Cortex支持TensorFlow、PyTorch、scikit-learn等Python模型,这意味着与这些模型的接口及推理前后的处理仍然需要Python。不过,这些模型被封装在Docker容器中,而这些容器是由Go语言编写的代码精心编排的。如果你希望成为一名机器学习工程师,掌握Python是必要的。然而,如果你对机器学习基础设施感兴趣,那么Go是一个值得考虑的选择。

    本文来源:图灵汇
责任编辑: : 长江商学院
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
部署偏偏不用机器为什么Python学习平台
    下一篇