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

试图替代 Python 的下一代AI编程语言:Mojo

在这里插入图片描述

文章目录

    • 为什么叫 Mojo ?
    • Python 家族的一员,Mojo
    • Python 的好处:
    • Python 兼容性
    • Python 的问题
    • 移动和服务器部署:
    • Python 子集和其他类似 Python 的语言:

Mojo 是一种创新的编程语言,结合了 Python 的可用性和 C 的性能。它旨在成为人工智能 (AI) 开发的首选语言,因为它允许开发人员编写既快速又易于阅读的代码。
这里有一些关键点,

  • Modular 是一种新的编程语言,旨在应对整个 AI 堆栈的编程挑战。
  • Mojo 旨在成为一种创新且可扩展的编程模型,可以针对加速器和其他异构系统。
  • Mojo 建立在 Python 生态系统之上,这使其广泛可用且易于使用。

为什么叫 Mojo ?

Mojo 的意思是“神奇的魅力”或“神奇的力量”。这个名字很适合为 Python 带来神奇力量的语言,包括用于加速器和 AI 中无处不在的其他异构系统的创新编程模型。

Python 家族的一员,Mojo

Mojo 是一种新的编程语言,旨在与 Python 生态系统完全兼容。

  • 将提供可预测的低级性能和低级控制。
  • 将允许开发人员将代码子集部署到加速器。
  • 不会创建一个支离破碎的软件生态系统。
  • 将从其他语言的经验教训中受益。
  • 将成为 Python 的超集,并将与现有的 Python 程序兼容。
  • 将提供新工具来开发安全和高性能的系统级代码。
  • 将允许开发人员在静态类型和动态类型之间进行选择。

Python 的好处:

在这里插入图片描述
Python 是 ML 和无数其他领域的主导力量。

Python 易于学习,被重要的程序员群体所熟知,拥有令人惊叹的社区,拥有大量有价值的软件包,并且拥有各种各样的好工具。

Python 通过其动态编程特性支持开发美观且富有表现力的 API。

TensorFlow 和 PyTorch 等机器学习框架采用 Python 作为其用 C++ 实现的高性能运行时的前端。

对于 Modular,Python 是其 API 表面堆栈中不可或缺的部分。

模块化团队希望 Python 生态系统中的人们看到他们的 Mojo 目标是将 Python 提升到一个新的水平——完成它——而不是与之竞争。

Python 兼容性

Mojo 旨在与 Python 生态系统完全兼容。兼容性有两种类型:导入兼容性和迁移兼容性。

Mojo 与 Python 100% 导入兼容,因为它使用 CPython 实现互操作性。但 Mojo 尚未完全与 Python 兼容。

就 Python 和 Mojo 而言,Mojo 期望直接与 CPython 运行时合作,并具有与 CPython 类和对象集成的类似支持,而无需自行编译代码。

这提供了与现有代码的庞大生态系统的插件兼容性,并且它支持渐进式迁移方法,在该方法中,向 Mojo 的增量迁移会产生增量收益。

Python 的问题

Python 有一些众所周知的问题,包括糟糕的底层性能和全局解释器锁 (GIL),这使得 Python 成为单线程的。这些问题在通常需要高性能和多线程能力的 AI 领域影响尤其大。
解决这些问题的一种方法是使用混合库,它们是使用 Python 和 C/C++ 的组合构建的。但是,构建混合库很复杂,需要 Python 和 C/C++ 的知识。这会使大型框架的发展变得困难,并可能导致可用性问题。
此外,必须同时处理 Python 和 C/C++ 代码的两个世界问题可能会导致难以使用调试器和其他工具。这对于 AI 开发人员来说尤其成问题,他们经常需要使用像 CUDA(计算统一设备架构)这样的加速器。
在这里插入图片描述

CUDA(计算统一设备架构)是一种定制的编程语言,有其自身的特殊问题和局限性。

AI 世界在硬件方面有大量的创新,因此,复杂性正在失控。现在有几种尝试为加速器(OpenCL、Sycl、OneAPI 等)构建有限的编程系统。
然而,这些系统都没有解决工具和生态系统中严重损害行业的基本碎片化问题。
Mojo 旨在通过提供一种可用于系统编程和 AI 开发的统一语言来解决这些问题。
Mojo 仍在开发中,但它有可能彻底改变人工智能行业。

移动和服务器部署:

Python 生态系统的另一个挑战是部署。这有很多方面,包括如何控制依赖关系、如何部署密封编译的“a.out”文件以及如何提高多线程和性能。

Python 子集和其他类似 Python 的语言:

已经有很多构建可部署 Python 的尝试,例如 PyTorch 项目中的 TorchScript。
在这里插入图片描述
这些语言很有用,因为它们通常提供低依赖性部署解决方案,有时还具有高性能。它们使用类似 Python 的语法,这使得它们比一门新语言更容易学习。
但是,这些语言并未得到广泛采用,因为它们:

  • 不与 Python 生态系统互操作
  • 没有出色的工具(例如调试器)
  • 单方面更改 Python 中不方便的行为,这会破坏兼容性并进一步分割生态系统

这些方法的挑战在于它们试图解决 Python 的一个弱点,但它们在 Python 的强项上并不擅长。
充其量,它们可以提供 C 和 C++ 的新替代方案,但如果不解决 Python 的动态用例,它们就无法解决“两个世界问题”。
这种方法导致碎片化,不兼容性使迁移变得困难甚至不可能。

相关文章:

试图替代 Python 的下一代AI编程语言:Mojo

文章目录 为什么叫 Mojo ?Python 家族的一员,MojoPython 的好处:Python 兼容性Python 的问题移动和服务器部署:Python 子集和其他类似 Python 的语言: Mojo 是一种创新的编程语言,结合了 Python 的可用性和…...

【数据结构】栈、队列和数组

栈、队列和数组 栈队列数组数组的顺序表示和实现顺序表中查找和修改数组元素 矩阵的压缩存储特殊矩阵稀疏矩阵 栈 初始化 #define MaxSize 50//栈中元素的最大个数 typedef char ElemType;//数据结构 typedef struct{int top;//栈顶指针ElemType data[MaxSize];//存放栈中的元…...

python算法调用方案

1、python算法部署方案 (1)独立部署 算法端和应用端各自独立部署。 使用WSGI(flask)web应用A包装算法,并发布该应用A。 应用端B 通过httpclient调用算法应用A中的api接口。 (2)统一部署 算法…...

《微服务架构设计模式》第二章

文章目录 微服务架构是什么软件架构是什么软件架构的定义软件架构的41视图模型为什么架构如此重要 什么是架构风格分层式架构风格六边形架构风格微服务架构风格什么是服务什么是松耦合共享类库的角色 为应用程序定义微服务架构识别操作系统根据业务能力进行拆分业务能力定义了一…...

taro vue3 ts nut-ui 项目

# 使用 npm 安装 CLI $ npm install -g tarojs/cli 查看 Taro 全部版本信息​ 可以使用 npm info 查看 Taro 版本信息,在这里你可以看到当前最新版本 npm info tarojs/cli 项目初始化​ 使用命令创建模板项目: taro init 项目名 taro init myApp …...

【群答疑】jmeter关联获取上一个请求返回的字符串,分割后保存到数组,把数组元素依次作为下一个请求的入参...

一个非常不错的问题,来检验下自己jmeter基本功 可能有同学没看懂题,这里再解释一下,上面问题需求是:jmeter关联获取上一个请求返回的字符串,分割后保存到数组,把数组元素依次作为下一个请求的入参 建议先自…...

Shell 函数详解(函数定义、函数调用)

Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。 Shell 中的函数和C、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。 Shell 函数定义的语…...

git-命令行显示当前目录分支

1. 打开家目录.bashrc隐藏文件,找到如下内容 forlinxubuntu:~$ vi ~/.bashrcif [ "$color_prompt" yes ]; thenPS1${debian_chroot:($debian_chroot)}\[\033[01;32m\]\u\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ elsePS1${debian_chroot:($debi…...

pgsql 报错 later table “drop column” is not supported now

报错 使用pgsql执行下面的SQL报错 alter table test_user drop clolumn name;报错信息: later table “drop column” is not supported now。 报错原因 hologres pgsql的数据库: 删除列目前还是灰度测试阶段,需要在sql前加上set hg_ex…...

如何制定私域流量布局计划?

01 确定目标用户群体 首先,明确目标用户是私域流量布局的基础。可以通过市场调研、用户画像和数据分析等方式,了解目标用户的年龄、性别、兴趣爱好等特征,为后续精准营销奠定基础。 02 选择合适的私域流量渠道 根据目标用户群体的特点&…...

yolov8 模型部署--TensorRT部署-c++服务化部署

写目录 yolov8 模型部署--TensorRT部署1、模型导出为onnx格式2、模型onnx格式转engine 部署 yolov8 模型部署–TensorRT部署 1、模型导出为onnx格式 如果要用TensorRT部署YOLOv8,需要先使用下面的命令将模型导出为onnx格式: yolo export modelyolov8n.p…...

自适应迭代扩展卡尔曼滤波算法AIEKF估计SOC VS 扩展卡尔曼估计SOC

自适应迭代扩展卡尔曼滤波算法(AIEK) 自适应迭代扩展卡尔曼滤波算法(AIEK)是一种滤波算法,其目的是通过迭代过程来逐渐适应不同的状态和环境,从而优化滤波效果。 该算法的基本思路是在每一步迭代过程中&a…...

2023-亲测有效-git clone失败怎么办?用代理?加git?

git 克隆不下来,超时 用以下格式: git clone https://ghproxy.com/https://github.com/Tencent/ncnn.git 你的网站前面加上 https://ghproxy.com/ 刷的一下就下完了!!...

An Empirical Study of GPT-3 for Few-Shot Knowledge-Based VQA

本文是LLM系列文章,针对《An Empirical Study of GPT-3 for Few-Shot Knowledge-Based VQA》的翻译。 GPT-3对基于小样本知识的VQA的实证研究 摘要引言相关工作方法OK-VQA上的实验VQAv2上的实验结论 摘要 基于知识的视觉问答(VQA)涉及回答需…...

2023高教社杯数学建模B题思路分析 - 多波束测线问题

# 1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播, 在不同界面上产生反射, 利用这一原理,从测量船换能器垂直向海底发射声波信 号,并记录从声波发射到…...

02-docker network

Docker网络 Docker网络是什么 Docker 网络是 Docker 容器之间进行通信和连接的网络环境。在 Docker 中,每个容器都有自己的网络命名空间,这意味着每个容器都有自己的网络接口、IP 地址和网络配置 Docker网络启动后,会在宿主机中建立一个名…...

栈和队列经典笔试题

文章目录 栈和队列的回顾💻栈🩳队列👟 栈和队列经典笔试题🔋有效的括号🎸用队列实现栈 🕯用栈实现队列🔭设计循环队列🧼 安静的夜晚 你在想谁吗 栈和队列的回顾💻 栈&am…...

No5.9:多边形内角和公式

#!/usr/bin/python # -*- coding: UTF-8 -*-#指定了编码,中文就能正常展示 # codingutf-8def calc_degree(n):#n代表边形的总数degree (n - 2) * 180#多边形内角和公式return degreeprint(calc_degree(3))#三角形的内角和 print(calc_degree(4))#四边形的内角和【小…...

EditPlus 配置python 及Anaconda中的python

若不是pycharm vscode 太大,太占内存,谁会想到用Notepad,EdirPlus 配置python呢!!! 话不多说,首先你自己安装好EditPlus。开始 菜单栏 选择 工具 -> 配置自定义工具 组名:python 命令:d:\*…...

linux 编译 llvm + clang

1. 需要下载以下三个压缩包,下载源码:Release LLVM 15.0.7 llvm/llvm-project GitHub clang-15.0.7.src.tar.xzcmake-15.0.7.src.tar.xzllvm-15.0.7.src.tar.xz​​​​​ 2. 解压后将 clang 源码放入 llvm/tools/ 下 3. 将解压后的 cmake-15.0.7…...

Mybatis 框架 ( 四 ) QueryWrapper

4.5.Wrapper条件构造器 Wrapper : 条件构造抽象类,最顶端父类 AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件 QueryWrapper : Entity 对象封装操作类,不是用lambda语法 UpdateWrapper &am…...

数据结构和算法之二分法查找

二分法查找,也称作二分查找或折半查找,是一种在有序数组中快速查找特定元素的算法。它采用分治法思想,通过将问题划分为规模更小的子问题,并且通过对子问题的查找来解决原问题。 二分法查找的思路是不断地将数组一分为二&#xf…...

系统日期如何在页面展示,框架是react或者vue3

安装插件dayjs或者moment.js 2.使用setInterval(useInterval)或者requestAnimationFrame react项目中useInterval的代码示例: import React, {useState } from react; import { useInterval } from "ahooks"; import moment fro…...

(二十二)大数据实战——Flume数据采集之故障转移案例实战

前言 本节内容我们完成Flume数据采集的故障转移案例,使用三台服务器,一台服务器负责采集nc数据,通过使用failover模式的Sink处理器完成监控数据的故障转移,使用Avro的方式完成flume之间采集数据的传输。整体架构如下:…...

前端小案例3:Flex弹性布局行内元素宽度自适应

前端小案例3:Flex弹性布局行内元素宽度自适应 项目背景:需要在一行上展示空调设备的三个模式(制冷、制热、通风)或者两个模式(制冷、制热);因为不同产品的模式数量不同,因此需要让模…...

纳尼?小说还要用看的?这可以听!无广!

这是一款听书软件,可以自定义书源,自己设置书架,页面简单易操作,无广告。 支持直接搜索书名,链接,图文,本地文件等方式听书 拥有30多主播声音,分类细致 支持倍速、添加BGM等...

【微服务部署】四、Jenkins一键打包部署NodeJS(Vue)前端项目步骤详解

本文介绍使用Jenkins一键将NodeJS(Vue)前端项目打包并上传到生产环境服务器,这里使用的是直接打包静态页面,发送到远程服务器Nginx配置目录的方式,首先确保服务器环境配置好,安装Nginx,运行目录…...

【前端】禁止别人调试自己的前端页面代码

无限debugger 前端页面防止调试的方法主要是通过不断 debugger 来疯狂输出断点,因为 debugger 在控制台被打开的时候就会执行由于程序被 debugger 阻止,所以无法进行断点调试,所以网页的请求也是看不到的代码如下: /** * 基础禁止…...

UDP的可靠性传输

UDP系列文章目录 第一章 UDP的可靠性传输-理论篇(一) 第二章 UDP的可靠性传输-理论篇(二) 文章目录 UDP系列文章目录前言1.TCP 和UDP格式对比2.UDP分片原理3.UDP 传输层应该注意问题4.MTU5.UDP 分片机制设计重点 一、ARQ协议什么…...

科研笔记:TPAMI submission guideline

1 author information Author Information - IEEE Transactions on Pattern Analysis and Machine Intelligence | IEEE Computer Society Digital Library 1.1 会议期刊extension 当一个TPAMI的提交基于之前的会议论文时,IEEE要求期刊论文是之前出版物的“实质…...

建设嘉陵摩托车官方网站/微信如何引流推广精准加人

1...

美食网站建设策划书/企业网站排名优化方案

2018年谷歌推出了跨平台框架Flutter,一时间让各位技术开发者兴趣暴涨(因为做过混合开发的程序猿早就被js的性能低效,rn的js桥接麻烦,weex的社区小和坑多。。。等技术而感到焦头烂额)。随着高性能的跨平台框架Flutter正式版一发布,…...

公司做网站设计要注意/南京谷歌推广

上个月把VPS迁到budgetVM,终于不用再受digitalOcean的气了,入手很方便,重点是支持支付宝付款——paypal的界面真是不习惯,开通速度挺快的,1G的内存够我折腾一段时间了~,额外送了俩IP,过段时间再…...

国外域名注册商网站/查询网站相关网址

题目如下: (1) 将代码写在.asm中,然后打开boxdos即可生成t1.exe. (2) 首先来分析一下,代码完成的功能。 assum cs:codesg codesg segmentmov ax,2000 // ax 2000mov ss,ax // ss 2000 mov sp,0 // sp 0add…...

教人做辐射4mod的网站/网络广告公司

linux接口绑定How to configure interface bonding to bound to 2 eth interfaces together in Linux, specifically CentOS/RHEL?如何在Linux (特别是CentOS / RHEL)中配置将接口绑定在一起绑定到2个eth接口? This tutorial Configuring I…...

股票做T网站/自动seo系统

1 问题 权限菜单从后台获取,在编辑角色菜单权限时,从后台获取角色权限,根据角色权限设置菜单的勾选情况,但是发现设置完后,菜单树没有更新,而是需要手动点击展开或闭合之后才会刷新,如下图 点…...