![值得一提的是,WasmEdge7月社区会议的所有发言者均来自社区。如果你感兴趣,欢迎发言讨论[2]!Wasi-crypto提案Sonder-joker通过LFXMentorship为WasmEdge实现了wasi-crypto提案,分享了他在wasi-crypto上的工作。作为一个由W3C小组制定的...](/templets/3_zixun/picture/199.jpg)
值得一提的是,WasmEdge7月社区会议的所有发言者均来自社区。如果你感兴趣,欢迎发言讨论[2]!Wasi-crypto提案Sonder-joker通过LFXMentorship为WasmEdge实......
值得一提的是,WasmEdge7月社区会议的所有发言者均来自社区。如果你感兴趣,欢迎发言讨论[2]!
Wasi-crypto提案Sonder-joker通过LFXMentorship为WasmEdge实现了wasi-crypto提案,分享了他在wasi-crypto上的工作。
作为一个由W3C小组制定的开放标准,WebAssembly有许多提案。Wasm的功能通过实现提案得到不断丰富。Wasi-crypto和wasi-nn就是其中的两个。
在Sonder-joker看来,Wasi-crypto可以帮助硬件加速和系统级机密隔离。WebAssembly代码可以使用Wasi-crypto来执行加密操作,同时保留WebAssembly的沙箱特性。例如,用户可以通过wasi-crypto实现计算哈希和加密。
通过展示Wasi-crypto的三个模块,Sonder-joker分享了wasi-crypto的主要代码风格。这三个模块是asymmetric、keyexchange和signatures。asymmetric是其它两个模块的基础模块。
非对称操作。该模块包括key的handle表示:publickey、secretkey和keypair。调用(keytype)key_import()来创建它们。调用key_close(),key_export()关闭它们,以从host端复制原始密钥数据。还可以调用此模块中的函数来转换这些key。
Keyexchange。传递pk、sk以及调用kx_dh可以使用经典的Diffie-Hellman[3]。它会产出共享的key。WasmEdge目前不支持密钥封装交换操作。
签名。与对称状态的操作类似。它有两种状态:签名和验证签名。你可以调用(signatures/verificationstate)state_open来产生一个新的状态,调用()state_update吸收数据源以进行签名/验证,调用signature_state_sign()/signature_verification_state_verify()来生成签名/验证签名,并调用signatures/verification_signstursstate_来关掉他们。
对称状态。如果要执行对称relative函数,则需要使用symmetric_state_open()函数。调用symetric_state_close()可以将其清除。如果要克隆它,请调用symmetric_state_clone()。remainingsymmetric_()类似函数用于在想对称加密或解密时转换数据。此外,大多数确定的操作不会破坏状态:这意味着你可以多次调用symmetric_相关的确定性函数。
总而言之,wasi-crypto是POSIX风格的API,并且是基于handle的。它的错误代码是基于errorhandling机制的。
wasi-crypto的下一步是在其RustSDK中支持TLS。相关详细信息,请参阅此issue[4]。
Wasi-nn提案Gusy1234是通过LFXMentorship项目在WasmEdge中实现wasi-nn提案的贡献者。他介绍了迄今为止在WasmEdge中支持Wasi-nn提案方面所做的工作。
Wasi-nn提案是一个高级的“图形加载器”API。有了它,为特定设备选择编译模型的工作,就转移到了其他工具(例如OpenVINO、PyTorch、Tensorflow)。Wasi-nn只专注于从不同的机器学习框架加载这些编译模型和进行推理。
与现有的WasmEdgeTensorFlow扩展[5]相比,wasi-nn更通用。
Gusy1234以一个MobileNet模型为例,展示了如何使用wasi-nn进行推理。
让我们先看看Rust代码。Rust程序做的工作是加载模型,创建加载图的执行实例,定义Tensor参数。之后,rust程序计算并检索结果。此处[6]查看完整示例。
`usewasi_nn;modimagenet_classes;//loadthemodelletxml=fs::read_to_string(model_xml_name).unwrap();println!("ReadgraphXML,sizeinbytes:{}",());letweights=fs::read(model_bin_name).unwrap();println!("Readgraphweights,sizeinbytes:{}",());letgraph=unsafe{wasi_nn::load([_bytes(),weights],wasi_nn::GRAPH_ENCODING_OPENVINO,wasi_nn::EXECUTION_TARGET_CPU,).unwrap()};//createanexecutioninstanceletcontext=unsafe{wasi_nn::init_execution_context(graph).unwrap()};println!("Createdwasi-nnexecutioncontextwithID:{}",context);//definetensorlettensor_data=image_to_tensor(image__string(),224,224);println!("Readinputtensor,sizeinbytes:{}",tensor_());lettensor=wasi_nn::Tensor{dimensions:[1,3,224,224],r#type:wasi_nn::TENSOR_TYPE_F32,data:tensor_data,};//excutetheinferenceunsafe{wasi_nn::compute(context).unwrap();}//retrievetheoutputletmutoutput_buffer=vec![0f32;1001];unsafe{wasi_nn::get_output(context,0,mutoutput_buffer[..]as*mut[f32]as*mutu8,(output_()*4).try_into().unwrap(),).unwrap();}`下一步是讲上面的rust代码构建为.wasm文件。
`//生成.wasm文件$cargobuild--target=wasm32-wasi—release//打开AOT模式以加快图像处理速度。$wasmedgec./target/wasm32-wasi/release/`
最后一步是使用WasmEdge使用以下命令行运行生成的wasm。然后就能看到图片的前5个最有可能的猜测。
`wasmedge--dir.:.`在印度布道WasmEdge
根据提议,Shivay和Mritunjay将从撰写博客和在Twitter等社交媒体平台上分享Wasm文章开始。他们还计划在印度举办线下聚会。很高兴看到他们在印度的布道工作。WasmEdge还在Discord中创建了一个印度频道。欢迎加入!
在此之前,他们都在开发者会议上分享了WasmEdge相关的演讲。Mritunjay在KubeCon+CloudNativeConNA2022上进行了演讲——PavingtheWayofWebAssemblyintheIntersectionofMachineLearningandCloudNative[8]。Shivay在KubeCon+CloudNativeConEU2022上分享了他对ManagingWebAssemblyappswithKubernetes[9]的看法。
QAQ:您提到稍后您将添加对Pytorch和ONNX的支持。这项工作目前正在开发吗?Q:WasmEdge接下来三个月的规划是什么?A:(Michael)我们的计划如下:
支持ComponentModel提案(曾名为InterfaceType)和wit-bindgen提案,这将使为WasmEdge添加hostfunction更加容易。有关进度,请参阅此issue[12]。
增强网络支持。那是因为我们的目标确实是让WasmEdge成为微服务环境中的一等公民。我们正在WasmEdge中开发tokio兼容的runtime。请参阅此issue[13]了解进度。HTTPS支持。正如上面的sonder-joker展示的,WasmEdge现在支持wasi-crypto。但这还不够。我们还在基于wasi-crypto提案开发HTTPS支持。查看此issue[14]了解进展情况。
在JavaScript中增强JavaScript支持和完整的,这意味着开发者可以在WasmEdge中运行JavaScript程序而无需更改。有关进度,请参阅此issue[15]。
改进RustSDK。Rust在Wasm生态系统中非常重要。因此,WasmEdge致力于完善其对Rust的支持。
数据库驱动可以帮助Wasm程序访问数据库,这是serverless函数所必需的。有关进度,请参阅此issue[16]。
参考资料[1]
[2]
欢迎发言讨论:
[3]
Diffie-Hellman:
[4]
此issue:
[5]
WasmEdgeTensorFlow扩展:
[6]
此处:
[7]
GitHubissue:
[8]
PavingtheWayofWebAssemblyintheIntersectionofMachineLearningandCloudNative:
[9]
ManagingWebAssemblyappswithKubernetes:
[10]
WasmEdgerepo:
[11]
wasi-nn案例:
[12]
此issue:
[13]
此issue:
[14]
此issue:
[15]
此issue:
[16]
此issue: