网页也能跑大模型?看这一篇就够了

写在最前

本故事主要介绍在网页上部署模型的来龙去脉,你想问的问题,可能都可以在这里找到答案

在这个 AI 内容生成泛滥的时代,依然有一批人"傻傻"坚持原创,如果您能读到最后,还请点赞或收藏或关注支持下我呗,感谢 ( ̄︶ ̄)↗

能在网页上跑模型吗?

丹尼尔:嘿,蛋兄,你这是要去哪儿遛弯呢?

蛋先生:刚吃完饭,准备散下步消消食

丹尼尔:一起呗。蛋兄,我最近对 AI 有点着迷,突然冒出个念头,你说咱们能不能在网页上跑机器学习模型呢?

蛋先生:这个嘛,确实可以

为什么可以在网页上跑模型?

丹尼尔:这我就纳闷了,一个专门看网页的浏览器,怎么还能“兼职”跑模型呢?蛋兄,快给我讲讲呗

蛋先生:你想啊,一颗种子能不能发芽,得看它有没有适合生存的环境。模型也一样,得有个能跑的“土壤”——runtime,还得有足够的“阳光”和“水”——也就是算力和存储

丹尼尔:哦,我好像有点懂了。但我还是不明白,浏览器是怎么做到这一点的

蛋先生:自从浏览器有了 WebAssembly 之后,它的“胃口”可就大了去了!现在,很多用 C、C++、Rust 等编程语言写的应用,都能编译成 WASM 格式,在浏览器里跑。这样一来,浏览器就能处理更加复杂的计算任务了

丹尼尔:原来如此!也就是说,原来用 C++ 等写的模型 runtime,现在可以直接放进浏览器里,成了模型的“土壤”了!

蛋先生:对头!而且,浏览器的 WebGL、WebGPU 这些技术,还能让你的应用用上 GPU 资源,速度更上一层楼!否则,能跑,但很慢,也没啥意义

丹尼尔:哈哈,我总结一下啊,WebAssembly 让模型有了土壤,WebGL、WebGPU 让算力提升成为可能!

蛋先生:不错不错,总结得挺到位!

为什么要跑在浏览器呢?

蛋先生:那我问你,你为什么想把模型跑在浏览器上呢?

丹尼尔:额~,这~,就觉得挺酷的嘛!不过说实话,我还真没认真想过这个问题。蛋兄,你给说道说道?

蛋先生:来,咱们从请求链路说起。模型部署在浏览器上,是不是就不用请求服务器了?

在这里插入图片描述

丹尼尔:那是肯定的

蛋先生:对于客户端,请求没有离开用户设备,这样是不是就可以更好地保护用户隐私了?

丹尼尔:是哦

蛋先生:计算是在浏览器本地进行的,距离用户更近,也没有网络请求的损耗,响应速度通常更快,这样是不是就可以提升用户体验了?

丹尼尔:是哦

蛋先生:还有,模型已经部署在浏览器了,只要应用本身支持离线访问,那是不是就可以离线使用了?

丹尼尔:是哦

蛋先生:对于服务端,因为把计算压力分摊出去了,是不是就可以减轻服务器的计算压力,降低运营成本呢?

丹尼尔:是哦

蛋先生:剩下的你自己琢磨琢磨吧

怎么跑在浏览器呢?

丹尼尔:好嘞,那具体要怎么实现呢?

蛋先生:主流的机器学习框架除了训练模型外,还能部署和推理模型。比如大名鼎鼎的 Tensorflow 就有 tensorflow.js,它可以将模型部署在浏览器端。不过今天我要给你说的是 onnxruntime-web

丹尼尔:onnxruntime-web?这名字听着有点新鲜啊!

蛋先生:onnxruntime-web,可以把这个拆成 onnx,onnxruntime 和 onnxruntime-web 来说

丹尼尔:您继续

蛋先生:onnx 就是个模型格式,就像你存音乐用的 mp3 格式一样,但它存的是机器学习模型;onnxruntime 呢,就是运行这些模型的“播放器”;而 onnxruntime-web,则是让这个“播放器”能在网页上跑起来的神奇工具

丹尼尔:哦,那模型都有哪些格式呢?用这个 onnx 有什么优势呢?

蛋先生:正所谓合久必分,分久必合

丹尼尔:这是要讲三国的节奏吗

蛋先生:各个机器学习框架都有自己的模型格式,在没有 onnx 之前,你得用 tf 来部署 tensorflow 的模型,用 pytorch 来部署 pytorch 的模型。可用户只想部署个模型而已,能不能把问题简单化呢?
在这里插入图片描述

丹尼尔:确实

蛋先生:于是就有了 onnx 这个开放标准。各家的模型格式都能转换成这种标准格式,然后你就可以用一个 onnxruntime 来部署和推理模型了!
在这里插入图片描述

丹尼尔:那这个 onnxruntime 是用什么实现的呢?

蛋先生:它是用 C++ 实现的,在浏览器运行时会被编译成 WASM 格式。然后 onnxruntime-web 提供了 JS API 来与 WASM 进行交互

丹尼尔:原来如此!那快给我看个代码示例吧,我都迫不及待了

蛋先生:以下是一个数字图像识别的简单例子,不过接口有点底层哦,你得懂点 tensor 之类的。希望以后有第三方库能封装个高级的接口,比如手写数字识别输入是图片,输出是数字;生成式 AI 输入是 prompt,输出是回答之类的。当然你也可以自己尝试尝试
在这里插入图片描述

<!DOCTYPE html>
<html lang="en"><head>...<script src="https://cdn.jsdelivr.net/npm/onnxruntime-web/dist/ort.min.js"></script>...</head><body>...<canvas id="canvas" width="28" height="28" style="display: none"></canvas><script>let imageData;...async function runModel() {// 提取图像数据并规范化为模型的输入格式const input = new Float32Array(28 * 28);for (let i = 0; i < input.length; i++) {const r = imageData.data[i * 4];const g = imageData.data[i * 4 + 1];const b = imageData.data[i * 4 + 2];const gray = 0.299 * r + 0.587 * g + 0.114 * b; // 转换为灰度值input[i] = gray / 255.0; // 规范化到 0~1}const inputTensor = new ort.Tensor("float32", input, [1, 1, 28, 28]);// 使用 mnist-12.onnx 模型创建推理会话const session = await ort.InferenceSession.create("https://media.githubusercontent.com/media/onnx/models/refs/heads/main/validated/vision/classification/mnist/model/mnist-12.onnx");// 推理const results = await session.run({ Input3: inputTensor });const output = results.Plus214_Output_0.data;// 找到最大值(概率最大)的索引,即预测的数字const predictedDigit = output.indexOf(Math.max(...output));// 显示结果document.getElementById("output").innerText = predictedDigit;}...</script></body>
</html>

有什么限制?

丹尼尔:除了数字识别,还能玩点儿别的花样不?

蛋先生:那当然咯!语音识别、图像分类、对象检测,甚至生成式 AI,都不在话下!

丹尼尔:哇塞,连大语言模型都能搞定?

蛋先生:不过在浏览器上运行有些小小的限制

丹尼尔:让我来猜猜,是不是模型的大小有限制?

蛋先生:对头

丹尼尔:具体能多大呢?

蛋先生:首先我们得加载远程模型

各大浏览器对 ArrayBuffer 的大小都是有限制的,比如 Chrome 就是2G。当你用 fetch 去加载模型时,需要用到 response.arrayBuffer(),如果模型超过2G,就 GG 了

还有啊,ONNX 模型是通过 protobuf 格式进行传输的,protobuf 单个消息的大小限制也刚好是 2G

丹尼尔:所以最多只能加载2G的模型了?

蛋先生:那也不完全是。一次不行,我们可以分次嘛!我们可以将模型分成模型图和权重,权重信息作为外部数据另外加载即可。只要模型图不超过2G,咱就可以突破这2G的限制了

丹尼尔:那岂不是可以加载超级大的模型了?

蛋先生:嘿嘿,别高兴得太早。模型最终是要加载到运行时环境的,而我们的运行时是在 WebAssembly 环境中。根据 WebAssembly 规范,Memory 对象的大小顶多4G。所以理论上4G就是天花板了

丹尼尔:哦……

蛋先生:而且啊,当模型太大时,对硬件的要求就更高了。这些大家伙就不推荐放在浏览器里折腾了

丹尼尔:明白了,那我去试一下咯

蛋先生:好的,祝你好运!

如何学习AI大模型 ?

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

😝有需要的小伙伴,可以VX扫描下方二维码免费领取🆓

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

在这里插入图片描述
在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型落地应用案例PPT👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
img

在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

在这里插入图片描述
👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

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

相关文章

ChatGPT写论文全流程揭秘:从构思到成稿!

撰写高质量的学术论文是一项复杂且耗时的任务&#xff0c;涵盖从构思到研究、撰写及最终修改的每一个步骤&#xff0c;每一步都需要大量的时间和精力。然而&#xff0c;借助ChatGPT这样的工具&#xff0c;可以有效辅助论文写作的各个阶段&#xff0c;从而提升效率和确保论文的学…

在不支持WSL2的Windows环境下安装Redis并添加环境变量的方法

如果系统版本支持 WSL 2 可跳过本教程。使用官网提供的教程即可 官网教程 查看是否支持 WSL 2 如果不支持或者觉得麻烦可以按照下面的方式安装 下载 点击打开下载地址 下载 zip 文件即可 安装 将下载的 zip 文件解压到自己想要解压的地方即可。&#xff08;注意&#x…

E37.【C语言】动态内存管理练习题

1. 求下列代码的执行结果 #include <stdio.h> char* GetMemory(void) {char p[] "hello world";return p; }void Test(void) {char* str NULL;str GetMemory();printf(str); }int main() {Test();return 0; } 答案速查 乱码 分别是x86debug和x64debug下…

业务封装与映射 -- OTUk/ODUk/OPUk比特速率和容量

介绍OTUk&#xff0c;ODUk&#xff0c;OPUk&#xff0c;OTUCn&#xff0c;ODUCn&#xff0c;OPUCn的比特速率和容量。 OTN支持超100 Gbit/s&#xff0c;100 Gbit/s&#xff0c;40 Gbit/s&#xff0c;10 Gbit/s&#xff0c;2.5 Gbit/s&#xff0c;1.25 Gbit/s等多种线路速率。 …

大模型应用新领域:探寻终端侧 AI 竞争核心|智于终端

2024年过去2/3&#xff0c;大模型领域的一个共识开始愈加清晰&#xff1a; AI技术的真正价值在于其普惠性。没有应用&#xff0c;基础模型将无法发挥其价值。 于是乎&#xff0c;回顾这大半年&#xff0c;从互联网大厂到手机厂商&#xff0c;各路人马都在探索AI时代Killer AP…

二叉树的进阶

前言&#xff1a; 关于二叉树的基础知识&#xff0c;小生这里就不在一一一赘述了&#xff0c;对前面二叉树的基础知识有遗忘的铁子 们&#xff0c;可以康康前期咱的博客。 链接在此&#xff1a; 数据结构之二叉树 的精讲 目录&#xff1a; 一&#xff1a;二叉搜索树的定义…

从0开始linux(6)——gcc

欢迎来到博主的专栏&#xff1a;从0开始linux 博主ID&#xff1a;代码小豪、 文章目录 gccgcc的文件风格预处理编译汇编链接 gcc gcc是linux系统下常用的C语言编译器&#xff0c;随着后续的扩展&#xff0c;gcc支持了c&#xff0c;并推出了g编译器&#xff0c;现在的gcc可以支…

基于ssm疫情防控志愿者管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆…

轻松部署大模型:Titan Takeoff入门指南

轻松部署大模型&#xff1a;Titan Takeoff入门指南 在人工智能的快速发展中&#xff0c;处理自然语言处理&#xff08;NLP&#xff09;任务的大规模语言模型&#xff08;LLM&#xff09;至关重要。然而&#xff0c;部署这些模型往往具有挑战性&#xff0c;需要高性能的硬件和优…

论文(一)——寻找顶刊顶会

文章目录 一、顶刊二、顶会三、问题3.1 顶刊和顶会有什么区别3.1.1 定义3.1.2 评审流程3.1.3. 发表周期3.1.4 影响力与权威性3.1.5 适用领域3.1.6 交流与讨论 3.2 如何读论文 3.3 IEEE是啥&#xff1f;为什么这么多四、最后参考文章 一、顶刊 &#xff08;1&#xff09; IEEE …

《python语言程序设计》2018版第8章20题使用Rational类编写一个程序(上)-修改一下8-4Rational类我认为的错误

首先抄一下Rational类,可以安静的抄一遍 一、抄写中的问号 各种报错的截图1各种报错的截图2各种报错的截图3各种报错的截图4添加一个str我将n和d修改为self 书中214-215页间程序清单8-4的代码如下: class Rational:def __init__(self, numerator1, denominator0):divisor gcd(…

什么是 Tammann temperature

Tammann temperature (Tt_tt​) 是材料科学中一个重要的概念&#xff0c;它通常用于描述材料的热力学特性和相变行为。其定义与玻璃态和晶态材料的内部原子运动相关。Tammann 温度在研究材料的扩散、再结晶、以及玻璃化转变过程中具有重要意义。 1. Tammann 温度的定义 Tamma…

C语言实践: 使用哨兵找出数组中的最大元素

开篇 本题来源于《编程珠玑》第9章【代码调优】课后习题8。旨在实现一段使用哨兵找出数组中最大元素的逻辑代码。 题目描述 如何在程序中使用哨兵来找出数组中的最大元素? 思路分析 这个问题相对来说比较简单&#xff0c;以初始值作为哨兵&#xff0c;和后续的值进行比较及处理…

【目标检测】木制地板缺陷破损数据集338张6类VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3383 标注数量(xml文件个数)&#xff1a;3383 标注数量(txt文件个数)&#xff1a;3383 标注…

最新网课搜题答案查询小程序源码/题库多接口微信小程序源码+自带流量主

源码简介&#xff1a; 最新网课搜题神器小程序源码&#xff0c;它是仿了小猿题库&#xff0c;功能多&#xff0c;能很快速找网课答案&#xff0c;还自带流量主功能。 这个小程序类似小助手&#xff0c;一键搜题就有答案。而且支持激励视频流量主&#xff0c;能轻松变现。 源…

iOS 18.1 將於 2024 年 10 月 28 日發布,並包含 Apple Intelligence 功能

在 9 月的活動中&#xff0c;Apple 發布了 iPhone 16 系列&#xff0c;Apple Intelligence 成為焦點功能。然而&#xff0c;最新的 iPhone 系列並未內建 Apple Intelligence 功能&#xff0c;這一點受到分析師和粉絲的廣泛批評。Apple 在活動中透露&#xff0c;Apple Intellige…

中国通信技术革命史

文章目录 引言I 中国通信技术革命史电报中国卫星通信的历史固定电话寻呼机(BP机)大哥大(手机)制定自己的移动通信网络技术体系5G未来科技发展的总趋势:用更少的能量,传输、处理和存储更多的信息II 知识扩展通信史(单位能量的信息传输率越来越高,网络地不断融合。)超级智能…

【C++】二叉搜索树+变身 = 红黑树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…

动态内存管理笔试题

目录 1.第一题1.1如何修改 2.第二题2.1题想2.2深刻理解 3.第三题4.第四题 1.第一题 void GetMemory(char* p) {p (char*)malloc(100); } void Test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); }请问运⾏Test 函数会有什么样的…

SSM湘农乐市农产品交易平台-计算机毕业设计源码28246

目 录 SSM湘农乐市农产品交易平台 1 绪论 1.1研究背景 1.2研究意义 1.3研究方法 1.4论文结构与章节安排 2 湘农乐市农产品交易平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.3 系统功能分析 2.4 系统用例分析 2.5本章小结 3 湘农乐市农产品交易平…