Rust 与 Wasm 在 Serverless AI 推理函数中的作用

公有云中的 Serverless TensorFlow 函数

对于软件开发者和学生来说,人工智能是有偿的。2021年,最流行的 AI 框架 Tensorflow 开发者的平均年薪为148508 美元,换算成人民币将近百万。现在,即使是入门级编程工作,开发者也必须具备人工智能技能。实际上,遵循在线教程并为图像识别和自然语言处理等任务训练自己的 Tensorflow 模型非常容易。只需要一些基本的 Python 知识即可进行培训,然后运行该模型进行演示。

仅仅知道如何使用简单的 Python 来训练模型并不会带来太大的收益。

但是,将刚刚训练的模型作为可靠的 Web 服务提供给其他人使用要困难得多。对于开发者而言,在生产环境中部署 TensorFlow模型存在重大挑战。公司和雇主为能够克服这些挑战的人们付出了高昂的价格。

  • Python语言和框架在准备和处理模型的输入和输出数据方面效率低下。据估计,AI 计算工作量的 90% 用于数据准备。Python语言实在太繁琐,太慢。
  • 很难按需扩展服务。由于 AI 推理的计算要求,即使只有几个请求,服务器计算机也可能会被暂时中止。按需上下扩展服务器数量至关重要。

但是,有解决此问题的简单方法。借助 WebAssembly 虚拟机 SSVM 和腾讯云 serverless,你可以使用50行之内的简单 Rust 代码将 Tensorflow 模型作为服务部署到生产环境中。通过模板函数,你将能够免费在腾讯云上部署可用于生产环境的 TensorFlow 模型!

如果您按照本文中的步骤进行操作,在腾讯云上部署了 Tensorflow serverless 函数,你将获得搪瓷杯、贴纸等周边产品。详情请点击 Serverless 陪你云过年,惊喜好礼等你来拿

Serverless AI 推理函数是怎么运行的

为应对上文提到的挑战,我们选择的技术如下:

  • Rust 编程语言非常快速且内存安全。是高性能数据处理和模型执行逻辑的理想选择。
  • WebAssembly 充当了现代 Rust 程序、最新的 Tensorflow 库和强化公共云操作系统之间的桥梁。WebAssembly 是兼容性沙箱,对于开发者的体验至关重要。
  • 腾讯云 serverless 提供可扩展的基础架构,以运行 Rust 和 WebAssembly 函数进行 TensorFlow 推理。结合 Serverless 框架,腾讯云 serverless 为简单软件部署提供了出色的开发者体验。

现在,让我们看看它是如何工作的。首先,从 GitHub fork 此模板项目,并完成所有准备工作。你可以使用 GitHub Codespaces IDE 或 Docker 镜像,也可以在自己的计算机上安装 Rust、 ssvmup、 serverless framework 。

模板函数是图像识别 AI 即服务。它利用经过训练的 TensorFlow 模型来识别图像中的食物。只需不到 50行 简单的Rust代码,就可以将其部署在腾讯云 serverless 上。腾讯云 serverless 可以按需扩展,并且按照实际使用收取费用。

Rust 代码

Rust 代码用于加载输入图像加载并执行Tensorflow模型以识别该图像上的内容。这里的模型是 Tensorflow Lite 格式,可以识别输入图像上的食物。

代码语言:javascript
复制
   // 加载训练好的 TensorFlow lite 模型。    let model_data: &[u8] = include_bytes!("lite-model_aiy_vision_classifier_food_V1_1.tflite");
    // 上传图像的格式是 base64 编码,并通过腾讯云 API 网关封装在 JSON 对象中。    let mut buffer = String::new();    io::stdin().read_to_string(&mut buffer).expect("Error reading from STDIN");    let obj: FaasInput = serde_json::from_str(&buffer).unwrap();    let img_buf = base64::decode_config(&(obj.body), base64::STANDARD).unwrap();
    // 加载上传图像并将其调整为192x192,这是这个 MobileNet 模型所需的尺寸。    let flat_img = ssvm_TensorFlow_interface::load_jpg_image_to_rgb8(&img_buf, 192, 192);
    // 用图像作为输入张量运行模型,并获取模型输出张量。    let mut session = ssvm_TensorFlow_interface::Session::new(&model_data, ssvm_TensorFlow_interface::ModelType::TensorFlowLite);    session.add_input("input", &flat_img, &[1, 192, 192, 3])           .run();    let res_vec: Vec<u8> = session.get_output("MobilenetV1/Predictions/Softmax");

res_vec 向量包含图像中每个对象的概率列表(例如,该图像中蛋糕的概率为0.8)。下面的 Rust 代码读取这些对象的标签,并从 Tensorflow 模型输出中以最高概率打印出对象标签。

代码语言:javascript
复制
let labels = include_str!("aiy_food_V1_labelmap.txt");
let mut i = 0;let mut max_index: i32 = -1;let mut max_value: u8 = 0;while i < res_vec.len() {    let cur = res_vec[i];    if cur > max_value {        max_value = cur;        max_index = i as i32;    }    i += 1;}
let mut label_lines = labels.lines();for _i in 0..max_index {    label_lines.next();}
let class_name = label_lines.next().unwrap().to_string();if max_value > 50 && max_index != 0 {    println!("The image {} contains a <a href='https://www.google.com/search?q={}'>{}</a>", confidence.to_string(), class_name, class_name);} else {    println!("No food item is detected");
}
代码语言:javascript
复制

部署你自己的 TensorFlow AI 推理函数

在后端,Rust 代码被编译为 WebAssembly 字节码,并在 SSVM WebAssembly 运行时中执行。SSVM 已预先配置为能在多个操作系统环境中访问高性能 TensorFlow 本机库,包括腾讯云的 serverless 容器。反过来,腾讯云 serverless 提供了一个简单的解决方案,用于扩展 Tensorflow 推理函数。

在 Codespaces IDE 中打开一个 Terminal 窗口,然后从 Docker 或命令行运行以下命令以构建云函数。

代码语言:javascript
复制
$ ssvmup build —enable-aot

在 Terminal 窗口,运行下面的命令行将 TensorFlow 云函数部署到腾讯云。

代码语言:javascript
复制
$ cp pkg/scf.so scf/
$ sls deploy... ...website: https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com

在浏览器打开你部署得到的 URL,看看你吃了啥吧。

小结

在本文中,我们讨论了如何创建简单、安全和高性能的 Rust 函数来运行 Tensorflow 模型,以及如何将这些函数作为可伸缩和按需的 AI 服务部署到公共云上。

接下来,你可以在腾讯云上部署 Tensorflow serverless 函数,并获得一份精美周边。部署就有奖!腾讯云 Serverless 为开发者提供了足够的免费额度。

相关链接:

  • Serverless 陪你云过年,惊喜好礼等你来拿

  • 腾讯云 Serverless 联合 Second  State 战略布局 AI 推理
  • 全新开发体验!腾讯云 serverless 助力你的 AI 模型进入生产环境

One More Thing

立即体验腾讯云 Serverless Demo,获取 Serverless 新用户礼包,请在 PC 端访问: serverless.cloud.tencent.com/start?c=wx

欢迎进入千人 QQ 群 (537539545) 交流!

  • GitHub: github.com/serverless
  • 官网: cloud.tencent.com/product/serverless-catalog

点击「阅读原文」查看更多!