当前位置: 首页 > news >正文

Mojo:比 Python 快 35000 倍的 AI 编程语言

Mojo:比 Python 快 35000 倍的 AI 编程语言

Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。

Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合,速度比 Python 快 35000 倍!让你鱼与熊掌兼得。

如果您对 AI 感兴趣并且已经了解 Python,那么 Mojo 绝对值得一试。 这篇文章将带给你有关 Mojo 的所有信息。

在这里插入图片描述

文章目录

    • 既生Python,何生Mojo?
    • Mojo的特性
      • 1. Mojo 被设计为 Python 的超集
      • 2. 强类型检查
      • 3. 内存所有权和借用检查器
      • 4. 自动调节
      • 5. Mojo 利用 MLIR
    • 如何使用 Mojo

既生Python,何生Mojo?

Python 的简洁和强大使其成为数据科学、机器学习和人工智能等领域的首选语言。 它有大量的包,几乎涵盖所有场景和功能,对任何类型的开发者都非常有用。但对于需要极致性能的场景,Python 仅充当胶水语言,绑定到 C、C++ 和其他性能更好的语言上。

这促成了 numpy 和 TensorFlow 等库的诞生。 然而,这样做存在一个缺点:构建这些库非常复杂,需要对 CPython 的内部结构有底层的了解,且需要扎实的 C/C++ 知识等。

根据 Mojo 文档,Python 带来的问题更深层次,尤其是对 AI 领域的影响。

仅靠 Python 无法解决应用人工智能系统所需的所有问题,这就是 Mojo 的诞生理由。 Mojo 是一种结合了 Python 的易用性和 C 语言性能的编程语言。堪称鱼与熊掌兼得,两全其美的!

但 Mojo 并不是一个凭空冒出来的项目。 事实上,Mojo 来自一家名为 Modular 的公司,该公司由 Chris Lattner 共同创立,他是 Swift 编程语言和 LLVM 的创建者。 这就是为什么我认为这个项目值得关注的原因。 现在让我们看看 Mojo 的一些绝佳功能。

Mojo的特性

Mojo 附带了许多开箱即用的有趣功能,下面列举几个我认为很酷的功能特性。

1. Mojo 被设计为 Python 的超集

Mojo 旨在与 Python 生态系统完全兼容。

这意味着如果您是 Python 程序员,您可以轻松地上手 Mojo,因为这两种编程语言有许多共同的功能、特性和库。

Mojo 中还提供了 numpy、pandas 和 matplotlib 等库。 下面代码演示了如何使用 Mojo 完成 matplotlib 绘图。

def make_plot(m: Matrix):plt = Python.import_module("matplotlib.pyplot")fig = plt.figure(1,[10,10 * yn // xn],64)ax = fig.add_axes([0.0,0.0,1.0,1.0],False,1)plt.imshow(image)plt.show()make_plot(compute_mandelbrot())

目前 Mojo 仍处于非常早期的阶段,因此它仍然缺少 Python 的许多功能(例如,它还不支持类)。 希望在未来的更新中,Mojo 能与 Python 完全兼容。

2. 强类型检查

Mojo 利用类型来实现更好的性能和错误检查。

def sort(v: ArraySlice[Int]):for i in range(len(v)):for j in range(len(v) - i - 1):if v[j] > v[j+1]:swap(v[j], v[j+1])

尽管你仍然可以像 Python 一样使用灵活的类型,但 Mojo 建议使用严格的类型检查。 这可以使你的代码更加可预测、更易于管理也更安全。

3. 内存所有权和借用检查器

Mojo 支持 owned 参数约定,该约定用于想要独占某个值的所有权的函数。

def reorder_and_process(owned x: HugeArray):sort(x)			# 原地更新give_away(x^)	# 转移所有权print(x[0])		# 错误:x所有权已经移除

这里的概念跟 Rust 类似,相信 Mojo 是借用了 Rust 的部分内存管理思想,提升内存安全性。

4. 自动调节

Mojo 内置自动调整功能,可自动帮你找到参数的最佳值,以便最大化利用目标硬件的性能。

def exp_buffer[dt: DType](data: Arrayslice[dt]):# 搜索最佳向量长度alias vector_len = autotune(1,4,8,16,32)# 用自动调节的最佳值作为矢量化长度vectorize[exp[dt, vector_len]](data)

5. Mojo 利用 MLIR

通过使用多级中间表示 (MLIR) ,Mojo 开发人员可以充分利用向量、线程和 AI 硬件单元。这有助于 Mojo 实现出色的性能,因为与单线程执行的 Python 不同,Mojo 可以跨多个内核进行并行处理。

在这里插入图片描述

这就是 Mojo 比 Python 快 35000 倍的原因之一。

语言时间倍数
Python 3.10.91027s1倍
PyPy46.1s22倍
Scalar C++0.20s5000倍
Mojo0.03s35000倍

如何使用 Mojo

Mojo 仍在开发中,不过你可以在基于 JupyterHub 的 Playground 上试用它。 要试用 Mojo,请访问此网站进行注册。注意,注册时在“Modular Product Interest”这栏请选中 Mojo 。

祝大家编程愉快!

相关文章:

Mojo:比 Python 快 35000 倍的 AI 编程语言

Mojo:比 Python 快 35000 倍的 AI 编程语言 Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。 Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合&am…...

1703_LibreOffice常用功能使用体验

全部学习汇总: GreyZhang/windows_skills: some skills when using windows system. (github.com) 首先需要说明的是我不是一个重度Office用户,甚至算不上一个重度的Office用户。我使用的Office软件最多的功能就是文档编辑,绝大多数时候还是文…...

Postgres:Win/Linux环境安装及一键部署脚本

1.Win安装Postgres (1)下载安装包 (2)开始安装 修改安装目录 选择要安装的组件 data也就是库表及数据的.dba文件存放目录 密码设置 端口设置 next next 开始安装 安装完成,Stack Builder 根据需要选择是否安装。仅仅是…...

每日一题144——数组大小减半

给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1: 输入:arr [3,3,3,3,5,5,5,2,2,7] 输出:2 解释:选择 {3,…...

运维必懂的13条高效工作秘诀

正确做事,更要做正确的事 “正确地做事”强调的是效率,重视做一件工作的最好方法;“做正确的事”强调的是效能,重视时间的最佳利用——这包括是做或者不做某项工作。 实际上,第一重要的却是效能而非效率,…...

【牛客刷题专栏】0x26:JZ25 合并两个排序的链表(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…...

5/5~5/7总结

把socket通信改成了分成短连接和长连接,登录前的所有操作都是短连接,每次都关闭连接,如果登录成功了就保持该socket连接,登录成功之后的所有操作,修改资料,发信息等都用该socket, 服务端和客户…...

重要通知|Sui测试网将于5月11日重置

致Sui社区成员们: 正如之前公告所述,部分社区成员发现测试网可能会定期清除数据并重新启动。鉴于此,我们宣布计划将于2023年5月11日进行首次测试网清除。 对于想要继续读取和访问当前测试网络的社区成员,请使用由Mysten Labs在…...

教你快速把heic格式转化jpg,4种方法操作简单

教你快速把heic格式转化jpg的方法,因为HEIC格式图片通常出现在苹果公司的iOS 11操作系统及之后的版本中,这是因为苹果公司在这些版本中采用了HEIF(高效图像格式)作为默认的照片格式来替代JPEG格式。同时,需要注意的是&…...

交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT

Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域,Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通…...

FIR滤波

参考来源: https://www.zhihu.com/question/323353814 本节主要围绕以下几个问题进行描述: 什么是FIR滤波器时域的卷积频域的相乘 关于FIR FIR滤波就是在时域上卷积的过程。将含噪声信号与低通滤波器的傅里叶逆变换值进行卷积,这个过程就是…...

Python小姿势 - Python中的类型检查

Python中的类型检查 在Python中,类型检查是通过内置函数isinstance()来实现的。 isinstance() 函数用于判断一个对象是否是一个已知的类型,类似 type()。 isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型。 isinstance() 会…...

人工智能前景

人工智能AI的未来非常广阔和光明。随着科技的不断发展和普及,人工智能已经开始逐渐融入我们生活的方方面面,比如智能家居、智能医疗、无人驾驶等等。未来,随着更多的应用场景被开拓和挖掘,人工智能的应用范围将会越来越广泛&#…...

python并发编程学习笔记--生产者消费者模型 day02

目录 1. 什么是生产者消费者模型 2. 为什么引入生产者消费者模型 3. 如何实现 4. 示例 1. 什么是生产者消费者模型 生产者 : 程序中负责产生数据的一方消费者 : 程序中负责处理数据的一方 2. 为什么引入生产者消费者模型 在并发编程中, 生产者消费者模式通过一个容器来解…...

彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!

利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动…...

深入学习MYSQL-数据操纵及视图

前言 本博客中的例子和文字大部分来源于书籍《mysql必会知识》,后续会根据更多的书籍不断完善此笔记。 插入操作 可以这种方式向数据库插入两条数据,mysql和pg都支持这种写法。在实战中我们应该更多的使用这种写法,因为数据库的批量操作会…...

深入讲解eMMC简介

1 eMMC是什么 eMMC是embedded MultiMediaCard的简称,即嵌入式多媒体卡,是一种闪存卡的标准,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具体由电子设备工程联合委员会JEDEC订立和发布。它是对MMC的一个拓展&#xff0…...

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来,由于市场对车辆先进安全功能的需求的增加,汽车超声波传感器市场一直保持稳步增长。ICV估计,车载超声波传感器全球市场预计在2022年至2027年之间以11.5%的复合年增长率增长,这种增长是由越来越多的高级驾驶辅助系…...

PointNet:利用深度学习对点云进行3D分类和语义分割

PointNet:利用深度学习对点云进行3D分类和语义分割 参考自,PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 代码仓库地址为:https://github.com/charlesq34/pointnet/ 介绍 这次介绍的是一个比较基础的工作…...

第四十二章 Unity 下拉框 (Dropdown) UI

本章节我们介绍下拉框 (Dropdown),我们点击菜单栏“GameObject”->“UI”->“Dropdown”,然后调整它的位置,效果如下 其实它的本质就是一个下拉列表,然后选择列表中的一个选项而已。大家在很多网页中应该可以看到类似的UI元…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...