公有云中的 Serverless TensorFlow 函数
仅仅知道如何使用简单的 Python 来训练模型并不会带来太大的收益。
但是,将刚刚训练的模型作为可靠的 Web 服务提供给其他人使用要困难得多。对于开发者而言,在生产环境中部署 TensorFlow模型存在重大挑战。公司和雇主为能够克服这些挑战的人们付出了高昂的价格。
-
Python语言和框架在准备和处理模型的输入和输出数据方面效率低下。据估计,AI 计算工作量的 90% 用于数据准备。Python语言实在太繁琐,太慢。
-
很难按需扩展服务。由于 AI 推理的计算要求,即使只有几个请求,服务器计算机也可能会被暂时中止。按需上下扩展服务器数量至关重要。
但是,有解决此问题的简单方法。借助 WebAssembly 虚拟机 SSVM 和腾讯云 serverless,你可以使用50行之内的简单 Rust 代码将 Tensorflow 模型作为服务部署到生产环境中。通过模板函数,你将能够免费在腾讯云上部署可用于生产环境的 TensorFlow 模型!
Serverless AI 推理函数是怎么运行的
为应对上文提到的挑战,我们选择的技术如下:
-
Rust 编程语言非常快速且内存安全。是高性能数据处理和模型执行逻辑的理想选择。
-
WebAssembly 充当了现代 Rust 程序、最新的 Tensorflow 库和强化公共云操作系统之间的桥梁。WebAssembly 是兼容性沙箱,对于开发者的体验至关重要。
-
腾讯云 serverless 提供可扩展的基础架构,以运行 Rust 和 WebAssembly 函数进行 TensorFlow 推理。结合 Serverless 框架,腾讯云 serverless 为简单软件部署提供了出色的开发者体验。
模板函数是图像识别 AI 即服务。它利用经过训练的 TensorFlow 模型来识别图像中的食物。只需不到 50行 简单的Rust代码,就可以将其部署在腾讯云 serverless 上。腾讯云 serverless 可以按需扩展,并且按照实际使用收取费用。
Rust 代码
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<u8> = 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 <a href='https://www.google.com/search?q={}'>{}</a>", confidence.to_string(), class_name, class_name);
} else {
println!("No food item is detected");
}
部署你自己的 TensorFlow AI 推理函数
在 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
小结
在本文中,我们讨论了如何创建简单、安全和高性能的 Rust 函数来运行 Tensorflow 模型,以及如何将这些函数作为可伸缩和按需的 AI 服务部署到公共云上。
接下来,你可以在腾讯云上部署 Tensorflow serverless 函数,并获得一份精美周边。部署就有奖!腾讯云 Serverless 为开发者提供了足够的免费额度。
One More Thing
立即体验腾讯云 Serverless Demo,获取 Serverless 新用户礼包,请在 PC 端访问:
serverless.cloud.tencent.com/start?c=wx
GitHub: github.com/serverless 官网: cloud.tencent.com/product/serverless-catalog
文章评论