赞
踩
明天(12月16日),开源语言XLang就要举办第一次Meetup。XLang的壮志雄心是成为物联网和人工智能的编程语言。通过这篇小文快速扫描一下AI时代的一些编程语言,虽然不免浅尝辄止,也算是帮XLang Meetup暖暖场。祝愿Meetup举办成功,XLang的勇士们顺利启航。
12月16日XLang Meetup的中文海报
Python:以人为本的编程语言
Python可能是AI最重要的编程语言。在2017年Python大会的一个演讲中,撰写过多本Python书籍的Jake Vanderplas为什么Python在科学领域是如此有效,提到了四点:
截图:Slides from 《The unexpected effectiveness of Python in Science》by Jake VanderPlas at PyCon 2017
1. Python是"胶水"语言,具备与其他语言的"互操作性"。Python语言更高级和抽象的语法封装了底层的C/Fortran库,而这些库(大多数情况下)负责完成主要的计算。
2. Python有大量的工具库。Python的标准库提供了广泛的模块和工具,Python社区活跃,提供大量的第三方库,极大地扩展了Python的应用范围和能力。从网站开发、数据科学、人工智能到科学计算和系统运维,使其能够处理各种各样的任务。Python凭借其对大数据处理和机器学习领域的深入应用,成为了这一时代不可或缺的工具。HuggingFace创建了 Transformers机器学习开源框架,提供API和工具,帮助开发者和组织减少集成大语言模型的成本,降低技术门槛,不但公司获得了关键性的成功,帮助AI民主化,打破OpenAI、Google等头部企业的垄断。而HuggingFace的技术,就是基于Python构建的。
3. Python的人性化
Python的设计是非常人性化的。The Zen of Python ("Python之禅”)概括了Python编程语言的哲学:“美丽胜于丑陋。显式胜于隐式。简单胜于复杂 ...”这些原则反映了Python对编写,理解和阅读代码的容易性的强调。对于生手或非专业(科学)编程人员而言,无疑更容易上手、能够更快出活。
截图:CPython的设计者Tim Peters总结的Python之禅。19条原则的每一条都反映出以人的体验和价值为中心。Python是以人为中心设计的语言。
4. Python的开放文化和科学精神的契合
Python从诞生之初就是一个开源项目。其发展在很大程度上依赖于其活跃、多样化的社区。Python之禅强调简单、明确和可读性也有助于了社区成员的互动。由于其易学性和清晰的语法,成为许多初学者学习编程的首选语言。Python社区对教育资源的投入,如在线教程、开源书籍和社区论坛,进一步推广了这种开放文化。Python在多个领域都有广泛的应用促进了来自不同背景和专业的人才加入Python社区,进一步丰富了其多元化和开放性。
C/C++:机器的资源和性能
有了语言的“简”和“易”还不够,运算不能“慢”和“贵”。一些以机器为中心的编程语言在这些方面表现得更加优秀。比如C/C++, Java,Rust等。
截图:C++的创造者BJarne Stroustrap编写的C++编程和实践一书封面
以C++为例,其设计者BJarne Stroustrap指出C++优先考虑性能、资源的使用和对抽象的控制。通过C/C++,程序员可以编写精细的程序,并对计算资源(特别是内存和CPU)进行精确的管理,从而完成复杂而高效和大规模的计算。
最为常用的Python实现是CPython,就是通过C语言实现的解释器和Python虚拟机,解析Python代码和执行机器码,完成程序的运行。
NVIDA CUDA:并行计算
NVIDIA CUDA(Compute Unified Device Architecture)是一种由NVIDIA开发的并行计算平台和编程模型。CUDA允许开发者使用NVIDIA的GPU(图形处理单元)进行通用计算。CUDA允许程序利用GPU的多个核心同时执行计算任务,极大提升了处理大型数据集或执行复杂算法的速度。
CUDA提供编程工具和库,允许开发者使用类似于C/C++的语言来编写程序,对NVIDIA图形卡上的计算资源(特别是GPU和图形卡上内存)进行控制,为需要处理大量数据和复杂计算任务的领域提供了强大的工具,使之能够充分利用GPU的强大计算能力。
要执行任何 CUDA 程序,需要三个主要步骤:
将输入数据从主机内存复制到GPU设备内存,也称为主机到设备传输。
加载 GPU 程序并执行,在片上缓存数据以提高性能。
将结果从设备内存复制到主机内存,也称为GPU设备到主机传输。
截图:用C/C++进行CUDA编程,在GPU设备上并行执行
AI编程语言的底层逻辑
我们可以简单比较以下Python,C/C++和CUDA之间的异同:
PYTHON | C & C++ | NVIDIA CUDA | |
设计理念 | 强调简单性、可读性和明确性。'Python之禅' | 侧重于发挥强大性能和灵活性 | 为NVIDIA GPU上的并行计算而设计。 |
语法和易用性 | 清晰、易于理解的语法。非常适合初学者,并强制使用缩进来提高可读性。 | 相对复杂的语法,提供更大的控制能力,但对初学者来说可能具有挑战性 | 扩展了C++的并行编程能力。需要理解C++和并行计算概念。 |
内存资源管理 | 自动内存管理和垃圾收集。减轻了程序员的负担,但提供较少的控制。 | 对内存管理的完全控制,导致效率提高但增加了内存相关错误的风险。 | 管理CPU和GPU内存,需要显式的内存管理和主机与设备之间的数据传输。 |
性能 | 通常由于是解释型语言而较慢。适用于快速开发和原型制作。 | 作为一种编译语言,执行速度更快。非常适合对性能要求严格的应用程序。 | 对于可并行化的任务高效率,对于适合的应用程序如大规模模拟、深度学习等,速度显著更快。 |
数据类型Typing | 动态类型,允许更多的灵活性,但可能导致运行时错误。 | 静态类型,编译时进行严格的类型检查,能够早期捕捉类型错误,但需要更明确的类型声明。 | 继承了C++的静态类型特性,由于并行执行上下文增加了复杂性。 |
可以看到,以Python为代表的动态类型解释型脚本化语言以人为本,解决的是开发效率问题;以C和C++为代表的静态类型编译语言围绕计算机资源(CPU和内存)的高效使用,解决的是复杂计算任务的效率的问题;而已NVIDIA Cuda为代表的编程模型,则围绕GPU设别和设备内存资源的使用,解决的是大规模并行计算的效率问题。
AI时代的新编程语言,必须要解决AI应用开发+复杂任务执行+大规模并行计算的综合效率。
Mojo:一个案例
截图:mojo语言官网主页 https://www.modular.com/max/mojo
Mojo是由Modular公司开发,旨在为人工智能等领域的软件开发提供统一的编程框架。Mojo语言为Python语言的超集,故也被称为Python++ 。同时,它还具有C++的速度与Rust的安全性。
Mojo最近发布了一系列博文,解释了Mojo语言效率如何比Python提高了35000~68000倍。
Mojo博文截图:https://shriramsivanandhan.medium.com/mojo-programming-language-68000x-faster-than-python-programming-in-mojo-part-ii-d162740a2f67
从Mojo的多篇博文中大致可以看出,Mojo尽可能地兼容Python的语法,使之也能够与Python生态系统兼容。但Mojo是编译语言。在Mojo编译中进行了大量的性能优化,包括:
简化数学运算以减少计算量:比如通过优化,避免使用需要6个flop的昂贵的平方根运算。
向量化代码:实现SIMD,让一个指令能够操作更多的数据。
增加每个循环迭代的工作量: 尽量增加SIMD的宽度,让一个指令能够操作尽可能多的数据。
使代码并行执行:使程序更加适合GPU运算。
可以看到,通过以编译优化,Mojo在将前面提到的三方面的优点结合起来,使AI程序又好写,又高效,而且尽可能发挥并行算力的能力。
XLang:期待创新
XLang的主要创造者Shawn Xiong告诉我,除了将多种语言的优势结合起来优化性能以外,XLang还有一些较大的创新。比如,一般语言在层层编译的过程中,不断将一套指令用另一套指令来表达,这往往会导致不必要的复杂性和性能损失,过程中也有信息损失。而XLang的编译则不在指令层面完成,而是在"表达式"的层面完成,表达式的传递是以一个简洁而且信息无损的过程。此外,XLang在与其他编程语言的融合和编译原理方面也都有独特之处,将使得XLang有望成为“超级胶水”语言,方便地支持与其他编程语言集成,也能支持AMD、Intel以及其他厂家的异构GPU,帮助打破NVIDIA在这方面的一家独大的局面。
非常期待XLang的创新实现!
XLang官网截图:https://xlangfoundation.org/,请朋友们关注和支持XLang
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。