公有云中的 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 格式,可以识别输入图像上的食物。
// 加载训练好的 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");
}
代码语言:javascript复制
部署你自己的 TensorFlow AI 推理函数
在后端,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.myzijiebao.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
点击「阅读原文」查看更多!