开发函数计算的正确姿势——tensorflow serving
前言
首先介紹下在本文出現的幾個比較重要的概念:
函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,用戶無需管理服務器等運行情況,只需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。
Fun: Fun 是一個用于支持 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置文件(template.yml),協助您進行開發、構建、部署操作。
備注: 本文介紹的技巧需要 Fun 版本大于等于 2.13.0。
依賴工具
本項目是在 MacOS 下開發的,涉及到的工具是平臺無關的,對于 Linux 和 Windows 桌面系統應該也同樣適用。在開始本例之前請確保如下工具已經正確的安裝,更新到最新版本,并進行正確的配置。
- Docker
- Fun
- Fcli
Fun 和 Fcli 工具依賴于 docker 來模擬本地環境。
對于 MacOS 用戶可以使用?homebrew?進行安裝:
brew cask install docker brew tap vangie/formula brew install fun brew install fcliWindows 和 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 問題。
快速開始
1. 克隆 poetry 項目
git clone https://github.com/vangie/poetry.git2. 修改 template.yml 文件
修改下面的 VPC 配合和 NAS 配置,這部分配置需要分別去相應的控制臺進行創建并把對應的值拷貝出來。
VpcConfig:VpcId: 'vpc-uf6r2qatgfbdhgy2rhplo'VSwitchIds: [ 'vsw-uf669ekf9zser1hrmgru4' ]SecurityGroupId: 'sg-uf6jcqx1ogbr37hkvgxv' NasConfig:UserId: 10003GroupId: 10003MountPoints:- ServerAddr: '3be7b4835d-pvs14.cn-shanghai.nas.aliyuncs.com:/'MountDir: '/mnt/nas'3. 安裝依賴
本地測試
執行?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/nasskip 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 MB5. 上傳文件至 NAS
目前 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.gz6. 部署和調用
$ fun deploy using region: cn-shanghai using accountId: ***********4733 using accessKeyId: ***********EUz3 using timeout: 60Waiting for service poetry to be deployed...Waiting for function poetry to be deployed...Waiting for packaging function poetry code...package function poetry code donefunction poetry deploy success service poetry deploy success$ fcli function invoke -s poetry -f poetry 換<unk>金龍瑁旒鴦垓癘萏萏瑁蟀瑁鴣靂萏萏萏蟀靂萏靂瑁靂瑁萏瑁瑁瑁鴣鴣蟀蟀蟀鴣蟀蟀萏萏萏蟀瑁萏蓉熳瓏蟀熳萏緲皪憚萏萏皪憚皪琶萏萏瓏琵癘緲轤寞雨風香。 春山無處處,秋色向江流。 不是東南望,孤山有一情。 春風不可見,一日向江流。 不見無人去,無時見白頭。 相思一相見,相見一中風。 何日一相識,何人有此心。 何年不可識,相憶在江山。 一日一秋水,何來一山風。 相逢有何計,不見故人心。 不得何人去,無年不自同。 一來多此路,何處不堪尋。 此日多無事,無時自不知。 何年無此處,不是不相逢。 一日無如遠,春風不自歸。 何當有君客,不見舊人情。 此去相思處,不堪何處歸。 不知青柳外,不得不堪親。 不見青花去,無人至此,已經將古詩創作程序成功部署到函數計算了。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的开发函数计算的正确姿势——tensorflow serving的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝这些程序员要逆天,滑板、画漫画、写
- 下一篇: 如果测试没有梦想,那跟咸鱼有什么区别?