当前位置: 首页 > 科技观察

特斯拉嫌弃Python追求C++

时间:2023-03-22 13:16:45 科技观察

近年来,唯一能与AI匹敌的现象是Python编程语言,发展迅猛。Python已成为许多组织设立数据科学和机器学习部门的首选语言。转向Python的步伐如此之快,以至于许多编程语言都被认为已经过时了。然而,在一系列推文中,特斯拉CEO埃隆·马斯克(ElonMusk)宣称,特斯拉非常重视汇集顶尖人才来开发AI相关项目。他还宣布计划在家中举办招待会,邀请AI爱好者参加黑客马拉松。他补充说,虽然计算机视觉模型中使用的神经网络是用Python编写的,但特斯拉团队需要具有强大编程技能的人,尤其是C和C++。用C/C++编程来构建自动驾驶汽车听起来很奇怪,但马斯克的推文确实对Python的炒作提出了一些质疑。指出基础设施复杂性陷阱的开发人员不同意。马斯克说:我们(显然)也在寻找世界级的芯片设计师加入我们在帕洛阿尔托和奥斯汀的团队。我们的神经网络最初是在Python中进行快速迭代,然后转换为C++/C/裸机驱动程序代码以提高速度(这很重要!)。此外,车辆控制和自动驾驶汽车都需要大量的C++/C工程师。学历不重要,但一定要通过真正的编程测试。但是,不应将推文视为理所当然。信息量经常被压缩,PyTorch联合开发者SoumithChintala指出了Musk真正的意思。他解释说,转换为C++并不意味着用C++手动重写,而是自动转换为低级运行时代码。他还补充说,特斯拉团队有自己的ASIC和传感器等,可能有自己的工具、驱动、多阶段中间表示(stagedIR)和编译器等,C++语言也方便了硬件功能的直接映射以及基于这些映射的零开销抽象。工具恋物癖的诅咒图片来源:NVIDIA大多数流行的机器学习框架都依赖于C++,例如TensorFlow、Pytorch,甚至CUDA。如上所示,CUDA不仅仅是一种编程语言,它是一个工具包,它为使用C/C++的开发人员提供扩展,以便在应用程序中表达海量并行处理并引导编译器处理到GPU的映射。那部分。同样,Python是一个界面,让用户无需学习C++的基本细节即可交互和利用机器学习功能。Python主要用作接口。做出这样的安排是为了让更多的非编程开发者能够尽快上手并构建机器学习应用程序。Python易于学习和使用,这就是它如此受欢迎的原因。但是,如果从头开始学习,C++等传统语言支持的API和接口很容易使用。只需使用优化的GPU库(如BLAS)和计算机视觉库(如OpenCV)。任何需要速度的应用程序都可以用C++和Python绑定编写。与C++不同,Python用户可以用不到50行代码从头开始编写一个卷积神经网络。C++需要了解一些比较复杂的知识,这对新手来说是一个很大的劣势。时间在这里至关重要。例如,正在集成机器学习工具的物理学家更喜欢像Python这样的轻量级和简单的编程语言。但是,C++在库和框架的幕后处理所有繁重的工作(读取矩阵乘法)。据PyTorch团队介绍,前端的C++允许用户在Python不可用或Python工具不适合任务的环境中进行研究。优势总结如下:如果用户想在高帧率、低延迟要求的纯C++游戏引擎中进行强化学习研究,对于这种环境,使用纯C++库比Python库更合适。由于全局解释器锁(GIL),Python不能同时运行多个系统线程。多处理是一种替代方法,但它的扩展性不佳并且有很多缺点。C++没有这样的约束或限制,并且它的类易于使用和创建。前端的C++将允许用户继续使用C++,而不必在训练期间在Python和C++之间来回切换。然而,由于Python解释器速度较慢,Python对于强化学习项目等研究工作可能仍然笨拙。因此,C++库将是正确的选择。就TensorFlow而言,它通常结合了高度优化的C++和CUDA。反过来,他们使用Eigen(一种高性能C++和CUDA数值库)和Nvidia的cuDNN优化深度神经网络库来处理卷积等问题。选择任何语言或工具都归结为易于实施和延迟之间的权衡。对机器学习领域的主题专家来说,C++的知识太多了。他们可以使用Python,而C++开发人员编写代码来与机器交互。这种安排适用于许多商业组织。这就是为什么特斯拉的AI团队需要一个由Python开发人员和C++开发人员组成的团队来构建下一代自主产品是有道理的。