首先介绍下在本文出现的几个比较重要的概念:html
函数计算(Function Compute): 函数计算是一个事件驱动的服务,经过函数计算,用户无需管理服务器等运行状况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它经过一个资源配置文件(template.yml),协助您进行开发、构建、部署操做。Fun 的更多文档 参考。
备注: 本文介绍的技巧须要 Fun 版本大于等于 3.2.0。python
本项目是在 MacOS 下开发的,涉及到的工具是平台无关的,对于 Linux 和 Windows 桌面系统应该也一样适用。在开始本例以前请确保以下工具已经正确的安装,更新到最新版本,并进行正确的配置。git
Fun 和 Fcli 工具依赖于 docker 来模拟本地环境。
对于 MacOS 用户可使用 homebrew 进行安装:github
brew cask install docker brew tap vangie/formula brew install fun brew install fcli
Windows 和 Linux 用户安装请参考:docker
安装好后,记得先执行 fun config
初始化一下配置。shell
注意, 若是你已经安装过了 fun,确保 fun 的版本在 3.2.0 以上。segmentfault
$ fun --version 3.2.2
AI model serving 是函数计算一个比较典型的应用场景。数据科学家训练好模型之后每每须要找软件工程师把模型变成系统或者服务,一般把这个过程称之为 model serving。函数计算无需运维和弹性伸缩的特性,正好符合数据科学家对高可用分布式系统的诉求。本文将介绍把一个 TensorFlow CharRNN 训练的自动写五言绝句古诗的模型部署到函数计算的例子。bash
基本上全部的 FaaS 平台为了减小平台的冷启动,都会设置代码包限制,函数计算也不例外。因为 python TensorFlow 依赖库和训练的模型的文件有数百兆,即便压缩也远超了函数计算 50M 代码包大小的限制。对于这类超大致积的文件,函数计算命令行 Fun 工具原生支持了这种大依赖部署(3.2.0 版本以上),按照向导的提示操做便可。服务器
git clone https://github.com/vangie/poetry.git
因为训练模型的脚本比较费时,因此训练好的模型已经提早存放在 model 目录中。若是您想从新训练模型,执行 make train
便可。less
$ 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
执行 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
经过 fun deploy
部署函数并上传函数依赖到 nas。
fun deploy
fun 会自动完成依赖部署,当 fun deploy 检测到打包的依赖超过了平台限制(50M),会进入到配置向导,帮助用户自动化的配置。
选择 "Y" 以后就不须要作其余事情,等到部署完成便可。
经过 fun invoke 调用远端函数(也能够经过函数计算控制台调用):
$ 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: 役不知此月,不是无年年。 何事无时去,谁堪得故年。 不知无限处,相思在山山。 何须不知客,何当不有时。 相知无所见,不得是人心。 不得无年日,什么时候在故乡。 不知山上路,不是故人人。
至此,已经将古诗创做程序成功部署到函数计算了。
“ 阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,作最懂云原生开发者的技术圈。”