Rust.cc -

【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.

AI生成摘要 本文介绍了Rust与AI的结合,以及它们各自的特点和发展。Rust在AI领域有广阔的前景,可以用于推理、中间件和训练等方面。文章列举了一些与Rust相关的开源项目。

相关推荐 去reddit讨论

Nicksxs's Blog -

Windows 莫名重启问题解决

之前在 Windows 里用 vmware workstation 搭了个黑裙,然后硬盘直通,硬盘跑着倒还好,但是宿主机 Windows 隔一段时间就会重启,就去搜索了下,发现其实 Windows 里的事件查看器就有点像是 Linux 系统里的 dmesg 或者

AI生成摘要 在Windows系统中,通过事件查看器发现了一条关于系统重启的事件。经过搜索,发现可能是系统在应用更新失败时默认设置的策略是重启。可以通过取消自动重新启动的选项来解决这个问题。

相关推荐 去reddit讨论

又耳笔记 -

用Rust来做以太坊开发3

本系列文章主要是用Rust的ethers-rs来复刻《用Go来做以太坊开发》这本书本的内容,所以本系列文章的标题叫做《用Rust来做以太坊开发》, 算是ethers-rs的快速入门教程, 因为原书写得足够好了,所以本系列更多的只是代码层面的复刻,不会说明太多相关的基础知识。

AI生成摘要 本系列文章使用Rust的ethers-rs复刻了《用Go来做以太坊开发》一书的内容,本文介绍了交易相关的内容,包括查询区块、查询交易、ETH转账、代币转账、监听新区块、创建裸交易和发送裸交易等。通过ethers-rs,以太坊开发变得简单易懂。

相关推荐 去reddit讨论

Tony Bai -

通过实例理解API网关的主要功能特性

本文永久链接 – https://tonybai.com/2023/12/03/understand-api-gateway-main-functional-features-by-example 在当今的技术领域中,“下云”的概念正逐渐抬头,像David Heinemeier Hansson(37signals公司的联合创始人, Ruby on Rails的Creator)就直接将公司所有的业务都从公有云搬迁到了自建的数据中心中。虽说大多数企业不会这么“极端”,但随着企业对云原生架构采用的广泛与深入,不可避免地面临着对云服务的依赖。云服务在过去的几年中被广泛应用于构建灵活、可扩展的应用程序和基础设施,为企业提供了许多便利和创新机会。然而,随着业务规模的增长和数据量的增加,云服务的成本也随之上升。企业开始意识到,对云服务的依赖已经成为一个值得重新评估的议题。云服务的开销可能占据了企业可用的预算的相当大部分。为了保持竞争力并更好地控制成本,企业需要寻找方法来减少对云服务的依赖,寻找更经济的解决方案,同时确保仍能获得所需的性能、安全性和可扩展性。 在这样的背景下,我们的关注点是选择一款适宜的API网关,从主流功能特性的角度来评估候选者的支持。API网关作为现代云原生应用架构中的关键组件,扮演着连接前端应用和后端服务的中间层,负责管理、控制和保护API的访问。它的功能特性对于确保API的安全性、可靠性和可扩展性至关重要。 尽管API网关并不是一个新鲜事物了,但对于那些长期依赖于云供应商的服务的人来说,它似乎变得有些“陌生”。因此,本文旨在帮助我们重新理解API网关的主要特性,并获得对API网关选型的能力,以便在停止使用云供应商服务之前,找到一个合适的替代品^_^。 1. API网关回顾 API网关是现代应用架构中的关键组件之一,它的存在简化了应用程序的架构,并为客户端提供一个单一的访问入口,并进行相关的控制、优化和管理。API网关可以帮助企业实现微服务架构、提高系统的可扩展性和安全性,并提供更好的开发者体验和用户体验。 1.1 API网关的演化 随着互联网的快速发展和企业对API的需求不断增长,API网关作为一种关键的中间层技术逐渐崭露头角并经历了一系列的演进和发展。这里将API网关的演进历史粗略分为以下几个阶段: API网关之前的早期阶段 在互联网发展的早期阶段,大多数应用程序都是以单体应用的形式存在。后来随着应用规模的扩大和业务复杂性的增加,单体应用的架构变得不够灵活和可扩展,面向服务架构(Service-Oriented Architecture,SOA)逐渐兴起,企业开始将应用程序拆分成一组独立的服务。这个时期,每个服务都是独立对外暴露API,客户端也是通过这些API直接访问服务,但这会导致一些安全性、运维和扩展性的问题。之后,企业也开始意识到需要一种中间层来管理和控制这种客户端到服务的通信行为,并确保服务的可靠性和安全性,于是开始有了API网关的概念。 API网关的兴起 早期的API网关,其主要功能就是单纯的路由和转发。API网关将请求从客户端转发到后端服务,并将后端服务的响应返回给客户端。在这个阶段,API网关的功能非常简单,主要用于解决客户端和后端服务之间的通信问题。 API网关的成熟 随着微服务架构的兴起和API应用的不断发展,企业开始将应用程序进一步拆分成更小的、独立部署的微服务。每个对外暴露的微服务都有自己的API,并通过API网关进行统一管理和访问。API网关在微服务架构中的作用变得更加重要,它的功能也逐渐丰富起来了。 在这一阶段,它不仅负责路由和转发请求,API网关还增加了安全和治理的功能,可以满足几个不同领域的微服务需求。比如:API网关可以通过身份认证、授权、访问控制等功能来保护API的安全;通过基于重试、超时、熔断的容错机制等来对API的访问进行治理;通过日志记录、基于指标收集以及Tracing等对API的访问进行观测与监控;支持实时的服务发现等。 API网关(图来自网络) API网关的云原生化 随着云原生技术的发展,如容器化和服务网格(Service Mesh)等,API网关也在不断演进和适应新的环境。在云原生环境中,API网关实现了与容器编排系统(如Kubernetes)和服务网格集成,其自身也可以作为一个云原生服务来部署,以实现更高的可伸缩性、弹性和自动化。同时,新的技术和标准也不断涌现,如GraphQL和gRPC等,API网关也增加了对这些新技术的集成和支持。 1.2 API网关的主要功能特性 从上面的演化历史我们看到:API网关的演进使其从最初简单的请求转发角色,逐渐成为整个API管理和微服务架构中的关键组件。它不仅扮演着API管理层与后端服务层之间的适配器,也是云原生架构中不可或缺的基础设施,使微服务管理更加智能化和自动化。下面是现代API网关承担的主要功能特性,我们后续也会基于这些特性进行示例说明: 请求转发和路由 身份认证和授权 流量控制和限速 高可用与容错处理 监控和可观测性 2. 那些主流的API网关 下面是来自CNCF Landscape中的主流API网关集合(截至2023.11月),图中展示了关于各个网关的一些细节,包括star数量和背后开发的公司或组织: 主流的API网关还有各大公有云提供商的实现,比如:Amazon的API Gateway、Google Cloud的API Gateway以及上图中的Azure API Management等,但它们不在我们选择范围之内;虽然被CNCF收录,但多数API网关受到的关注并不高,超过1k star的不到30%,这些不是很受关注或dev不是那么active的项目也无法在生产环境担当关键角色;而像APISIX、Kong这两个受关注很高的网关,它们是建构在Nginx之上实现的,技术栈与我们不契合;而像EMISSARY INGRESS、Gloo等则是完全云原生化或者说是Kubernetes Native的,无法在无Kubernetes的基于VM或裸金属的环境下部署和运行。 好吧,剩下的只有几个Go实现的API Gateway了,在它们之中,我们选择用Tyk API网关来作为后续API功能演示的示例。 注:这并不代表Tyk API网关就要比其他Go实现的API [...]

AI生成摘要 本文介绍了API网关的主要功能特性,包括请求转发和路由、身份认证和授权、流量控制和限速、高可用和容错处理、监控和可观测性等。以Tyk Gateway为例,详细说明了如何配置和使用API网关的功能特性。文章总结了Tyk Gateway的优点和不足,并提供了相关参考资料。

相关推荐 去reddit讨论

Shadow Walker 松烟阁 -

搜索技巧与 AIGC

内事不决,微信搜一搜; 外事不决,谷歌问一问; 遇事不决,AIGC找一找;

AI生成摘要 这篇文章总结了搜索技巧和工具的重要性。它提到了搜索技术的分类和搜索信息资讯的方法。此外,它还介绍了搜索知识技能和素材文件的地方,以及如何选择适合的知识平台。文章还提到了一些搜索技巧和运用AI工具的方法。总的来说,这篇文章强调了搜索技巧和工具在获取信息和学习方面的重要性。

相关推荐 去reddit讨论

蒲小花的博客 -

什么是 DRM

DRM (英语:Digital rights management,缩写为DRM)是一系列访问控制技术,通常用于控制数字内容和设备在被销售之后的使用过程[3][4][5]。DRM有时也称为拷贝保护、复制控制、技术保护措施等。许多数字出版社和软件厂商都使用了DRM,例如亚马逊、AT&T、AOL、Apple Inc等。它如今一次成为很多公司最为基本的一想服务和要求。而且在音视频,文档,电子书领域都有他的存在。这里自己主要介绍音视频中的 DRM。 如今,电视音乐已经成为我们生活的一部分。如果大家回忆历史的话,我们最初接触这些东西是通过电视,而不是 APP。那个时候大家还流行通过租借 VCD 的形式,来看成龙周星驰的电影。随着数字媒体的兴起,我们可以非常容易的在网上看到最新的电影,这给电影的制作商带来了非常大的利益损失。因此对于非常复制的盗版打击,一直都是这些从事内容提供商一直需要去处理的事情。 DVD论坛的内容扰乱系统是一个早期的DRM系统。它使用简单的加密算法,制作DVD播放器的厂商必须获得授权在产品中实现此技术,然后才能解密并播放DVD中的加密内容。授权条款规定了播放DVD内容的方式,包括输出信号的格式和方式,以保证在电视上播放时视频的加密不受破坏。

AI生成摘要 数字版权管理(DRM)是一种访问控制技术,用于控制数字内容和设备的使用。它通过限制用户交互、编辑、分发和打印内容,阻止截图和添加水印等方式保护内容。DRM的优势包括数据隐私和保护、受控的内容访问、保留收入和所有权,以及版权教育。

相关推荐 去reddit讨论

aneasystone's blog -

在 Kubernetes 中调度 GPU 资源

在人工智能越来越普及的今天,GPU 也变得越来越常见,无论是传统的机器学习和深度学习,还是现在火热的大语言模型和文生图模型,GPU 都是绕不开的话题。最近在工作中遇到一个需求,需要在 Kuber...

AI生成摘要 本文介绍了在Kubernetes中调度和使用GPU资源的方法。首先,作者提到了GPU环境的准备,包括购买共享型GPU实例和安装NVIDIA驱动和CUDA。然后,作者介绍了在Docker容器中使用GPU资源的方法,包括安装nvidia-container-runtime运行时和NVIDIA设备插件。最后,作者讲解了如何在Kubernetes集群中调度GPU资源,并提供了一个示例配置文件。通过这些方法,用户可以在Kubernetes中充分利用GPU资源进行深度学习等任务。

相关推荐 去reddit讨论

卡瓦邦噶! -

四层负载均衡漫谈

对于四层负载均衡,我一直只是作为一个使用者,把它当作一个简单 TCP 层的反向代理来使用。但是随着在项目中使用 […]Continue reading...

AI生成摘要 本文介绍了四层负载均衡的转发技术和应用,包括VIP配置、DNAT和DSR模式、Nginx Stream、LVS、XDP和DPVS等。其中,DPVS使用DPDK实现User Space转发,性能较高。最后讨论了one-arm和two-arm的概念。

相关推荐 去reddit讨论

蒲小花的博客 -

Typesctip unknown vs any

Typescript 如今已经成为非常火的开发语言,很多公司都将它作为首要的项目搭配。自己也是在使用中,发现了国外工程师非常严苛的要求用对 unknown 和 any。 unknown 类型,顾名思义:任何值都可以分配给unknown类型,但如果没有类型断言,unknown则不能分配给除自身和any类型之外的任何值。unknown同样,如果没有首先断言或将其限制为更精确的类型,则不允许对类型设置为 as 的值进行任何操作。 any 则是当变量的类型未知或变量的类型尚未定义时使用的泛型类型 其实我们看一段代码就很好理解了: let vAny: any = 10; // We can assign anything to any let vUnknown: unknown = 10; // We can assign anything to unknown just like any let s1: string = vAny; // Any

AI生成摘要 Typescript是一种非常流行的开发语言,许多公司都将其作为首选项目。工程师对于unknown和any类型有严格的要求。unknown类型可以分配给任何值,但不能分配给除自身和any类型之外的其他值。any类型是在变量类型未知或未定义时使用的泛型类型。

相关推荐 去reddit讨论

鸟窝 -

2023年 Go 并发库的变化综述

2023年来, Go的并发库又有了一些变化,这篇文章是对这些变换的综述。小细节的变化,比如typo、文档变化等无关大局的变化就不介绍了。

AI生成摘要 2023年,Go的并发库有了一些变化。新增了三个函数,方便使用sync.Once。还对sync.Cond的copyChecker进行了优化。sync.Map的Range函数也进行了优化。sync.Once的实现中,done字段使用atomic.Uint32替换。对于sync.OnceFunc的初始实现进行了优化。新增了一些与超时相关的Context函数。还有关于Go实现协程的讨论。

相关推荐 去reddit讨论

热榜 Top10
...
Dify.AI
...
eolink
...
LigaAI
...
天勤数据
...
ShowMeBug
...
白鲸技术栈
...
观测云
推荐或自荐