公有云中的 Serverless TensorFlow 函数
对于软件开发者和学生来说,人工智能是有偿的。
2021年,最流行的 AI 框架 Tensorflow 开发者的平均年薪为148508 美元,换算成人民币将近百万。
现在,即使是入门级编程工作,开发者也必须具备人工智能技能。实际上,找到一篇教程,为图像识别和自然语言处理等任务训练自己的 Tensorflow 模型非常容易。只需要一些基本的 Python 知识即可进行培训出来模型,然后运行该模型进行演示。
只不过,仅知道如何使用简单的 Python 来训练模型并不会带来太大的收益。
相较训练模型,将训练好的模型作为可靠的 Web 服务提供给其他人使用要困难得多。对于开发者而言,在生产环境中部署 TensorFlow模型存在重大挑战。公司为能够克服这些挑战的人们付出了高昂的价格。
但是,有解决此问题的简单方法。借助 WebAssembly 虚拟机 SSVM 和腾讯云 serverless,你可以使用50行之内的简单 Rust 代码将 Tensorflow 模型作为服务部署到生产环境中。
简单的意思是指所用到的 Rust 函数语法非常简单,都没有用到生命所有权。
通过此模板函数,你能够免费在腾讯云上部署可用于生产环境的 TensorFlow 模型!
如果您按照本文中的步骤进行操作,并在腾讯云上部署了 Tensorflow serverless 函数,你将获得一系列周边产品。活动详情请点击这里。请填写此表单,我们将尽快为您送上礼品。
Rust 怎么调用 C++ 库?| 借助 WebAssembly,轻松用 Rust 函数调用 TensorFlow 模型
搭建视频观看更佳
为应对上文提到的挑战,选择的技术如下:
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 代码用于加载输入图像加载并执行Tensorflow模型以识别该图像上的内容。 这里的模型是 Tensorflow Lite 格式,可以识别输入图像上的食物。
// 加载训练好的 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 = session.get_output("MobilenetV1/Predictions/Softmax");
res_vec
向量包含图像中每个对象的概率列表(例如,该图像中蛋糕的概率为0.8)。 下面的 Rust 代码读取这些对象的标签,并从 Tensorflow 模型输出中以最高概率打印出对象标签。
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 {}", confidence.to_string(), class_name, class_name);
} else {
println!("No food item is detected");
}
在后端,Rust 代码被编译为 WebAssembly 字节码,并在 SSVM WebAssembly 运行时中执行。 SSVM 已预先配置为能在多个操作系统环境中访问高性能 TensorFlow 本机库,包括腾讯云的 serverless 容器。 反过来,腾讯云 serverless 提供了一个简单的解决方案,用于扩展 Tensorflow 推理函数。
在 Codespaces IDE 中打开一个 Terminal 窗口,然后从 Docker 或命令行运行以下命令以构建云函数。
$ ssvmup build —enable-aot
在 Terminal 窗口,运行下面的命令行将 TensorFlow 云函数部署到腾讯云。
$ cp pkg/scf.so scf/
$ sls deploy
... ...
website: [https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com](https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com/)
在浏览器打开你部署得到的 URL,来看看你吃了啥吧。
在本文中,我们讨论了如何创建简单、安全和高性能的 Rust 函数来运行 Tensorflow 模型,以及如何将这些函数作为可伸缩和按需的 AI 服务部署到公共云上。
现在,你可以免费在腾讯云上免费部署 Tensorflow serverless 函数,并获得精美周边。