公有云中的 Serverless TensorFlow 函数
对于软件开发者和学生来说,人工智能是有偿的。2021年,最流行的 AI 框架 Tensorflow 开发者的平均年薪为148508 美元,换算成人民币将近百万。现在,即使是入门级编程工作,开发者也必须具备人工智能技能。实际上,遵循在线教程并为图像识别和自然语言处理等任务训练自己的 Tensorflow 模型非常容易。只需要一些基本的 Python 知识即可进行培训,然后运行该模型进行演示。 仅仅知道如何使用简单的 Python 来训练模型并不会带来太大的收益。 但是,将刚刚训练的模型作为可靠的 Web 服务提供给其他人使用要困难得多。对于开发者而言,在生产环境中部署 TensorFlow模型存在重大挑战。公司和雇主为能够克服这些挑战的人们付出了高昂的价格。
但是,有解决此问题的简单方法。借助 WebAssembly 虚拟机 SSVM 和腾讯云 serverless,你可以使用50行之内的简单 Rust 代码将 Tensorflow 模型作为服务部署到生产环境中。通过模板函数,你将能够免费在腾讯云上部署可用于生产环境的 TensorFlow 模型!
如果您按照本文中的步骤进行操作,在腾讯云上部署了 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<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");
}
在后端,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
在浏览器打开你部署得到的 URL,看看你吃了啥吧。
在本文中,我们讨论了如何创建简单、安全和高性能的 Rust 函数来运行 Tensorflow 模型,以及如何将这些函数作为可伸缩和按需的 AI 服务部署到公共云上。 接下来,你可以在腾讯云上部署 Tensorflow serverless 函数,并获得一份精美周边。部署就有奖!腾讯云 Serverless 为开发者提供了足够的免费额度。
相关链接:
立即体验腾讯云 Serverless Demo,获取 Serverless 新用户礼包,请在 PC 端访问: serverless.cloud.tencent.com/start?c=wx
欢迎进入千人 QQ 群 (537539545) 交流!
点击「阅读原文」查看更多!
本文分享自 ServerlessCloudNative 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有