在 “小小容器” WasmEdge 里运行小小羊驼 llama 2

news2024/12/20 19:55:08

 昨天,特斯拉前 AI 总监、OpenAI 联合创始人 Andrej Karpathy 开源了 llama2.c 。 只用 500 行纯 C 语言就能训练和推理 llama 2 模型的框架,没有任何繁杂的 python 依赖。这个项目一推出就受到大家的追捧,24 小时内 GitHub 收获 4000 颗星!

可是,C 编译的原生机器码不能跨平台,不安全,也不可被调度。这些问题使得它的应用场景非常有限。这时,一个大胆的想法油然而生!把 llama2.c 编译成 Wasm 在 WasmEdge 里运行!

​图片来自 https://github.com/karpathy/llama2.c 



这么做的好处是:

  • 轻量级:一个 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!

https://github.com/WasmEdge/mediapipe-rsicon-default.png?t=N6B9https://github.com/WasmEdge/mediapipe-rs

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

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

相关文章

AI学习笔记三:编写检测的yolov5测试代码

若该文为原创文章&#xff0c;转载请注明原文出处。 通过detect.py代码测试通过后&#xff0c;阅读detect.py代码发现&#xff0c;有些难以看懂&#xff0c;看得有点蒙蒙的&#xff0c; 所以编写了一个简单的测试程序。 代码如下&#xff1a; import cv2 import numpy as np…

工业自动化编程与数字图像处理技术

编程是计算机领域的基础技能&#xff0c;对于从事软件开发和工程的人来说至关重要。在工业自动化领域&#xff0c;C/C仍然是主流的编程语言&#xff0c;特别是用于工业界面(GUI)编程。工业界面是供车间操作员使用的&#xff0c;使用诸如Halcon或OpenCV等软件单独无法完成项目&a…

mysql 第八章

1.主从复制 主服务器&#xff1a; 从服务器&#xff1a; 检测结果&#xff1a; 2.读写分离 amoeba 机器&#xff1a; 客户端机器&#xff1a; 检测结果&#xff1a; 3.总结 在企业应用中&#xff0c;业务通常数据量都比较大。单台 mysql 在安全性、 高可用性、高并发方面都&am…

走好职业生涯第一步 中科驭数2023校招生培训“芯星计划” 落幕

校招生作为公司发展的新鲜血液&#xff0c;是公司在人才储备和人才梯队建设上的重要投资。近日&#xff0c;中科驭数在北京、武汉两地组织开展了2023年校招生培训项目——“芯星计划”&#xff0c;旨在帮助2023届校招新员工快速了解公司文化、融入驭数团队&#xff0c;顺利迈过…

字节抖音小程序,使用 uniapp 调起内置支付

字节抖音小程序&#xff0c;使用 uniapp 调起内置支付 第一步&#xff1a;提交订单 后端通过抖音预下单接口&#xff0c;提交支付订单信息。 预下单接口_小程序_抖音开放平台预下单接口 提交支付订单信息。 ## 使用限制 无 ## 接口说明 预下单接口需要保证同一app_id下每笔订…

中国剩余定理讲解及例题

凡有所学&#xff0c;皆成性格。 凡有所学&#xff0c;皆成性格。 目录&#x1f352; &#x1f349;中国剩余定理维基百科<font colorgreen>:cherries:形式描述&#xff1a; <font colorred>:pear: 解法:strawberry:<font colorgreen>求解方法&#xff1a;:…

集成学习——Bagging算法和随机森林算法

1、集成学习 集成学习是将多个机器学习的算法结合起来的一种方法&#xff0c;即实现将多个弱学习器通过组成一个整体来实现强学习的效果&#xff0c;俗语里&#xff1a;三个臭皮匠赛过一个诸葛亮。 2、Bagging算法 2.1 Bootstrap自助采样 在样本集D(样本数为m)中进行有放回…

51单片机--LCD1602

LCD1602的介绍 LCD1602是一种字符型液晶显示模块&#xff0c;通常用于嵌入式系统、单片机等领域。它由LCD&#xff08;液晶显示屏&#xff09;、HD44780控制驱动主电路及其扩展驱动电路、少量电阻、电容元件等组成。 LCD1602具有以下特点和功能&#xff1a; 显示能力&#xf…

使用sftp

一、背景 新项目组前端部署方式是Build打包生成dist文件&#xff0c;交由后端部署。后来知道了vscode安装sftp前端可以自行部署。 二、实操 1、vscode安装sftp 2、 配置 ①F1 / ctrlshiftp ②命令行输入sftp -> 选择 sftp: Config ③配置信息介绍 {"name"…

liteflow overall笔记

偶然看到liteflow的介绍&#xff0c;感觉是一个local单机版本的conductor。 核心代码的注释非常好&#xff0c;在我看过的开源代码里面数一数二单元测试完备&#xff0c;要学习用法基本都可以在单元测试看到相关代码核心基于阿里的ElExpress&#xff0c;使用方式值得学习监控稍…

网络编程八股文

文章目录 tcp粘包问题&#xff1f;BIO,NIO,AIO是什么&#xff1f;零拷贝是什么&#xff1f;浏览器发出一个请求到收到响应的具体步骤&#xff1f;select, poll, epoll区别是什么&#xff1f;https是如何保证安全传输的&#xff1f;tcp的三次握手和四次挥手&#xff1a;tcp网络分…

LZ77算法理论

发布时间&#xff1a;2023-07-25 14:58:28 英文介绍文档&#xff1a;https://archive.ph/F4pg7 很短&#xff0c;看一遍10&#xff5e;20分钟应该够了。 1. 算法用到的术语&#xff1a; Input stream 要被压缩的字符序列 Character 输入流中的基本数据元素 Coding position…

RealsenseD455 + ubuntu18.04 + ROS-Melodic的使用

系统&#xff1a;Ubuntu18.04 ros: melodic 相机&#xff1a;intel RealSense D455一、安装依赖和 Realsense SDK sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver…

机器人导航(3):导航相关消息

文章目录 地图nav_msgs/MapMetaDatanav_msgs/OccupancyGrid 里程计坐标变换定位目标点与路径规划激光雷达相机深度图像转激光数据depthimage_to_laserscan简介depthimage_to_laserscan节点说明depthimage_to_laserscan使用 地图 地图相关的消息主要有两个: nav_msgs/MapMetaD…

【雕爷学编程】Arduino动手做(171)---micro:bit 开发板

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#xff0c;这…

“VCMessage”任务意外失败

从网上查到很多都是说设置这个位置&#xff0c;但是我的已经是对的&#xff0c;还是出现 “VCMessage”任务意外失败这个错误。 又查到一个人说解决方法是更正OutputPath或从父级继承&#xff1a;右键单击项目,然后转到"属性">"链接器">"常规&q…

开源项目注意事项

fork项目后&#xff0c;记得另外开启一个分支然后在新分支上进行开发&#xff0c;push到仓库后从分支往原项目提交。 否则会出现Partially verified&#xff08;导致提交pr后auto-merge失败&#xff09; 注意git提交操作 https://blog.csdn.net/sonichenn/article/details/13…

matplotlib从起点出发(3)_Tutorial_3_Image

1 图像教程 matplotlib可以简单地处理并显示图像&#xff0c;当然&#xff0c;它不是一个专业的图像处理库&#xff0c;所以也不要拿它来与opencv进行比较。 2 启动命令 首先&#xff0c;让我们启动IPython。它是对标准python提示符的最出色的增强&#xff0c;它与matplotli…

OpenHarmony与HarmonyOS联系与区别

目录 1. 背景 2.OpenHarmony 3.HarmonyOS 4.鸿蒙生态 5.OpenHarmony与HarmonyOS的技术上实现区别 1.语言支持 2.SDK 的不同 3.运行调测方式不同 4.对APK的兼容性不同 5.包含关系 6.调试命令 6.何时选择OpenHarmony或是HarmonyOS&#xff1f; 1. 背景 开篇就说“关于…

企业数字化转型中容易出现哪些误区?

对信息化和数字化的投入产出认识有误 在和一些从事企业信息化数字化建设的朋友的沟通中&#xff0c;发现很多企业老板对信息化和数字化投入产出认知上确实有偏差&#xff0c;他们总觉得投入一部分&#xff0c;就得有相应的产出&#xff0c;在他们心里信息化的投入产出如下图曲线…