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

news2024/7/4 6:15:09

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 。

祝大家编程愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC—— 内容生产力革命的起点

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.AIGC 1.什么是AIGC? 2.AIGC有哪些优势与挑战 (1&#xff0…

51单片机(十)DS1302实时时钟

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

Solon 框架,单月下载量突破100万了!!!

Solon 框架,单月下载量突破100万了。感谢开源的力量和社区的支持,我们同喜同荣!!!目前,作为新成员加入了“可信开源共同体”,也积极参与中科院的“开源之夏”计划,也备受某军工服务商…

【C++入门】你知道C++为什么会有内联函数吗?

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

深度优先遍历和广度优先遍历

深度优先遍历和广度优先遍历 文章目录 深度优先遍历和广度优先遍历图图的实现遍历方式深度优先遍历基本思想广度优先遍历基本思想 完整代码 图 介绍:用于表示多对多的关系 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称…

FFmpeg AAC 解码 PCM

1. 概要与流程图 1.1 AAC 转 PCM,需要解码库来实现,目前了解有三种方式,当前使用的是 FFmpeg 库解码 1) faad 解码库网址:faadhttps://sourceforge.net/projects/faac/files/faad2-src/ 2) fdk-aac 编解码库网址: fdk-aac

接口测试入门:轻松掌握 ,让你的后端“心甘情愿”地配合你

目录 前言 简介 什么是API测试? API测试的必要性 API测试的类型 优势 API测试的挑战 【自动化测试工程师学习路线】 前言 在这篇文章中,我将带你轻松入门接口测试并掌握实用技巧,让你能够与后端开发人员更加顺畅地合作。相信我&…

【量化分析】用mplfinance显示交易图时,处理 Expect data.index as DatetimeIndex?

目录 一、说明 二、程序代码和出错描述 三、合理化建议 3.1 读入数据时指定索引 3.2 读入数据后,使用数据前指定日期(时间戳)索引 一、说明 我打算从比特币数据中获取烛台图。这是我在加载 csv 文件后选择我想要的数据框的代码。然而&…

【2】Kaggle:狗的种类识别,基于论文中的 VGG(11)/ResNet(18)/SENet 结构实现

1.数据集格式 在前面【1】中已经对数据集进行过了处理,在自己实现这一模块,训练数据集的统一格式为下图: 2.VGG11结构 根据论文Karen Simonyan, Andrew Zisserman. Very deep convolutional networks for large-scale image recognition. ICLR, 2015. (VGG) 中的结构,根…

如何在华为云服务器安装MindSpore框架

参考链接 一、获取安装命令 我是在华为云租了一个云服务器,然后系统是Ubuntu18.04,如果不知道自己的系统,可以通过以下方式: 第三方依赖安装方法 1.确认安装Ubuntu 18.04是64位操作系统 确认系统版本号,在终端输入lsb_release…

Linux -- 进阶 Web服务器 虚拟主机 --- 基于 IP 地址

虚拟主机 一个Web 服务器,如果只能运行一个网站的话,那么对于一些经费不是很足的小公司来说,那就 有些奢侈了,资源没有办法完全利用上 ( 无论是 内存,CPU,硬盘,带宽等等 &#xff0…

【网络常用命令汇总】ping和ipconfig命令、nslookup命令、netstat和tracert命令、route和arp命令详解(附图详解)

【写在前面】由于考试将近我也是临时抱个佛脚,之前对网络这块的概念真的只是停留在大学里面学的计算机网络,但是当时并没有接触这些实在的东西,也就只有工作后才会去想那么多,比如网络连通性ping一下就知道,其他的更不…

第07讲:Java High Level Client,读写 ES 利器

SkyWalking OAP 后端可以使用多种存储对数据进行持久化,例如 MySQL、TiDB 等,默认使用 ElasticSearch 作为持久化存储,在后面的源码分析过程中也将以 ElasticSearch 作为主要存储进行分析。 ElasticSearch 基本概念 本课时将快速介绍一下 E…

【类和对象完结篇】

目录 ❀初始化列表 构造函数体赋值 初始化列表 ❀explicit关键字 ❀static成员 什么是static成员? 特性 ❀友元 友元函数 友元类 ❀内部类 ❀理解类和对象 🍀​​​​​​​​​​​​​​小结🍀 🎉博客主页&#xf…

linux环境安装使用mysql详解

01-安装MySQL并启动 1.1 环境准备 # 1.卸载mariadb,否则安装mysql会出现冲突 (1).执行命令rpm -qa | grep mariadb 会列出所有被安装的mariadb rpm 包; (2).执行命令rpm -e --nodeps mariadb-libs-5.5.56…

super_排列组合lesson08易错题记录

此题用插空法解决:这个是组合的问题,总共10个学生,要分配到7个班级里,也就是要把这十个学生分为7部分,如果让学生们站在一起,就是在9个空位中插入6块木板,也就是C(9,6)也就是84 此题用捆绑法解决…

[Java进阶] 线程池详解

文章目录 前言1. 线程池的作用2. 线程池的应用3. 标准库中创建线程池的方式 前言 本文介绍线程池的作用和实现方法. 1. 线程池的作用 1.我们知道,线程的作用是由于进程的创建和销毁需要分配和回收资源,开销较大.而线程是"轻量级进程",创建销毁更高效. 2.线程池,比线…

汽车发动机点火性能测试仪设计

汽车发动机的点火系统包括上百种电气和机械零部件,生产线分布较广,因此分布式间接监控方式在点火系统的监测与故障诊断系统中得到广泛应用。发动机点火性能测试仪通过测量发动机的闭合角与分火角,对其分电器和点火器性能进行分析。 闭合角、分…

Python接口自动化测试实战系列

本节内容 接口及接口测试 网络基础知识:IP,域名, DNS及端口 网络基础知识:OSI七层模型及TCP协议 HTTP协议 接口及接口测试 这里插播一个段子 上图中,程序员口中提到的接口是什么意思呢? 手机壳有没有颜色这个属性&#xff0…

安全渗透工程师入门最快需要多久?提供具体路线和学习框架

前言 网络渗透这个东西学起来如果没有头绪和路线的话,是非常烧脑的。最快达到入门也要半年 理清网络渗透学习思路,把自己的学习方案和需要学习的点全部整理,你会发现突然渗透思路就有点眉目了。 网络安全好混,但不容易混得好。…