又一神器开源!无需服务器支持!打通手机,浏览器的Web LLM!

news/2024/11/7 21:26:23/

大家好,我是千与千寻,大家可以叫我“千寻哥”,之前和大家分享了两篇关于ChatGPT的技术文章,ChatGPT毫无疑问是现在最大的风口,各个行业都在集成ChatGPT的API接口以及各类的应用插件,这么多人的应用,那么肯定就需要保证ChatGPT模型的高可用性,轻量化,以及各个平台之间的“通用性”。但是这几点商用价值的核心,哪有那么容易满足,是啊,不过没关系,今天它来了,由来自CMU Catalyst、UW SAMPL、SJTU、OctoML 和 MLC 社区的成员发起的web LLM项目!

跟大家分享这一神器web LLM与传统的ChatGPT的直接区别在于打破了windows与Linux客户端、手机安卓端与电脑浏览器之间的三个平台的生态区域限制,最重要的亮点是无需厚重的服务器以及GPU显卡来加速模型的运行与训练。

既然说web LLM的轻量化模型打通了web端,安卓手机端,以及windows与Linux系统的三个生态区,看看 web LLM的轻量化模型到底是怎么工作的。

Web端部署应用

它采用了与ChatGPT远程调用模型API接口不同的,将GPT模型加载直接加载到浏览器端,并使用WebGPU进行加速。

下面是这个项目的网址:

https://mlc.ai/web-llm/

我们都知道像ChatGPT这类的自然语言生成大模型他们存在一个共性问题,就是他们需要非常强大的算力以及性能高涨的服务器来支撑他们进行模型推理,而这款开源神器可以将我们的神经网络模型直接部署到浏览器。

用户进行询问消息的时候,浏览器进行提前加载,相当于将浏览器封装成了带有语言模型的客户端。我们在客户端阶段即可以实现模型由浏览器转换一个完整的客户端来实现进程对话。

实践过程:

需要准备最新版的Google Chrome,最好是Google Chrome Canary,在这里多提一句,普通的Google Chrome与Google Chrome Canary之间的区别在于Canary版本是谷歌浏览器的开发版,而我们常用的谷歌浏览器是稳定版。

简单理解Google Chrome Canary,拥有谷歌浏览器的更多性能,它的反应速度更快,性能更高,但同时它的不稳定性以及不确定性也会更高,而我们常用的谷歌浏览器,它的稳定性会更高,要把大模型加载到我们的这个浏览器里,因此使用开发版本的性能会更高一些,同时开发版本也开放了更多的功能参数调节接口,使得我们可以调整更合适的内置参数来优化我们的模型更能体现,那我们废话不多说,
直接上对话级的Demo演示。

1.激活模型加载流程,进行浏览器的模型加载

2.向web LLM的模型进行提问:“写一个快速排序的算法Python代码”

可以看到模型回复的效果还是不错的。其实web LLM的性能真的还不止如此,ChatGPT模型是文字型的模型,暂时不支持生成图片,不过这个轻量化模型却可以!接着往下看,哈哈哈

3.Web Stable Diffusion生成你想要生成的自定义图片,如图为“宇航员在火星是上骑白马”描述的图片生成。

4.其功能为根据用户的文字描述,生成定制化的图片,进行定制化图片的生成,学习需要设定以下的参数组合。

Input prompt:定制化图片的生成文本描述

Negative prompt (optional): 否定描述(相当于指定不能生成什么样,一般可以选择直接不填写)

Select scheduler :选择生成的步骤执行器,默认20步生成即可

Render intermediate steps : 是否显示图像的生成步骤,同样电脑的内存较小的,直接设置为“No”。但是我可以帮你演示一下具体的图片生成演示过程。

生成进度7/20

生成进度18/20

生成进度20/20

WebGPU 规范确实已经提供了 FP16 支持,但目前的实现还不支持此功能。运行该演示的内存消耗约为 7GB。

对于只有 8GB 内存的 Apple silicon Mac,生成图像可能需要更长的时间(几分钟)。

windows的PC端部署应用

不仅仅是手机端的项目在windows以及linux系统上依然可以使用LLM部署于PC端,如图为在MAC电脑上通过Anaconda进行环境搭建以及应用部署的命令行代码。

# Create a new conda environment and activate the environment.
conda create -n mlc-chat
conda activate mlc-chat# Install Git and Git-LFS, which is used for downloading the model weights
# from Hugging Face.
conda install git git-lfs# Install the chat CLI app from Conda.
conda install -c mlc-ai -c conda-forge mlc-chat-nightly# Create a directory, download the model weights from HuggingFace, and download the binary libraries
# from GitHub.
mkdir -p dist
git lfs install
git clone https://huggingface.co/mlc-ai/demo-vicuna-v1-7b-int3 dist/vicuna-v1-7b
git clone https://github.com/mlc-ai/binary-mlc-llm-libs.git dist/lib# Enter this line and enjoy chatting with the bot running natively on your machine!
mlc_chat_cli

在Mac电脑的终端运行Web LLM的对话程序,如下图所示

手机移动端Web LLM的应用部署

将Web LLM的模型部署于手机端的效果,如下图所示,
下载 APK 文件并安装到您的手机上。然后您可以开始与 LLM 聊天。当您第一次打开应用程序时,需要下载参数并且加载过程可能会很慢。

在以后的运行中,参数将从缓存中加载(速度很快),您可以离线使用该应用程序。我们目前的演示依赖于手机上的 OpenCL 支持并占用大约 6GB 的内存

相信大家可能有点好奇想要自己动手试试了,安排!以下是两个APK的地址链接,以下为MLCChat软件的图标以及安装存储容量

APK软件的下载的链接:

https://github.com/mlc-ai/binary-mlc-llm-libs/raw/main/mlc-chat.apk

总结一下吧,MLC LLM的部署包含了前端以及后端的架构设计,将模型部署下载到浏览器端,手机端进行内嵌完成,以下为MLC LLM的完整设计图:

怎么样,是不是很简单呢,那就赶快试试吧!
我是千与千寻,一个只讲干活的码农~我们下期见!


http://www.ppmy.cn/news/85252.html

相关文章

第一章.The Learning Problem

第一章.The Learning Problem 1.1 The Learning Problem 1.机器学习的概念: 机器学习就是机器从数据中总结经验。从数据中找出某种规律或者模型,并用他来解决某种实际问题。 2.机器学习的应用场景 1).事物本身存在某种潜在规律 2).某些问题难以使用普…

Elastic Stack

一、简介 ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn。包含三大基础组件,分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据搜索、分析和收集的场景&#…

Android 之MPAndroidChart图表案例

一 简介 1.1 图表用于直观的分析数据的分布情况,用于对比数据的大小和趋势。 1.2 图表的类型也非常多,常见的有折线,柱状,饼状,其它的有面积,散点,股价,雷达,仪表盘&am…

6. 实现简单的线程池

本文以营业厅为例子,实现简单的线程池 一、线程池介绍 现在的企业客户端数以百万,如果某一时刻同时向服务器发消息,那么服务器要处理这些消息是同时开百万个线程吗??当然不行!! 根据posix标准&…

AWS VPC 配置指南:快速创建和设置你的虚拟私有云

文章目录 一、前言二、创建 VPC2.1 进入 AWS VPC 服务2.2 创建 VPC2.3 选择所要创建的 VPC 资源2.4 输入 VPC 名称2.5 设置 IPv4 CIDR block(IPv4 CIDR 块)2.6 选择可用区2.7 选择公有子网的数量2.8 设置 NAT 网关和 VPC 终端节点2.9 完成创建 VPC2.10 查…

消息中间件 - RabbitMQ篇之入门及进阶

这里写自定义目录标题 一. RabbitMQ简介1.1. 消息中间件1.1.1.什么是消息中间件1.1.2.消息中间件的传递模式1. 1.2.1 点对点1. 1.2.2 发布订阅模式 1.1.3 消息中间件种类1.1.4 消息中间件的作用 2. RabbitMQ介绍2.1.RabbitMQ的起源2.2.RabbitMQ的安装及简单使用 3. RabbitMQ的简…

Java原来是值传递?

先说结论,Java就是值传递。 01 在Java中,所有的参数都是按值传递的,即方法得到的是所有参数值的一个副本,而不是原始参数。当我们将一个对象的引用作为参数传递给一个方法时,实际上传递的是该对象的引用的副本。 下…

python 读写 json,csv,txt,docx,xlsx,xls文件大全

目录 前言一、读写json1.1 读1.2 写1.2.1 list类型写入1.2.2 dict类型写入 二、读写csv2.1 读2.2 写2.2.1 list类型写入2.2.2 dict类型写入 三、读写txt3.1 读3.2 写按行写入(手动添加换行符\n)按行写入(python添加换行符\n)3.2.1…