急速搭建 Serverless AI 應用:爲你寫詩

前言

首先介紹下在本文出現的幾個比較重要的概念: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

  1. https://github.com/aliyun/fun/blob/master/docs/usage/installation.md
  2. https://github.com/aliyun/fcli/releases

安裝好後,記得先執行 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 版本以上),按照嚮導的提示操做便可。服務器

快速開始

1. 克隆 poetry 項目

git clone https://github.com/vangie/poetry.git

2. 安裝依賴

因爲訓練模型的腳本比較費時,因此訓練好的模型已經提早存放在 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

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

4. 部署函數

經過 fun deploy 部署函數並上傳函數依賴到 nas。

fun deploy

fun 會自動完成依賴部署,當 fun deploy 檢測到打包的依賴超過了平臺限制(50M),會進入到配置嚮導,幫助用戶自動化的配置。

image.png

選擇 "Y" 以後就不須要作其餘事情,等到部署完成便可。

5. 運行遠端函數

經過 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:
役不知此月,不是無年年。
何事無時去,誰堪得故年。
不知無限處,相思在山山。
何須不知客,何當不有時。
相知無所見,不得是人心。
不得無年日,什麼時候在故鄉。
不知山上路,不是故人人。

至此,已經將古詩創做程序成功部署到函數計算了。

更多參考

  1. 21 個項目玩轉深度學習——基於 TensorFlow 的實踐詳解
  2. 開發函數計算的正確姿式 —— Fun 自動化 NAS 配置
  3. 開發函數計算的正確姿式 —— 使用 Fun NAS 管理 NAS 資源
阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」
相關文章
相關標籤/搜索