前言
--
首先介绍下在本文出现的几个比较重要的概念:
> **函数计算(Function Compute)**: [函数计算](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E6%2580%25A5%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BA%2520Serverless%2520AI%2520%25E5%25BA%2594%25E7%2594%25A8%25EF%25BC%259A%25E4%25B8%25BA%25E4%25BD%25A0%25E5%2586%2599%25E8%25AF%2597%26amp%3Bauthor%3D%25E5%2580%259A%25E8%25B4%25A4%26amp%3Burl%3Dhttp%253A%252F%252Ffc.console.aliyun.com%252F%253Ffctraceid%253DYXV0aG9yJTNEJUU1JTgwJTlBJUU4JUI0JUE0JTI2dGl0bGUlM0QlRTYlODAlQTUlRTklODAlOUYlRTYlOTAlQUQlRTUlQkIlQkElMjBTZXJ2ZXJsZXNzJTIwQUklMjAlRTUlQkElOTQlRTclOTQlQTglRUYlQkMlOUElRTQlQjglQkElRTQlQkQlQTAlRTUlODYlOTklRTglQUYlOTc%253D%26amp%3Bsrc%3Darticle)是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息[参考](https://help.aliyun.com/product/50980.html)。
> **Fun**: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档[参考](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Faliyun%2Ffun)。
**备注: 本文介绍的技巧需要 Fun 版本大于等于 3.2.0。**
![](https://data-analysis.cn-shanghai.log.aliyuncs.com/logstores/article-logs/track_ua.gif?APIVersion=0.6.0&title=%E6%80%A5%E9%80%9F%E6%90%AD%E5%BB%BA%20Serverless%20AI%20%E5%BA%94%E7%94%A8%EF%BC%9A%E4%B8%BA%E4%BD%A0%E5%86%99%E8%AF%97&author=%E5%80%9A%E8%B4%A4&src=article)
依赖工具
----
本项目是在 MacOS 下开发的,涉及到的工具是平台无关的,对于 Linux 和 Windows 桌面系统应该也同样适用。在开始本例之前请确保如下工具已经正确的安装,更新到最新版本,并进行正确的配置。
* [Docker](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fwww.docker.com%2F)
* [Fun](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Falibaba%2Ffuncraft)
* [Fcli](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Faliyun%2Ffcli)
Fun 和 Fcli 工具依赖于 docker 来模拟本地环境。
对于 MacOS 用户可以使用 [homebrew](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fbrew.sh%2F) 进行安装:
```
brew cask install docker
brew tap vangie/formula
brew install fun
brew install fcli
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
Windows 和 Linux 用户安装请参考:
1. [https://github.com/aliyun/fun/blob/master/docs/usage/installation.md](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Falibaba%2Ffuncraft%2Fblob%2Fmaster%2Fdocs%2Fusage%2Finstallation.md)
2. [https://github.com/aliyun/fcli/releases](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Faliyun%2Ffcli%2Freleases)
安装好后,记得先执行 `fun config` 初始化一下配置。
**注意**, 如果你已经安装过了 fun,确保 fun 的版本在 3.2.0 以上。
```
$ fun --version
3.2.2
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
背景
--
AI model serving 是函数计算一个比较典型的应用场景。数据科学家训练好模型以后往往需要找软件工程师把模型变成系统或者服务,通常把这个过程称之为 model serving。函数计算无需运维和弹性伸缩的特性,正好符合数据科学家对高可用分布式系统的诉求。本文将介绍把一个 TensorFlow CharRNN 训练的自动写五言绝句古诗的模型部署到函数计算的例子。
基本上所有的 FaaS 平台为了减少平台的冷启动,都会设置代码包限制,函数计算也不例外。由于 python TensorFlow 依赖库和训练的模型的文件有数百兆,即使压缩也远超了函数计算 50M 代码包大小的限制。对于这类超大体积的文件,函数计算命令行 Fun 工具原生支持了这种大依赖部署(3.2.0 版本以上),按照向导的提示操作即可。
快速开始
----
### 1\. 克隆 poetry 项目
```
git clone https://github.com/vangie/poetry.git
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
### 2\. 安装依赖
由于训练模型的脚本比较费时,所以训练好的模型已经提前存放在 model 目录中。如果您想重新训练模型,执行 `make train` 即可。
```
$ fun install
using template: template.yml
start installing function dependencies without docker
building poetry/poetry
Funfile exist, Fun will use container to build forcely
Step 1/3 : FROM registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-python3.6:build-1.7.7
---> 373f5819463b
Step 2/3 : WORKDIR /code
---> Using cache
---> f9f03330ddde
Step 3/3 : RUN fun-install pip install tensorflow
---> Using cache
---> af9e756d07c7
sha256:af9e756d07c77ac25548fa173997065c9ea8d92e98c760b1b12bab1f3f63b112
Successfully built af9e756d07c7
Successfully tagged fun-cache-1b39d414-0348-4823-b1ec-afb05e471666:latest
copying function artifact to /Users/ellison/poetry
copy from container /mnt/auto/. to localNasDir
Install Success
Tips for next step
======================
* Invoke Event Function: fun local invoke
* Invoke Http Function: fun local start
* Build Http Function: fun build
* Deploy Resources: fun deploy
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
### 3\. 本地运行函数
执行 `fun local invoke` 可以在本地运行函数,正确的返回内容如下:
```
$ fun local invoke poetry
Missing invokeName argument, Fun will use the first function poetry/poetry as invokeName
skip pulling image aliyunfc/runtime-python3.6:1.7.7...
FunctionCompute python3 runtime inited.
FC Invoke Start RequestId: b125bd4b-0d23-447b-8d8c-df36808a458b
.......(省略了部分日志)
犬差花上水风,一月秋中时。
江水无人去,山山有不知。
江山一中路,不与一时还。
山水不知处,江阳无所逢。
山风吹水色,秋水入云中。
水月多相见,山城入水中。
江云无处处,春水不相归。
野寺春江远,秋风落月深。
RequestId: 938334c4-5407-4a72-93e1-6d59e52774d8 Billed Duration: 14074 ms Memory Size: 1998 MB Max Memory Used: 226 MB
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
### 4\. 部署函数
通过 `fun deploy` 部署函数并上传函数依赖到 nas。
```
fun deploy
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
fun 会自动完成依赖部署,当 fun deploy 检测到打包的依赖超过了平台限制(50M),会进入到配置向导,帮助用户自动化的配置。
![image.png](https://cdn.nlark.com/yuque/0/2019/png/502931/1577342619409-f43d3642-5526-458c-8519-96e4d61fbb4a.png#align=left&display=inline&height=60&name=image.png&originHeight=120&originWidth=1484&size=182866&status=done&style=none&width=742)
选择 "Y" 之后就不需要做其他事情,等到部署完成即可。
### 5\. 运行远端函数
通过 fun invoke 调用远端函数(也可以通过[函数计算控制台](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E6%2580%25A5%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BA%2520Serverless%2520AI%2520%25E5%25BA%2594%25E7%2594%25A8%25EF%25BC%259A%25E4%25B8%25BA%25E4%25BD%25A0%25E5%2586%2599%25E8%25AF%2597%26amp%3Bauthor%3D%25E5%2580%259A%25E8%25B4%25A4%26amp%3Burl%3Dhttp%253A%252F%252Ffc.console.aliyun.com%252F%253Ffctraceid%253DYXV0aG9yJTNEJUU1JTgwJTlBJUU4JUI0JUE0JTI2dGl0bGUlM0QlRTYlODAlQTUlRTklODAlOUYlRTYlOTAlQUQlRTUlQkIlQkElMjBTZXJ2ZXJsZXNzJTIwQUklMjAlRTUlQkElOTQlRTclOTQlQTglRUYlQkMlOUElRTQlQjglQkElRTQlQkQlQTAlRTUlODYlOTklRTglQUYlOTc%253D%26amp%3Bsrc%3Darticle)调用):
```
$ fun invoke
using template: template.yml
Missing invokeName argument, Fun will use the first function poetry/poetry as invokeName
========= FC invoke Logs begin =========
省略部分日志...
Restored from: /mnt/auto/model/poetry/model-10000
FC Invoke End RequestId: c0d7947d-7c44-428e-a5a0-30e6da6d1d0f
Duration: 18637.47 ms, Billed Duration: 18700 ms, Memory Size: 2048 MB, Max Memory Used: 201.10 MB
========= FC invoke Logs end =========
FC Invoke Result:
役不知此月,不是无年年。
何事无时去,谁堪得故年。
不知无限处,相思在山山。
何必不知客,何当不有时。
相知无所见,不得是人心。
不得无年日,何时在故乡。
不知山上路,不是故人人。
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
至此,已经将古诗创作程序成功部署到函数计算了。
[原文链接](https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/739645%3Futm_content%3Dg_1000094672)
本文为阿里云内容,未经允许不得转载。
分享到:
相关推荐
【云上搭建Serverless AI实验室】技术方案详细解析 在当今的云计算环境中,Serverless架构逐渐成为构建AI实验室的新选择。Serverless AI实验室的核心优势在于它能够极大地简化基础设施的管理和运维工作,使得科研...
一个 :high_voltage: :high_voltage: 应用程序的插件 :package: 安装 使用npm将插件安装在无服务器项目中。 $ npm i -D serverless-rust :light_bulb: -D标志将其添加到npm talk的开发依赖项中 :light_bulb: 该...
Serverless 架构:无服务器应用与 AWS Serverless 架构是云计算领域的一大热点,它允许开发者专注于自身应用的逻辑实现,而不需要关心服务器的运维和管理。 Serverless 架构具有降低开发成本、提高运维效率、快速...
Serverless实时数仓的核心需求包括稳定性、业务/任务之间如何隔离扩缩容、启停怎么样不影响业务、快速拉起能力、Gateway接入能力、流量自动转发、任务隔离、读写隔离、写写隔离、读隔离、不同部门资源隔离、动态扩...
Fission无服务器插件该插件将支持纳入。先决条件确保您正在运行裂变... helloprovider: name: fission runtime: python2.7plugins: - serverless-fissionfunctions: hello: description: ' Hello function ' handler
Serverless架构是指一种软件架构模式,它将应用程序解耦合为多个小型、独立的组件,每个组件都可以独立地扩展和部署。这种架构模式可以提高应用程序的灵活性、可扩展性和可维护性。 应用场景: 1. 实时数据处理:...
- **模型管理**:为算法开发者提供一个易于使用的AI模型管理平台,便于开发调试。 - **快速发布与上线**:帮助业务快速发布和上线,具有完整的应用开发、调试、发布流程。 #### 三、Serverless技术应对AI计算力...
从微服务到Serverless 架构应用与实践 微服务架构是当前非常流行的一种架构形式,它可以将复杂的系统拆分成多个独立的服务单元,每个服务单元都可以独立开发、测试、部署和维护,从而提高系统的灵活性和可维护性。...
serverless-plugin-typescript, 无服务器插件,支持零配置 serverless-plugin-typescript 无服务器插件,支持零配置特性零配置:不需要安装任何其他编译器或者插件就可以使用这个框支持ES2015语法 特性( export,...
它会自动为每个功能附加图层 当dependencies更新时,它将创建新层的版本 如果dependencies未更改,则不会发布新层 它大大减少了lambda的大小 它减少了部署时间。 您可以在所有lambda函数之间共享相同的层(库) ...
serverless-docker:使用Docker构建无服务器应用程序
Serverless技术的一个典型应用是通过AWS Lambda、Google Cloud Functions、Azure Functions等服务,将函数部署为独立的、无状态的服务。当事件或HTTP请求触发函数执行时,云服务提供商负责执行代码,并且只在函数...
全栈Serverless应用开发是现代云计算领域的一项重要技术,它将传统的应用程序架构转变为无服务器模式,从而降低了运维复杂性,提升了资源效率。本指南旨在帮助开发者深入理解和实践全栈Serverless应用的构建与管理。...
3. **Serverless Tool**:此项目“Serverless-Tool”是一个专为前端开发者设计的工具集合,它利用Serverless架构,提供了一系列方便前端开发的功能。这可能包括自动化部署、代码打包、API调用等功能,帮助开发者提高...
Serverless架构是现代云计算的一种重要模式,它将传统的服务器运维工作转移到云服务提供商,使得开发者无需关心基础设施的管理和维护,只需关注应用的核心业务逻辑。在本文中,我们将深入探讨如何利用"The ...
无服务器Chrome 无服务器的Chrome包含了开始在... 首先,全局安装serverless ( npm install -g serverless ),然后: serverless create -u https://github.com/adieuadieu/serverless-chrome/tree/master/example
Serverless进一步发展为更广泛的平台即服务(PaaS)形式,如Knative这样的Serverless构建层,以及Service Mesh等服务网格,它们共同构建了一个自动化管理和调度的环境,简化了应用部署和运维。 Serverless的引入也...
cd serverless-postgraphql :floppy_disk: 安装 npm install :rocket: 重建和部署 npm run rebuild-and-deploy :hot_beverage: 咖啡时间:AWS需要约10分钟来设置Postgres数据库 pgEndpoint服务器部署的结果来看,...
Serverless架构则是微服务架构的进一步发展,Serverless架构将应用程序部署到云端,并且使得开发者不需要关心服务器的管理和维护,开发者只需要关心代码的编写和部署。Serverless架构可以大大减少开发和维护成本,...