1. 首页 > 三国故事 >

在网页上部署模型的来龙去脉:浏览器为何能兼职跑模型?

三国网页小游戏_超变网页三国_网页横版三国

先写

这个故事主要介绍了在网页上部署模型的来龙去脉。您也许可以在这里找到您想问的问题的答案。

在这个人工智能内容生成横行的时代,仍然有一群人“愚蠢地”坚持原创。如果您能读到最后,请点赞、收藏或关注我以支持我。谢谢( ̄︶ ̄)↗

我可以在网络上运行该模型吗?

丹尼尔:嘿,丹兄弟,你要去哪里散步?

蛋先生:我刚吃完饭,准备出去散步吃饭。

丹尼尔:我们一起去吧。丹哥,我最近有点迷恋AI,突然灵机一动。您认为我们可以在网页上运行机器学习模型吗?

蛋先生:嗯,确实如此。

为什么我可以在网络上运行模型?

丹尼尔:这让我想知道。专门用于查看网页的浏览器如何“兼职”运行模型?丹哥快告诉我

蛋先生:你想一下,一颗种子能否发芽,取决于它是否有合适的生存环境。对于模型来说也是如此。要有可以运行的“土壤”——运行时,还要有足够的“阳光”和“水”——即计算能力和存储。

丹尼尔:哦,我想我明白了。但我还是不明白浏览器是如何做到这一点的

蛋先生:自从浏览器有了WebAssembly之后,它的“胃口”就变大了!如今,许多用 C、C++、Rust 等编程语言编写的应用程序都可以编译为 WASM 格式并在浏览器中运行。这使得浏览器能够处理更复杂的计算任务

丹尼尔:没错!也就是说,原本用C++编写的模型运行时现在可以直接放入浏览器中,成为模型的“土壤”!

蛋先生:敌人!而且,浏览器的WebGL和WebGPU技术还可以让您的应用程序使用GPU资源,使得速度更高!否则,它可以运行,但会很慢,而且没有意义。

丹尼尔:哈哈,让我总结一下。 WebAssembly使模型成为可能,WebGL和WebGPU使计算能力的提高成为可能!

蛋先生:不错,总结得很好!

为什么要在浏览器中运行?

蛋先生:那我问你,为什么要在浏览器上运行模型?

丹尼尔:嗯~,这个~,我觉得蛮酷的!但说实话,我还真没有认真思考过这个问题。丹兄弟,你能告诉我吗?

丹先生:来吧,让我们从请求链接开始。如果模型部署在浏览器上,是不是就不需要请求服务器了?

超变网页三国_网页横版三国_三国网页小游戏

丹尼尔:那是肯定的

Dan先生:对于客户端来说,请求不会离开用户设备。这样会更好地保护用户隐私吗?

丹尼尔:是的

Dan先生:计算是在浏览器本地进行的,离用户更近,不会有网络请求的损失。响应速度通常更快。这会改善用户体验吗?

丹尼尔:是的

Dan先生:另外,模型已经部署在浏览器中了。只要应用本身支持离线访问,就可以离线使用吗?

丹尼尔:是的

Dan先生:对于服务器来说,因为计算压力被分担出去了,是不是可以减轻服务器的计算压力,降低运营成本呢?

丹尼尔:是的

蛋先生:剩下的你自己想办法吧。

如何在浏览器中运行它?

Daniel:好的,那么如何实现呢?

Dan先生:主流的机器学习框架除了训练模型之外,还可以部署和推理模型。比如著名的Tensorflow有tensorflow.js,可以将模型部署在浏览器端。但今天我要告诉大家的是onnxruntime-web

丹尼尔:onnxruntime-web?这个名字听起来有点新鲜!

Dan先生:onnxruntime-web,你可以把它拆成onnx、onnxruntime和onnxruntime-web。

丹尼尔:你继续

Dan先生:onnx是一种模型格式,就像你用来存储音乐的mp3格式一样,但它存储的是机器学习模型; onnxruntime 是运行这些模型的“玩家”;而onnxruntime-web允许这个“播放器”是一个神奇的工具,可以在网页上运行

丹尼尔:哦,模型有哪些格式?使用这个onnx有什么好处?

蛋先生:俗话说,合久则散;合则久则散。如果我们长期分裂,我们就会团结起来。

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

Dan先生:每个机器学习框架都有自己的模型格式。在onnx之前,您必须使用tf来部署tensorflow模型,并使用pytorch来部署pytorch模型。但用户只想部署一个模型。问题可以简化吗?

超变网页三国_网页横版三国_三国网页小游戏

丹尼尔:确实如此

Dan 先生:所以就有了 onnx 的开放标准。每个公司的模型格式都可以转换成这个标准格式,然后就可以使用onnxruntime来部署和推断模型!

超变网页三国_网页横版三国_三国网页小游戏

Daniel:那么这个onnxruntime是用来实现什么呢?

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

丹尼尔:没错!然后给我看一个代码示例,我等不及了

Dan先生:下面是一个简单的数字图像识别的例子,但是接口有点低级。您需要了解张量之类的东西。希望将来有一个第三方库能够封装一个高级的接口,比如手写数字识别,输入是图片,输出是数字;对于生成式人工智能,输入是提示,输出是答案。当然你也可以自己尝试一下

三国网页小游戏_超变网页三国_网页横版三国



  
    ...
    
    ...
  
  
    ...
    
    
  

有什么限制?

Daniel:除了数字识别之外,你还有什么其他的技巧吗?

蛋先生:当然!语音识别、图像分类、物体检测,甚至生成式人工智能都没问题!

丹尼尔:哇,你能处理大型语言模型吗?

Mr. Egg:但是在浏览器上运行时有一些小限制。

Daniel:我猜一下,模型的尺寸有限制吗?

蛋先生:敌人

丹尼尔:它能有多大?

Mr. Egg:首先我们要加载远程模型

所有主流浏览器都对 ArrayBuffer 的大小有限制。例如,Chrome 就是 2G。当使用fetch加载模型时,需要使用response.arrayBuffer()。如果型号超过2G就GG了。

另外,ONNX模型通过protobuf格式传输,单个protobuf消息的大小限制正好是2G。

Daniel:所以你最多只能加载2G的模型?

蛋先生:这并不完全正确。如果一次不行的话,我们可以分批进行!我们可以将模型分为模型图和权重,权重信息可以作为外部数据单独加载。只要模型图片不超过2G,我们就可以突破2G的限制。

Daniel:不是可以加载超大模型吗?

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

丹尼尔:噢...

Egg先生:而且,当模型太大时,对硬件的要求就更高。不建议在浏览器里去乱搞这些大家伙。

丹尼尔:明白了,那我试试

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

写在最后

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.fwsgw.com/a/sanguo/208743.html

三国杀手游创新玩法:打破次元壁的互动与强化装备技能
« 上一篇 2024-10-31
吕布在三国游戏中的角色形象:从敌人到有尊严的死亡
下一篇 » 2024-10-31

相关推荐