在 “Baby 容器” WasmEdge 里运行 Baby 羊驼 llama 2
昨天,特斯拉前 AI 总监、OpenAI 联合创始人 Andrej Karpathy 开源了 llama2.c 。 只用 500 行纯 C 语言就能训练和推理 llama 2 模型的框架,没有任何繁杂的 python 依赖。这个项目一推出就受到大家的追捧,24 小时内 GitHub 收获 4000 颗星!
图片来源:https://github.com/karpathy/llama2.c
可是,C 编译的原生机器码不能跨平台,不安全,也不可被调度。这些问题使得它的应用场景非常有限。这时,一个大胆的想法油然而生!把 llama2.c 编译成 Wasm 在 WasmEdge 里运行!
这么做的好处是:
- 轻量级:一个 Wasm 文件只有几十 KB 大小,相比于 Python 镜像动辄几百上千 MB,差了一万倍。
- 安全:沙箱机制,提供隔离性,适合多租户的云部署。
- 可移植:Wasm 文件无需任何改变,可以在 x86, ARM, Apple, RISC-V 机器上运行
- 性能:没有冷启动,且运行速度接近本机速度
- 能够被 Docker 和 kuberbetes 等容器工具进行管理
下面,我们来具体看看是如何实现的。
先决条件
请参考 WasmEdge 的官方文档安装 WasmEdge runtime。
curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | sudo bash -s — -p /usr/local
准备 wasi-sdk
export WASI_VERSION=20 export WASI_VERSION_FULL=${WASI_VERSION}.0 wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_VERSION}/wasi-sdk-${WASI_VERSION_FULL}-linux.tar.gz tar xvf wasi-sdk-${WASI_VERSION_FULL}-linux.tar.gz export WASI_SDK_PATH=`pwd`/wasi-sdk-${WASI_VERSION_FULL} CC="${WASI_SDK_PATH}/bin/clang --sysroot=${WASI_SDK_PATH}/share/wasi-sysroot"
把 llama2.c 编译成 Wasm
git clone https://github.com/karpathy/llama2.c.git cd llama2.c $CC run.c -D_WASI_EMULATED_PROCESS_CLOCKS -lwasi-emulated-process-clocks -o run.wasm
优化 wasm file 并且运行
这里我们将使用 WasmEdge 的 AOT 编译器对编译好的 Wasm 文件进行优化,以提升 Wasm 的性能。
$ wget https://karpathy.ai/llama2c/model.bin -P out $ wasmedgec run.wasm run-aot.wasm [2023-07-24 16:39:52.851] [info] compile start [2023-07-24 16:39:52.858] [info] verify start [2023-07-24 16:39:52.862] [info] optimize start [2023-07-24 16:39:53.251] [info] codegen start [2023-07-24 16:39:53.608] [info] output start [2023-07-24 16:39:53.611] [info] compile done [2023-07-24 16:39:53.611] [info] output start
运行这个 wasm 文件
$ wasmedge --dir .:. run-aot.wasm out/model.bin
输出如下:
Once upon a time, there was a wealthy man. He lived in a big house with many things. The wealthy man liked to play in the fog. One day, the wealthy man saw that the fog was increasing. The fog was getting stronger and the weight on the man's body made it hard to walk. The man said, "Oh no, I need to find a place to stop." The wealthy man walked and walked, looking for a safe place. Soon, he found a small house. To his surprise, the house was full of toys and candy! The man said, "I found this house of good value. I can keep all the toys and candy in it." And from that day on, the wealthy man never played in the fog again. <s> Once upon a time, there was a little girl named Lily. She loved to play with her toys and sing songs. One day, Lily's friend Timmy came over to play. "Hi Lily, do you want to play with my new toy car?" asked Timmy. "Yay, thank you!" replied Lily. But after a while, Lily started to feel sleep achieved tok/s: 30.738912
就是这样啦。 WasmEdge 也将逐步支持 Llama2 7B 及更大的 model。
最后。 如果你有兴趣使用 Wasm 作为 Python 的高性能替代品在生产环境中进行 AI 推理,请查看我们基于 Rust 的库 mediapipe-rs。 这是 Google 的 mediapipe 模型。并且同时支持 TF Lite 和 Pytorch!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于 Databend 实现的海量日志实时查询服务 | 多点DMALL
作者:苏琳 多点DMALL 供应链补货团队负责人 多点DMALL 成立于 2015 年。从创立伊始,就致力于以大数据、云计算、AI 等数字技术改变零售业,是一站式全渠道数字零售解决方案服务商,数字化解构重构零售产业,提供端到端的商业 SaaS 解决方案。 多点DMALL 通过 DMALL OS 提供零售云一站式解决方案,帮助零售商和品牌商数字化转型,实现线上线下一体化;同时通过多点 App 等工具赋能全渠道经营能力,并提供各类增值服务。 需求概述 商家要求支持 4 个月的日志查询,目前线上只支持 1 个月。每天日志是 400 万行项,1 个月的日志量是 1.2 亿,考虑到后续业务的增长,预计每月日志数据量会增长到 2.5亿;4 个月的日志量是 10 亿行项左右。 现采用的 MongoDB 集群因资源受限无法支持 10 亿行项存储及查询,急需寻找另外的解决方案。 Databend的介绍及优势 Databend 是一个开源的、完全面向云架构的新式数仓,它提供快速的弹性扩展能力,并结合云的弹性、简单性和低成本,使 Data Cloud 构建变得更加容易。Databend 把数据存储在 AWS...
- 下一篇
如何清理并刷新 DNS
[toc] 在互联网上的每一个计算机都拥有一个唯一的地址,称作「IP地址」(即互联网协议地址),其中: IPv4 使用 32位地址,采用点分十进制(dotted-decimal)表示法,例如 192.168.0.1。 IPv6 使用128位地址,采用冒号十六进制(colon-hexadecimal)表示法,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。 由于 IP 地址不方便记忆,DNS允许用户使用一串常见的字母(即「域名」)取代。 公共 DNS 服务器(Domain Name System),即系统默认的DNS解析服务器。DNS 全称是 Domain Name System,即域名解析系统。 域名解析的过程是将域名转换为对应的 IP 地址的过程,使得用户可以通过域名来访问网站和服务,而无需记住复杂的 IP 地址。 公共 DNS 提供商运行多个域名解析服务器,可以提供快速、可靠的域名解析服务,使用户能够更快速地访问网站和服务。当用户访问网站或服务时,网络设备就会向所配置的公共 DNS 服务器发出请求,获取域名的对应 IP 地址,并将用户重定向到相...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启