首先介紹下在本文出現的幾個比較重要的概念:python
函數計算(Function Compute): 函數計算是一個事件驅動的服務,經過函數計算,用戶無需管理服務器等運行狀況,只需編寫代碼並上傳。函數計算準備計算資源,並以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。
Fun: Fun 是一個用於支持 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日誌服務等資源。它經過一個資源配置文件(template.yml),協助您進行開發、構建、部署操做。git
備註: 本文介紹的技巧須要 Fun 版本大於等於 2.13.0。github
本項目是在 MacOS 下開發的,涉及到的工具是平臺無關的,對於 Linux 和 Windows 桌面系統應該也一樣適用。在開始本例以前請確保以下工具已經正確的安裝,更新到最新版本,並進行正確的配置。docker
Fun 和 Fcli 工具依賴於 docker 來模擬本地環境。服務器
對於 MacOS 用戶可使用 homebrew 進行安裝:less
brew cask install docker brew tap vangie/formula brew install fun brew install fcli
Windows 和 Linux 用戶安裝請參考:運維
安裝好後,記得先執行 fun config
初始化一下配置。分佈式
注意, 若是你已經安裝過了 fun,確保 fun 的版本在 2.13.0 以上。函數
$ fun --version 2.13.0
AI model serving 是函數計算一個比較典型的應用場景。數據科學家訓練好模型之後每每須要找軟件工程師把模型變成系統或者服務,一般把這個過程稱之爲 model serving。函數計算無需運維和彈性伸縮的特性,正好符合數據科學家對高可用分佈式系統的訴求。本文將介紹把一個 TensorFlow CharRNN 訓練的自動寫五言絕句古詩的模型部署到函數計算的例子。因爲 python TensorFlow 依賴庫和訓練的模型的文件有數百兆,即便壓縮也遠超了函數計算 50M 代碼包大小的限制。對於這類超大致積的文件,採用 NAS 文件系統是最佳選擇。本文會介紹一種 Fun + NAS 的方法來解決 tensorflow serving 問題。工具
git clone https://github.com/vangie/poetry.git
修改下面的 VPC 配合和 NAS 配置,這部分配置須要分別去相應的控制檯進行建立並把對應的值拷貝出來。
VpcConfig: VpcId: 'vpc-uf6r2qatgfbdhgy2rhplo' VSwitchIds: [ 'vsw-uf669ekf9zser1hrmgru4' ] SecurityGroupId: 'sg-uf6jcqx1ogbr37hkvgxv' NasConfig: UserId: 10003 GroupId: 10003 MountPoints: - ServerAddr: '3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com:/' MountDir: '/mnt/nas'
fun install
安裝依賴。fun.yml 文件裏聲明瞭 tensorflow 的依賴和包括了訓練模型的腳本命令,因此執行會比較費時。fun local invoke poetry
,這一步主要是爲了生成 .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com 目錄。cp -R .fun/python .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/lib/
將第一步安裝的 tensorflow 依賴包拷貝到本地的 nas 目錄。cp -R model .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/
將第一步訓練的模型拷貝到本地的 nas 目錄本地測試
執行 fun local invoke poetry
,正確的返回結果以下
$ fun local invoke poetry Reading event data from stdin, which can be ended with Enter then Ctrl+D (you can also pass it from file with -e) mouting local nas mock dir /Users/vangie/Desktop/poetry/.fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/ into container /mnt/nas skip pulling image aliyunfc/runtime-python3.6:1.5.2... FunctionCompute python3 runtime inited. FC Invoke Start RequestId: 938334c4-5407-4a72-93e1-6d59e52774d8 .......(省略了部分日誌) 不見江中客,無言此別歸。 江風秋雨落,山色夜山長。 不問江南客,孤舟在故鄉。 一年如遠別,何處是歸人。 一晚上無人 RequestId: 938334c4-5407-4a72-93e1-6d59e52774d8 Billed Duration: 14074 ms Memory Size: 1998 MB Max Memory Used: 226 MB
目前 NAS 服務還沒有提供直接上傳文件的 API 和命令行。NAS 控制檯提供的上傳方式是先上傳到 OSS,再由 OSS 導入 NAS 的功能,該功能須要申請開通。此外還有兩種方法:
下面咱們假設 ecs 已經買好了,而後使用下面的命令拷貝文件到 nas 並解壓
# 掛載 nas 網盤 mount -t nfs -o vers=4.0 3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com:/ /mnt/nas # 壓縮本地要上傳的目錄 cd .fun/nas/3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com/ tar -czvf nas.tar.gz lib model # 拷貝到 nas 目錄 scp nas.tar.gz root@47.103.83.174:/mnt/nas # 解壓 tar -xvf nas.tar.gz
$ fun deploy using region: cn-shanghai using accountId: ***********4733 using accessKeyId: ***********EUz3 using timeout: 60 Waiting for service poetry to be deployed... Waiting for function poetry to be deployed... Waiting for packaging function poetry code... package function poetry code done function poetry deploy success service poetry deploy success $ fcli function invoke -s poetry -f poetry 換<unk>金龍瑁旒鴦垓癘萏萏瑁蟀瑁鴣靂萏萏萏蟀靂萏靂瑁靂瑁萏瑁瑁瑁鴣鴣蟀蟀蟀鴣蟀蟀萏萏萏蟀瑁萏蓉熳瓏蟀熳萏緲皪憚萏萏皪憚皪琶萏萏瓏琵癘緲轤寞雨風香。 春山無到處,秋色向江流。 不是東南望,孤山有一情。 春風不可見,一日向江流。 不見無人去,無時見白頭。 相思一相見,相見一中風。 何日一相識,何人有此心。 何年不可識,相憶在江山。 一日一秋水,何來一山風。 相逢有何計,不見故人心。 不得何人去,無年不自同。 一來多此路,何處不堪尋。 此日多無事,無時自不知。 何年無此處,不是不相逢。 一日無如遠,春風不自歸。 何當有君客,不見舊人情。 此去相思處,不堪何處歸。 不知青柳外,不得不堪親。 不見青花去,無人
至此,已經將古詩創做程序成功部署到函數計算了。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。