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

news2024/11/25 16:35:27

为什么埃隆·马斯克说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 Decimal

from 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, Digits


class 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_ac
        self.query_one("#ac").display = show_ac

    def 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:
                pass

        key = event.key
        if 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 None
        number = 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.right
            elif self.operator == "minus":
                self.left -= self.right
            elif self.operator == "divide":
                self.left /= self.right
            elif self.operator == "multiply":
                self.left *= self.right
            self.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 None
        self.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.coloradmin.cn/o/1048515.html

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

相关文章

HALCON支持GPU加速的算子有哪些?

参考例程get_operator_info。 get_opencl_operators这里可以查看到所有支持gpu加速的算子。 支持的算子列表: crop_rectangle1,deviation_image,mean_image,points_harris,gray_opening_shape, gray_dilat…

加速企业AI实施:成功策略和效率方法

文章目录 写在前面面临的挑战MlOps简介好书推荐 写作末尾 写在前面 作为计算机科学领域的一个关键分支,机器学习在当今人工智能领域中占据着至关重要的地位,广受瞩目。机器学习通过深入分析大规模数据并总结其中的规律,为我们提供了解决许多…

LeetCode算法题---第3天

注:大佬解答来自LeetCode官方题解 121.买卖股票的最佳时期 1.题目 2.个人解答 function maxProfit(prices) {//更新最低价格和最大利润let minPrice prices[0];let maxProfit 0;for (let i 1; i < prices.length; i) {// 如果当前价格比最低价格还低&#xff0c;更新最…

基于SpringBoot的校园资料分享平台

目录 前言 一、技术栈 二、系统功能介绍 学生信息管理 学生统计管理 资料分享管理 公告资讯管理 首页资料分享 资料分享评论 我的收藏 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策…

图像处理与计算机视觉--第五章-图像分割-霍夫变换

文章目录 1.霍夫变换(Hough Transform)原理介绍2.霍夫变换(Hough Transform)算法流程3.霍夫变换(Hough Transform)算法代码4.霍夫变换(Hough Transform)算法效果 1.霍夫变换(Hough Transform)原理介绍 Hough Transform是一种常用的计算机视觉图形检验方法&#xff0c;霍夫变换一…

【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数

前言 &#x1f493;作者简介&#xff1a; 加油&#xff0c;旭杏&#xff0c;目前大二&#xff0c;正在学习C&#xff0c;数据结构等&#x1f440; &#x1f493;作者主页&#xff1a;加油&#xff0c;旭杏的主页&#x1f440; ⏩本文收录在&#xff1a;再识C进阶的专栏&#x1…

明年亮相香港与新加坡!Polkadot 区块链学院欢迎 Web3 革新者报名

熊市是建设的绝佳时机。继剑桥大学、布宜诺斯艾利斯大学、加州大学伯克利分校之后&#xff0c;Polkadot 区块链学院&#xff08;PBA&#xff09;宣布明年将在亚洲开设两站课程&#xff01;你是否准备好全身心投入到 Web3 的世界&#xff0c;突破边界束缚&#xff0c;开拓创新&a…

Python如何优雅地可视化目标检测框

读入图像 img_name ./pikachu.jpg img cv2.imread(img_name) box [ 140, 16,468,390, "pikachu"] box_color (255,0,255) cv2.rectangle(img, (box[0], box[1]), (box[2], box[3]), colorbox_color, thickness2)标签美化 接下来我们来给矩形框添加标签,我们…

Win10电脑任务栏没有蓝牙图标的简单解决方法

Win10电脑任务栏没有蓝牙图标怎么办&#xff1f;在Win10电脑中&#xff0c;用户有时候会发现任务栏上没有蓝牙图标了&#xff0c;这样就无法通过蓝牙图标快速打开蓝牙服务了。下面小编给大家介绍最简单的解决方法&#xff0c;帮助大家找回任务栏上面的蓝牙图标吧。 问题原因 反…

一致性 Hash 算法

是什么&#xff1a; 一致性 hash&#xff0c;是一种比较特殊的 hash 算法&#xff0c;它的核心思想是解决在分布式环境下&#xff0c; hash 表中可能存在的动态扩容和缩容的问题。 为什么会出现一致性Hash 一般情况下&#xff0c;我们会使用 hash 表的方式以 key-value 的方式来…

一个月软考高项(信息系统项目管理师)冲刺攻略

2023下半年软考信息系统项目管理师&#xff08;高项&#xff09;&#xff0c;离11月4号的考试&#xff0c;只有1个多月了&#xff0c;啃书是来不及了&#xff0c;要抓重点看了 信息系统项目管理师考试介绍&#xff1a; 考试时间&#xff1a;一年考两次&#xff0c;上半年的5月…

pytorch的pixel_shuffle转tflite文件

torch.pixel_shuffle()是pytorch里面上采样比较常用的方法&#xff0c;但是和tensoflow的depth_to_space不是完全一样的&#xff0c;虽然看起来功能很像&#xff0c;但是细微是有差异的 def tf_pixelshuffle(input, upscale_factor):temp []depth upscale_factor *upscale_f…

基于SpringBoot的微服务在线教育系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户管理 课程信息管理 学科管理 职业规划管理 我的笔记管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本…

张量-类型转换函数

代码示例如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()a tf.constant(6) b tf.constant([1,2,3]) a1 tf.to_float(a,nameToFloat) b1 tf.cast(b,dtype tf.float32)with tf.Session() as session:print(session.run(a1))print(session.run(b1))

【LeetCode75】第六十五题买卖股票的最佳时机含手续费

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这是力扣里动态规划类题目里的一道系列题目&#xff0c;买卖股票&#xff0c;直接在题库里搜就能搜到这一系列。 我建议各位可以先去做一…

经验分享|甘肃某中型灌区信息化管理平台案例

河西走廊绿洲灌区&#xff0c;润泽万亩良田 甘肃某中型灌区位于河西走廊中端的黑河中游&#xff0c;从黑河引水自流灌溉&#xff0c;通过渠首输配水闸站&#xff0c;将水量输送并分配到田间&#xff0c;进行灌溉。 该灌区所处区域是农业灌溉大县&#xff0c;是甘肃河西走廊…

编程新时代:Amazon CodeWhisperer 助您轻松驾驭代码世界

文章目录 一、什么是 Amazon CodeWhisperer&#xff1f;二、个人无限免费使用三、安装配置3.1 手把手教你在pycharm配置3.2 同理在VSCODE安装 三、Pycharm上测试3.1 根据注释写代码3.2 检查修复代码错误3.3 构建一个简单爬虫 四、 VSCODE上测试4.1 个性化体验4.2 系统兼容性4.3…

项目任务管理上的一些总结

1. 开发任务管理现状&#xff1a; 1&#xff1a;基于禅道进行任务派发&#xff0c;缺少任务统计&#xff0c;进度上只能以“来不及”、“进度正常”、“进度延后”等模糊字眼。 2&#xff1a;“感觉”工作效率不高了&#xff0c;工作量是否饱和&#xff0c;任务投入产出偏差多…

桥梁模板人工费多少钱?

桥梁模板是桥梁工程中不可或缺的一部分&#xff0c;它起到支撑和固定混凝土浇筑的作用。在桥梁建设中&#xff0c;模板人工费用是一个重要的成本因素。那么&#xff0c;桥梁模板人工费到底是多少呢&#xff1f;下面我们来详细了解一下。 首先&#xff0c;需要明确的是&#xff…

目标检测算法改进系列之Backbone替换为EMO

EMO&#xff1a;结合 Attention 重新思考移动端小模型中的基本模块 近年来&#xff0c;由于存储和计算资源的限制&#xff0c;移动应用的需求不断增加&#xff0c;因此&#xff0c;本文的研究对象是端侧轻量级小模型 (参数量一般在 10M 以下)。在众多小模型的设计中&#xff0…