假如你对成为机器学习工程师感兴趣,那么熟练掌握Python是必不可少的;然而,如果你对机器学习的基础架构感兴趣,那么你应该认真考虑使用Go语言。
Python是当前机器学习项目中最常用的编程语言。尽管R、C++和Julia等语言也有各自的拥护者和应用场景,但Python仍然是最广泛使用的语言,几乎所有主流的机器学习框架都支持Python。
不过,在我们的开源平台Cortex中,大部分代码都是用Go编写的。Cortex是一个用于将机器学习模型部署为API的平台。Python虽在算法实现方面表现出色,但在大规模部署和管理API时,基础架构需要具备以下功能:
为了实现这些功能,我们选择Go作为开发语言。以下是几个主要原因:
用户可以将多种模型部署为不同的API,并在同一个Cortex集群中进行管理。Cortex Operator需要通过各种API来管理这些部署,如Kubernetes API和AWS API等。这些API调用需要高效且可靠地进行,而并发处理是实现这一目标的关键。Go的Goroutines提供了内置的并发解决方案,简化了开发过程。
Cortex CLI是一个跨平台的工具,用户可以通过命令行直接部署模型和管理API。最初我们使用Python编写CLI,但在多个平台上分发变得复杂。Go语言可以编译成独立的二进制文件,无需管理依赖关系,因此更易于分发。此外,Go编译后的程序性能更佳,比Python更快。
Go在基础设施领域的流行并非偶然。许多流行的基础设施工具,如Kubernetes、CockroachDB和Hashicorp的项目,都是用Go编写的。Go语言的生态系统非常适合这类项目,因为很多开源工具都采用了Go,这使得开发者可以轻松地借鉴这些项目的经验。
Go语言虽然上手难度略高于Python,但它的设计简洁且强大。Go的静态类型检查和编译器特性有助于编写高质量的代码,减少了运行时错误。总的来说,Go在技术需求和审美需求方面都能很好地满足我们。
虽然Python在机器学习领域占据主导地位,但在基础架构层面,Go提供了更多的便利。Cortex在处理推理任务时大量使用Python,但整个系统的编排和管理则是用Go实现的。因此,如果你的目标是成为一名机器学习工程师,那么Python是必须掌握的技能;但如果你想从事机器学习的基础架构工作,Go是一个更好的选择。