为什么埃隆·马斯克说Rust是AGI的语言?

为什么埃隆·马斯克说Rust是AGI的语言?

大喵点评:本文作者的观点不代表我的观点,另有人视频里指出Mojo比Python快 35000倍的测评有失偏颇。请见👇视频。

但,本篇的价值在于

以及为什么WasmEdge是AGI采用Rust的关键路径上的一部分!

更新:零Python依赖、可移植和超快的llama2运行时已经发布!由Rust编写并在WasmEdge上运行。观看演示视频并查找下面的源代码存储库。

为什么不使用Python?

今天的LLM应用程序,包括推理应用程序和代理,大多数都是用Python编写的。但这即将发生改变。

Python太慢、太臃肿,而且矛盾地对于新一波开发者来说太难掌握。事实上,LLVM、Clang和Swift的发明者Chris Lattner曾经证明,Python可能比编译语言慢35,000倍,这就是他发明Mojo语言作为Python替代品的原因。

根据Chris Lattner的说法,编译语言可能比Python快35,000倍(大喵质疑数值,恰好有人也只出测评存在的问题,见本文篇首的视频)。

迫使开发者将越来越多的应用程序逻辑推向本机编译代码,例如C、C++和Rust。例如,像llama.cpp、whisper.cpp和llama2.c这样的非常流行的项目都没有Python依赖。

Greg Brockman是OpenAI的联合创始人和总裁。他也认为Python太慢了。

这反过来降低了Python开发者的体验。事实上,为了云部署而管理Python安装已经成为一项重大挑战。

Chris Albon是维基媒体的机器学习主任。他甚至也难以理解“现代”Python。 换句话说,Python不仅非常慢,而且在开发LLM应用程序方面也难以使用。

请参考Python安装的关键细节:

https://blog.jeremarc.com/posts/python-env/

Textual

是一个用于Python的快速应用程序开发框架。它提供了一个简单的Python API,可用于构建复杂的用户界面,并在终端和(即将推出的)Web浏览器中运行应用程序。

https://github.com/Textualize/textual

Textual通过受现代Web开发启发的API为Rich添加了交互性,支持现代终端软件,可使用1670万种颜色、鼠标支持和流畅的无闪烁动画。

它还具备强大的布局引擎和可重复使用的组件,使您可以构建媲美桌面和Web体验的应用程序。

Textual兼容Linux、macOS和Windows,要安装它,可以使用pip命令。

此外,Textual还提供示例和文档,以帮助开发人员入门,同时欢迎加入它们的Discord社区。此外,Textual还提供了一些参考命令,用于预览其样式、动画和颜色设计系统。

例如:计算器的UI

from decimal import Decimalfrom textual import events, on
from textual.app import App, ComposeResult
from textual.containers import Container
from textual.css.query import NoMatches
from textual.reactive import var
from textual.widgets import Button, Digitsclass CalculatorApp(App):"""A working 'desktop' calculator."""CSS_PATH = "calculator.tcss"numbers = var("0")show_ac = var(True)left = var(Decimal("0"))right = var(Decimal("0"))value = var("")operator = var("plus")NAME_MAP = {"asterisk": "multiply","slash": "divide","underscore": "plus-minus","full_stop": "point","plus_minus_sign": "plus-minus","percent_sign": "percent","equals_sign": "equals","minus": "minus","plus": "plus",}def watch_numbers(self, value: str) -> None:"""Called when numbers is updated."""self.query_one("#numbers", Digits).update(value)def compute_show_ac(self) -> bool:"""Compute switch to show AC or C button"""return self.value in ("", "0") and self.numbers == "0"def watch_show_ac(self, show_ac: bool) -> None:"""Called when show_ac changes."""self.query_one("#c").display = not show_acself.query_one("#ac").display = show_acdef compose(self) -> ComposeResult:"""Add our buttons."""with Container(id="calculator"):yield Digits(id="numbers")yield Button("AC", id="ac", variant="primary")yield Button("C", id="c", variant="primary")yield Button("+/-", id="plus-minus", variant="primary")yield Button("%", id="percent", variant="primary")yield Button("÷", id="divide", variant="warning")yield Button("7", id="number-7", classes="number")yield Button("8", id="number-8", classes="number")yield Button("9", id="number-9", classes="number")yield Button("×", id="multiply", variant="warning")yield Button("4", id="number-4", classes="number")yield Button("5", id="number-5", classes="number")yield Button("6", id="number-6", classes="number")yield Button("-", id="minus", variant="warning")yield Button("1", id="number-1", classes="number")yield Button("2", id="number-2", classes="number")yield Button("3", id="number-3", classes="number")yield Button("+", id="plus", variant="warning")yield Button("0", id="number-0", classes="number")yield Button(".", id="point")yield Button("=", id="equals", variant="warning")def on_key(self, event: events.Key) -> None:"""Called when the user presses a key."""def press(button_id: str) -> None:"""Press a button, should it exist."""try:self.query_one(f"#{button_id}", Button).press()except NoMatches:passkey = event.keyif key.isdecimal():press(f"number-{key}")elif key == "c":press("c")press("ac")else:button_id = self.NAME_MAP.get(key)if button_id is not None:press(self.NAME_MAP.get(key, key))@on(Button.Pressed, ".number")def number_pressed(self, event: Button.Pressed) -> None:"""Pressed a number."""assert event.button.id is not Nonenumber = event.button.id.partition("-")[-1]self.numbers = self.value = self.value.lstrip("0") + number@on(Button.Pressed, "#plus-minus")def plus_minus_pressed(self) -> None:"""Pressed + / -"""self.numbers = self.value = str(Decimal(self.value or "0") * -1)@on(Button.Pressed, "#percent")def percent_pressed(self) -> None:"""Pressed %"""self.numbers = self.value = str(Decimal(self.value or "0") / Decimal(100))@on(Button.Pressed, "#point")def pressed_point(self) -> None:"""Pressed ."""if "." not in self.value:self.numbers = self.value = (self.value or "0") + "."@on(Button.Pressed, "#ac")def pressed_ac(self) -> None:"""Pressed AC"""self.value = ""self.left = self.right = Decimal(0)self.operator = "plus"self.numbers = "0"@on(Button.Pressed, "#c")def pressed_c(self) -> None:"""Pressed C"""self.value = ""self.numbers = "0"def _do_math(self) -> None:"""Does the math: LEFT OPERATOR RIGHT"""try:if self.operator == "plus":self.left += self.rightelif self.operator == "minus":self.left -= self.rightelif self.operator == "divide":self.left /= self.rightelif self.operator == "multiply":self.left *= self.rightself.numbers = str(self.left)self.value = ""except Exception:self.numbers = "Error"@on(Button.Pressed, "#plus,#minus,#divide,#multiply")def pressed_op(self, event: Button.Pressed) -> None:"""Pressed one of the arithmetic operations."""self.right = Decimal(self.value or "0")self._do_math()assert event.button.id is not Noneself.operator = event.button.id@on(Button.Pressed, "#equals")def pressed_equals(self) -> None:"""Pressed ="""if self.value:self.right = Decimal(self.value)self._do_math()if __name__ == "__main__":CalculatorApp().run()

Reference Case

Rust!

Python的问题为高性能编译语言创造了机会。由于C和C++在一般开发者社区中失去了地位,Rust取得了突破。

埃隆·马斯克指出,Rust可能成为AGI的语言。

让这个事实沉淀下来!

Rust被StackOverflow连续七年评为最受喜爱的编程语言,其市场份额稳步增长。

Rust + Wasm 两者兼得

然而,将Rust直接编译成本机机器代码存在其他问题。

安全性。本机二进制文件可能会使整个系统崩溃。

可移植性。本机二进制文件特定于底层操作系统和硬件。

性能。由于安全性和可移植性要求,通常需要本机二进制文件在Linux容器内运行。

这种容器会为程序增加启动和运行时开销,显著降低性能。

Wasm已经成为Rust应用程序的主要安全运行时,以解决这些问题。有了面向云的优化Wasm运行时WasmEdge,开发者现在可以选择在LLM应用程序堆栈的每一层中使用高性能的Rust,作为Python的高性能替代品。

使用Rust + Wasm代替Python,以增强性能、减少占用空间,并提高安全性。

代理层:用于接收互联网事件、连接数据库和调用其他Web服务的网络密集型任务。

Rust和WasmEdge为高密度和高性能的代理应用程序提供异步和非阻塞I/O。示例:flows.network。

推理层:CPU密集型任务,用于将数据(例如单词和句子)预处理为数字,并将数字后处理为句子或结构化JSON数据。

这些功能可以用Rust编写,以实现最佳性能,并在WasmEdge中运行,以实现安全性和可移植性。示例:mediapipe-rs。

张量层:GPU密集型任务,通过WasmEdge的WASI-NN插件从Wasm传递给本机张量库,如llama.cpp、PyTorch和Tensorflow。

结论

Rust和Wasm可能是Python今天的高性能和开发者友好的替代品。

它们与底层GPU张量库更好地集成在一起,这些库也是用C/C++/Rust编写的。 在实现特定于应用程序的预处理和后处理数据函数方面,它们更有效率,这占据了推理工作负载的大部分。

在实现网络密集型和长时间运行的LLM代理所需的任务方面,它们更有效率。

它们的容器映像大小远远小于Python映像(几MB对几百MB)。

由于有限的软件供应链和减少的攻击面,它们比Python容器更安全。

它们更容易安装和管理依赖关系,而不像Python程序那样复杂。

资源

“顶端还有足够的空间:摩尔定律之后将推动计算机性能的是什么?”

MIT的Leiserson和Thompson等人的Science,2020年,第368卷,第6495期。它证明了Python可能比优化的C程序慢超过62,000倍。

作者预测,从Python到编译语言的大规模迁移将带来新的计算机革命。

Long、Tai、Hsieh和Yuan的“面向服务器无函数作为服务的轻量级设计”,IEEE Software,2021年,第38卷,第1期,第75-80页。

它演示了经过AOT优化的Wasm应用程序在启动和运行时都可以远远超过Linux容器应用程序。

WasmEdge的WASI-NN插件允许在WasmEdge中运行Pytorch和Tensorflow推理应用程序的Rust程序。

mediapipe-rs箱是一个供开发人员使用Google的mediapipe系列AI模型创建应用程序的Rust库。它可以编译并在WasmEdge中运行。

Yuan的“在WasmEdge中运行llama2.c”,Medium,2023年。它展示了如何在WasmEdge中运行llama2模型的完整推理应用程序。

flow.network是基于WasmEdge构建的LLM代理的无服务器平台。

https://stackademic.com/

感谢您阅读到最后。请考虑关注作者和本出版物。访问Stackademic,了解有关我们如何在全球普及免费编程教育的更多信息。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算与大数据——Spark的安装和配置

云计算与大数据——Spark的安装和配置 Spark的简单介绍: Apache Spark是一个基于内存的分布式计算框架,它提供了高效、强大的数据处理和分析能力。与传统的Hadoop MapReduce相比,Spark的主要优势在于其能够将数据集缓存在内存中&#xff0c…

openssl创建CA证书教程

配置生成CA证书 总示意图: (1),通过openssl创建CA证书 第一步:创建一个秘钥,这个便是CA证书的根本,之后所有的东西都来自这个秘钥 # 通过rsa算法生成2048位长度的秘钥 openssl genrsa -out myCA.key 2048 第二步&#…

ue5读取自定义文件夹中内容

一、复制文件夹到Content内 二、读取文件内容,直接使用相对路径就可以了/Content,Resource Bundle存储文件夹名的变量。Load Text为自定义的读取json文件的方法,我之前的文章讲了怎么操作。 ue5读取外部文件_艺菲的博客-CSDN博客 三、根据js…

[FineReport]安装与使用(连接Hive3.1.2)

一、安装(对应hive3.1.2) 注:服务器的和本地的要同时安装。本地是测试环境,服务器的是生产环境 1、服务器安装 1、下载 免费下载FineReport - FineReport报表官网 向下滑找到 2、解压 [rootck1 /home/data_warehouse/software]# tar -zxvf tomcat…

OpenAI宣布ChatGPT支持互联网浏览;GPT-4V(ision)介绍

🦉 AI新闻 🚀 OpenAI宣布ChatGPT支持互联网浏览 摘要:OpenAI宣布ChatGPT现在可以浏览互联网,由微软必应提供支持,并提供直接来源链接。这一功能对于需要最新信息的任务特别有用,如技术研究、购买商品或选…

2023年【汽车驾驶员(高级)】报名考试及汽车驾驶员(高级)考试内容

题库来源:安全生产模拟考试一点通公众号小程序 汽车驾驶员(高级)报名考试根据新汽车驾驶员(高级)考试大纲要求,安全生产模拟考试一点通将汽车驾驶员(高级)模拟考试试题进行汇编&…

YOLOv7改进:CBAM注意力机制

目录 1.介绍 1.1、论文的出发点 1.2、论文的主要工作 1.3、CBAM模块的具体介绍 2.YOLOv7改进 2.1yaml 配置文件如下 2.2common.py配置 2.3yolo.py配置 1.介绍 1.1、论文的出发点 cnn基于其丰富的表征能力,极大地推动了视觉任务的完成,为了提高…

QQ聊天记录文件怎么恢复?这3个方法亲测有效

QQ为用户提供了聊天、语音、视频、在线游戏、社交分享等丰富的功能,满足了用户的各种通讯以及娱乐需求。无论是现在还是过去,QQ仍然在我们的生活中扮演着重要的角色。 如果在使用QQ的过程中,发现文件过期或者被删除了该怎么办?qq…

高性能MySQL第四版

主要列出与第三版的区别 第一章、MySQL架构 MySQL逻辑架构 左右分别是第三和第四版。 第四版架构图里把第二层的“查询缓存”去掉了,也去掉了对应的文字描述。 连接管理和安全 “每个 客户 端 连接 都会 在 服务器 进程 中 拥有 一个 线程” 第四版对这句话增…

基于微信小程序的奶茶点餐小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

【力扣2057】值相等的最小索引

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接:值相等的最小索引 给你一个下标从 0 开始的整数数组 nums …

文件的随机读写函数:ftell rewind

目录 函数介绍: ftell: 函数原型: 举例: 文件内容展示: 代码操作: 结果: rewind: 函数原型: 举例: 文件内容展示: 代码操作&#xff1…

[C++随笔录] stack queue使用

stack && queue使用 stackqueue题目训练 stack 栈的特点是 先进后出(first in last out) 我们可以看出, stack的接口相比 vector/string/list 的接口少的太多了 构造函数 && 容器适配器 容器适配器的含义: 首先, 适配器 — — 用户传数据进来, 我们用合适的…

Vulnhub-driftingbules:5 靶机复现完整过程

kali的IP地址:192.168.200.14 靶机IP地址:192.168.200.60 一、信息收集 1.对利用nmap目标靶机进行扫描 由于arp-scan属于轻量级扫描,在此直接使用nmap进行对目标靶机扫描开放端口 nmap -A -p 1-65535 192.168.200.60使用nmap扫描 开放的端…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起,将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是, 从2024年1月1日开始,Unity将对所有达标的用户(开发者)根据游戏安装量征收“安…

STM32 NVIC中断优先级管理通过结构图快速理解

STM32 NVIC中断优先级管理通过结构图快速理解 📑抢占优先级和响应优先级基本常识 🌿抢占优先级的级别高于响应优先级。🌿抢占优先级数值编号越小,所代表的优先级就越高;同理,响应优先级也是如此。&#x1…

存档&改造【02】下载文件模板 打印二维码样式设置

1.下载文件模板 文件模板获取得先设置好全局变量和获取文件URL 声明变量 function fileDownload(url, name) {return new Promise((resolve, reject) > {var xhr new XMLHttpRequest();xhr.open("GET", url, true); // 也可以使用POST方式,根据接口…

Redis的安装与基本使用

文章目录 Linux 环境下安装Redis下载Redis 安装包解压安装包安装Redis进入redis安装包下编译并且安装到指定目录下 启动redis配置远程访问找到Redis.config文件 Windows 环境下安装Redis说明官方提供方式安装或启用WSL2在WSL(Ubuntu)上安装Redis启动Redi…

【三次握手、四次挥手】TCP建立连接和断开连接的过程、为什么需要三次握手,为什么需要四次挥手、TCP的可靠传输如何保证、为什么需要等待2MSL等重点知识汇总

目录 三次握手 为什么握手需要三次 四次挥手 为什么挥手需要四次 TCP的可靠传输如何保证 TIME_WAIT等待的时间是2MSL 三次握手 三次握手其实就是指建立一个TCP连接。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的…

IOTE 2023国际物联网展直击:芯与物发布全新定位芯片,助力多领域智能化发展

IOTE 2023国际物联网展,作为全球物联网领域的盛会,于9月20日在中国深圳拉开帷幕。北斗星通集团应邀参展,旗下专业从事物联网、消费类GNSS芯片研发设计的芯与物公司也随其亮相本届盛会。 展会上,芯与物展示了一系列创新的GNSS定位…