【Rust与AI】概览和方向

本系列主要介绍Rust与AI的那些天作之合(开源项目),我们会以开源项目代码阅读的方式推进,以Rust为主,同时科普AI相关知识,目的是让更多非算法、非Rust的程序员进一步学习Rust和AI相关知识。当然,很显然地,我们也希望Rust程序员和AI算法工程师能从中有所收获。前者可以关注AI算法的设计和优化,后者可以关注Rust如何助力AI算法。

本篇是系列第一篇,主要介绍Rust和AI各自的特点与发展近况,以及它俩的遇见会碰撞出怎样的火花。我们热爱AI,我们喜欢Rust语言,仅此而已。

当前发展

AI与LLM

随着ChatGPT的发展浪潮,AI又一次迎来了发展良机,很多应用、服务都在基于大模型重新设计。同时,由于大模型的超能力,应用的开发门槛进一步下降,一些新的创意产品在不断涌现。总的来说,在AI应用领域呈现出了一片欣欣向荣、百家争鸣的景象。

这一切的背后是ChatGPT为代表的大语言模型(后面以LLM代替),LLM以序列方式根据给定上下文生成文本,它对上下文的精准理解能力和基于此的生成能力都令人赞叹。作为一名从业多年的自然语言处理(后面以NLP代替)工程师,可以负责任地说,LLM的能力确实远超此前的语言模型,尤其是理解方面。

LLM的最大特点是大,这里的大是指参数量非常多。也就是说,无论是加载还是运行这样一个模型,都需要消耗比较多的资源。要想让模型执行的快,性能就成了绕不开的坎。

参数其实就是很多很多的数字,一般来说都是FP32的浮点数,但浮点数可以通过量化降低到FP16、BF16或Int,量化后内存的占用明显是降低了的,一般也会同时带来执行速度的提升。

抛开语言、模型架构和量化先不谈,要加速执行很多数字的运算,一般我们可以想到的最容易的解决方案大概就是并行。没错,并行是当前LLM甚至深度学习最通用的方案,典型代表就是使用类似GPU、TPU这样的专用设备来加速。当然,即使没有这些设备,普通CPU甚至移动端的CPU都可以利用数据级并行、指令级并行、线程级并行等方案来加速。除了并行,还可以优化存储层次和传输,进一步提升性能。

上面提到这些优化方案都和计算机底层有关,一般来说都需要用到C语言或C++编程,现在我们有了新的选择——Rust。其实,这个“现在”应该可以再提前个几年,毕竟Rust在AI领域默默发力已经有些时日了。C语言和C++都是非常强大的语言,不过相较而言,Rust在某些方面表现的更好。

Rust

Rust的来龙去脉我们就不赘述了,就凭“在StackOverflow年度开发者调查报告中连续几年获得最受欢迎编程语言”这一点就值得我们去认真学习一下。关于Rust语言的“好”这里也不多赘述,仅从个人角度谈几点自己的感觉。

首先,Rust代码只要编译通过,运行一般不会出问题。虽然一开始与编译器作斗争这件事可能让人抓狂,但比起用gdb去分析dump应该要好上很多吧。而且,编译器的提示越来越友好,作斗争的过程其实是个不断学习相关知识的过程,这种所见所得的及时反馈应该也是极其理想的学习方式吧。

其次,语法更加清晰。个人比较倾向于在编程时显式地指定数据类型和范围,比如i8表示8位有符号整数,这样一方面强迫自己理解代码(而不是默认一个int64),另一方面也方便日后自己或他人阅读。这点可能是之前从Python开始入门编程项目导致的。另外,它对错误的处理方式个人比较认同和喜欢,这都是代码清晰的表现。

第三,设计更加合理。Struct和Trait以及其相关的设计深得个人喜爱,还有生命周期。和很多人不一样的是,个人比较喜欢生命周期的设计思想,可能也是源于喜欢“显式”吧。

第四,代码更加优雅。控制分支中的match是个人最爱,还有模板、函数式编程、闭包,以及链式调用,代码看起来让人赏心悦目。

……

此外还有优雅的并发操作,测试的组织,文档的集成,等等都让人欲罢不能。唯一要吐槽的可能是智能指针相关的内容,的确有些复杂。不过瑕不掩瑜,总的来说,Rust值得任何一个热爱编程的程序员去尝试。

双剑合璧

其实用到C++的地方都可以用Rust再写一遍,简单来说,和底层相关的代码都可以Rust掉,AI方面也不例外。接下来,我们就谈谈Rust和AI可以合璧的地方。

推理

首先是推理。这个方向是最自然、最值得关注的方向,尤其是端侧。Server端由于GPU的广泛应用,导致现在CUDA+C/CPP几乎成了垄断。不过随着Rust加入Linux内核,以及Huggingface的大量使用,当然也有Rust自己在GPU领域的不断推动,我们相信Rust在Server端也会有一席之地。

端侧,尤其是以RISC-V为基础架构的智能终端是Rust一直以来深耕的领域。更令人振奋的是前不久Vivo发布的用Rust全新构建的BlueOS,主打的就是新一代AI操作系统。我们相信Rust在智能终端有着非常广阔的前景。

前面已经提到了LLM时代的特点是模型很大,推理很慢,需要性能提升。而且随着LLM的进一步发展,性能必定会变得更加重要,Rust由于其优秀的语言特性,正好接到这一棒。我们笃信Rust+AI大模型是最适合的搭档组合。

中间件

再下来是中间件。准确来说是和AI大模型相关的中间件,首当其冲的是向量检索相关库,这就不得不提大名鼎鼎的Qdrant了,性能优秀,而且非常容易使用。顺带提一下对标全文检索框架ElasticSearch的melisearch,经过多年的发展已经是比较成熟的框架了,这个领域还有很多其他框架,比如tantivy、Toshi、lnx、websurfx等。

另外值得一提的是将全文检索、语义检索融合到SQL搜索的paradedb,这个项目的设计思路可以给我们很多启发。此外还有处理表格的polars、可视化pipeline的vector、文档图数据库surrealdb、时序数据库ceresdb等等。当下火热的Agent也不是没有,比如smartgpt。

这块范围其实是非常广泛的,除了基础组件,可以想象的内容还很多,比如记忆模块、任务调度、资源池、任务定义、流程设计等等。这些组件几乎都是围绕着LLM使用的,我们相信LLM带来的远不止这些,而且随着应用层的不断丰富和发展,还会衍生出更多的需求。

训练

最后说一下训练。Rust开始做推理,自然有人把它放到训练侧,不过目前看起来这块还处于尝试和起步阶段。我们比较看好它在相对稳定的工程领域使用,但不看好在算法领域的普及。

对于前者,无论哪种语言,一般都会提供简单易用的API或命令行,使用者大多数时候只需要根据要求准备好数据即可进行训练。但对于后者,经常需要涉及底层算法架构的调整和修改,甚至需要新加入或去掉一些模块,这方面Python实在是具备绝对优势,而且平心而论,PyTorch做这些操作相对是比较方便的。Torch一开始也是lua写的,不温不火,后面加了Python后,慢慢打败了Caffe、TensorFlow,现在稳坐第一把交椅。Rust要向当年的Torch一样吗,可是这样在Python侧的区别在哪里?接口上大概率还是和现在的PyTorch接近,就像transformers库流行后,PaddleNLP、ModelScope的接口不能说和其很像,大概只能说一样了。对使用者来说,迁移是没必要的,除非不得不这样做,比如在端侧训练,也许对Rust来说是一个不错的方向。

其他

前面说的是正向的,这里简单谈一下可能面临的冲击。

首先依然是C和C++,它们当下是主流,谁能说未来不能继续是主流呢,而且对使用者来说,反正上面是方便的Python,谁会管下面怎么实现的。

再就是其他新语言,比如专为AI而生的Mojo,它的定位是Python的易用性+C语言的性能。虽然Mojo目前还处于极其早期阶段,但这至少是个苗头:在AI主导的未来,指不定会有更AI的语言设计出来。那会不会有专门为大模型设计的语言呢?

不过,总的来说,我们先关注Rust吧。

开源项目

下面我们列举一些Rust相关的AI项目,囿于笔者知识范围,所列内容不一定全面,如果读者有更好的开源项目推荐,尤其是大模型相关的,欢迎随时推荐。这些资源也是系列后续阅读的项目。

LLM推理

  • rustformers/llm: An ecosystem of Rust libraries for working with large language models

  • Noeda/rllama: Rust+OpenCL+AVX2 implementation of LLaMA inference code

  • srush/llama2.rs: A fast llama2 decoder in pure Rust.

  • leo-du/llama2.rs: Inference Llama 2 in one file of zero-dependency, zero-unsafe Rust

  • gaxler/llama2.rs: Inference Llama 2 in one file of pure Rust 🦀

  • huggingface/text-generation-inference: Large Language Model Text Generation Inference

Agent

  • Cormanz/smartgpt: A program that provides LLMs with the ability to complete complex tasks using plugins.

NLP

  • huggingface/tokenizers: 💥 Fast State-of-the-Art Tokenizers optimized for Research and Production

  • guillaume-be/rust-bert: Rust native ready-to-use NLP pipelines and transformer-based models (BERT, DistilBERT, GPT2,...)

图像

  • LaurentMazare/diffusers-rs: An implementation of the diffusers api in Rust

  • twistedfall/opencv-rust: Rust bindings for OpenCV 3 & 4

Code

  • huggingface/llm-ls: LSP server leveraging LLMs for code completion (and more?)

Framework

  • huggingface/candle: Minimalist ML framework for Rust

  • coreylowman/dfdx: Deep learning in Rust, with shape checked tensors and neural networks

  • tracel-ai/burn: Burn is a new comprehensive dynamic Deep Learning Framework built using Rust with extreme flexibility, compute efficiency and portability as its primary goals.

  • spearow/juice: The Hacker's Machine Learning Engine

  • rust-ml/linfa: A Rust machine learning framework.

  • tensorflow/rust: Rust language bindings for TensorFlow

  • sonos/tract: Tiny, no-nonsense, self-contained, Tensorflow and ONNX inference

  • smartcorelib/smartcore: A comprehensive library for machine learning and numerical computing. The library provides a set of tools for linear algebra, numerical computing, optimization, and enables a generic, powerful yet still efficient approach to machine learning.

  • neuronika/neuronika: Tensors and dynamic neural networks in pure Rust.

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

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

相关文章

【Python】 pip 常用命令及相关作用和使用场景

pip是Python的包管理工具,它允许开发者安装、升级和管理Python软件包。以下是一些常用的pip命令: 1. **列出已安装的包**: pip list 或者 pip freeze 2. **安装包**: pip install [package-name]…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore10、分支基础应用1、本地文件提交到远程仓库 Git:一个开源的分布式版本控制系统,它可以在本地和…

AIGC创作ChatGPT源码+AI绘画(Midjourney绘画)+支持GPT-4-Turbo模型+DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

嵌入式硬件和软件哪个好?

嵌入式硬件和软件哪个好? 嵌入式软硬件工程师哪个更有前途呢?一起来看看。 嵌入式是分为软硬件工程师的,首先我们先来看看嵌入式硬件工程师吧! 嵌入式硬件开发工程师主要编写嵌入式系统硬件总体方案和详细方案,要求理解嵌入式系统架构,有一…

智能优化算法应用:基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.世界杯算法4.实验参数设定5.算法结果6.参考文献7.…

java学习part36set

157-集合框架-Set不同实现类的对比及Set无序性、不可重复性的剖析_哔哩哔哩_bilibili 1.Set 加入集合的时候会先调用重写的hash方法计算hash值,不一样就加入。 如果hash一样且equals也是true就是重复 ,调equals是为了保险,保证排除hash碰撞…

MySQL数据误删除恢复

1.1 问题简述 开发反馈误删除了部分业务数据,需要恢复数据。 这里采用binlog2sql工具进行数据回滚。 1.2 环境 CentOS Linux release 7.4.1708 (Core) mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL) 1.3 数据库开启binlog 因为数据库serve…

Windows环境下RocketMQ的安装及配置

目录 1.环境准备2.下载RocketMQ3.配置RocketMQ环境变量4.启动RecoketMQ4.1启动 name server4.2 启动 broker 5、启动报错问题解决5.1 java_HOME变量找不到5.2 启动闪退问题 1.环境准备 JDK和Maven需要先安装好。 RocketMQ是用Java语言写的,所以需要JDK的支持。 后面…

Mac电脑vm虚拟机 VMware Fusion Pro中文 for mac

VMware Fusion Pro是一款功能强大的虚拟机软件,适用于需要在Mac电脑上运行其他操作系统的用户。它具有广泛的支持、快速稳定的特点以及多种高级功能,可以满足用户的各种需求和场景。 多操作系统支持:VMware Fusion Pro允许在Mac电脑上运行多…

Wireshark中的TCP协议包分析

Wireshark可以跟踪网络协议的通讯过程,本节通过TCP协议,在了解Wireshark使用的基础上,重温TCP协议的通讯过程。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传…

人工智能-机器翻译:技术发展与代码实战

在本文中,我们深入探讨了机器翻译的历史、核心技术、特别是神经机器翻译(NMT)的发展,分析了模型的优化、挑战及其在不同领域的应用案例。同时,我们还提出了对未来机器翻译技术发展的展望和潜在的社会影响。 关注TechLe…

Shopee买家通系统自动下单更方便

Shopee购物平台的买家通系统为用户提供了一种便捷的自动下单方式,通过这一系统,用户可以轻松实现在虾皮平台购买商品的自动化操作。下面将介绍具体的操作流程,确保用户可以顺利完成整个购物流程。 首先,用户需要准备一个可用的虾皮…

Leetcode—205.同构字符串【简单】

2023每日刷题&#xff08;五十&#xff09; Leetcode—205.同构字符串 算法思想 参考自k神思路 实现代码 class Solution { public:unordered_map<char, char> s2t, t2s;bool isIsomorphic(string s, string t) {int n s.size();for(int i 0; i < n; i) {char …

TCP/IP五层(或四层)模型,IP和TCP到底在哪层?

文章目录 前言一、应用层二.传输层三.网络层&#xff1a;四.数据链路层五.物理层&#xff1a;六.OSI七层模型&#xff1a;1.物理层&#xff08;Physical Layer&#xff09;&#xff1a;2.数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;3.网络层&#xff08;Ne…

Django宠物之家平台

摘 要 随着互联网的快速发展&#xff0c;利用网络的管理系统也逐渐发展起来。在线管理模式快速融入了众多用户的眼球&#xff0c;从而产生了各种各样的平台管理系统。 关于本django宠物的家庭平台管理系统的设计来说&#xff0c;系统开发主要采纳Python技术、B/S框架&#xff…

四川云汇优想:抖音直播等级怎么升级?

抖音直播&#xff0c;作为当前最热门的社交平台之一&#xff0c;其等级体系一直备受用户关注。如何在抖音直播中迅速提升等级&#xff0c;成为众多用户探讨的话题。在这篇文章中&#xff0c;我们将深入探讨抖音直播等级的升级机制、好处以及一些实用的技巧&#xff0c;助你在抖…

简单介绍Docker

Docker 是一种应用容器化技术&#xff0c;它通过将应用程序及其依赖项打包到容器中&#xff0c;在不同的操作系统和平台上实现了可移植性和跨平台性。 Docker 的基本构成包括镜像&#xff0c;容器和仓库。 镜像是应用程序及其依赖项的打包文件&#xff0c;类似于虚拟机中的镜像…

拼多多市值大于淘宝

一分钟速览新闻点&#xff01; 拼多多市值一夜大涨 2000 亿&#xff0c;市值逼近阿里 华为推出员工转岗新公司补偿方案&#xff0c;已邀请 4 家智选车伙伴入股 雷军个人向武大捐赠 13 亿元现金&#xff0c;创全国高校单笔个人现金捐赠纪录 阿里云北上深等地访问异常&#xf…

融云 CEO 董晗获评甲子光年「2023 中国数字经济创新人物」

&#xff08;全网都在找的《社交泛娱乐出海作战地图》&#xff0c;点击获取&#x1f446;&#xff09; 11 月 30 日-12 月 1 日&#xff0c;甲子光年“甲子引力年终盛典”在北京举办&#xff0c;以“致追风赶月的你”为主题&#xff0c;深刻回顾了 2023 年国内外的科技发展历程…

疑难杂症 之 关闭模态窗口之后刷新父窗口

疑难杂症 之 关闭模态窗口之后刷新父窗口 1. 模态窗口 与 非模态窗口2. 弹出模态窗口2.1 实现效果2.2 实现代码2.2.1 刷新父窗口2.2.2 完整代码 2.3 参考 3. 其他刷新父窗口&#xff08;模态窗口页面与父窗口不在同一页面&#xff09;3.1 实现代码3.1.1 核心代码3.1.2 多层模态…