本文介紹了使用函數計算部署深度學習 AI 推理的最佳實踐, 其中包括使用 FUN 工具一鍵部署安裝第三方依賴、一鍵部署、本地調試以及壓測評估, 全方位展示函數計算的開發敏捷特性、自動彈性伸縮能力、免運維和完善的監控設施。html
經過上傳一個貓或者狗的照片, 識別出這個照片裏面的動物是貓仍是狗node
開通服務python
免費開通函數計算, 按量付費,函數計算有很大的免費額度。linux
免費開通文件存儲服務NAS, 按量付費git
如上圖所示, 當多個用戶經過對外提供的 url 訪問推理服務時候,每秒的請求幾百上千都沒有關係, 函數計算平臺會自動伸縮, 提供足夠的執行實例來響應用戶的請求, 同時函數計算提供了完善的監控設施來監控您的函數運行狀況。github
對於明顯波峯波谷或者稀疏調用具備低成本優點, 同時還保持了彈性能力,之後業務規模作大之後並無技術切換成本,同時財務成本增加配合預付費也能保持平滑。
假設有一個在線計算服務,因爲是CPU 密集型計算, 所以在這裏咱們將平均 CPU 利用率做爲核心參考指標對成本,以一個月爲週期,10臺 C5 ECS 的總計算力爲例,總的計算量約爲 30% 場景下, 各解決方案 CPU 資源利用率使用狀況示意圖大體以下:web
由上圖預估出以下計費模型:ubuntu
注:瀏覽器
- 這裏假設函數邏輯沒有公網公網下行流量費用, 即便有也是一致的, 這裏成本比較暫不參與
- 延時敏感,當 CPU 利用率大於等於 50% 就須要開始進行擴容,否則更來不及應對峯值
- 成本敏感,當 CPU 利用率大約 80% 即開始進行擴容, 能容受必定概率的超時或者5XX
上表中, 其中函數計算組合付費中的 X 爲按需付費的成本價,假設按需付費的計算量佔整個計算量的 10%,假設 CPU 利用率爲100%, 對應上表,那麼須要 3 臺 ECS 的計算能力便可。所以 FC 按量付費的成本 X = 3 ️ 446.4 ️ 10% ️ 2 = 267.84 ( FC 按量付費是按量 ECS 的2倍),這個時候函數計算組合付費總計 1005.8 元。 在這個模型預估裏面, 只要 FC 按量付費佔整個計算量小於 20%, 即便不考慮 SLB, 單純考慮計算成本, 都是有必定優點的。併發
基於函數計算進行 AI 推理等 CPU 密集型的主要優點:
上手簡單, 只專一業務邏輯開發, 極大提升工程開發效率。
在 CPU 密集型的計算場景下, 經過設置合理的組合計費模式, 在以下場景中具備成本優點:
免費開通函數計算, 按量付費,函數計算有很大的免費額度。
免費開通文件存儲服務NAS, 按量付費
git clone https://github.com/awesome-fc/cat-dog-classify.git
fun install -v
, fun 會根據 Funfile 中定義的邏輯安裝相關的依賴包
根據 Funfile 的定義:
.fun/nas/auto-default/classify/python
目錄下.fun/nas/auto-default/model
目錄下安裝完成後,從這裏咱們看出, 函數計算引用的代碼包解壓以後已經達到了 670 M, 遠超過 50M 代碼包限制, 解決方案是 NAS 詳情能夠參考: 掛載NAS訪問,幸運的是 FUN 工具一鍵解決了 nas 的配置和文件上傳問題。
依次執行這些命令,就將本地中的 .fun/nas/auto-default 中的第三方代碼包和模型文件傳到 NAS 中, 依次看下這幾個命令的作了什麼事情:
fun nas init
: 初始化 NAS, 基於您的 .env 中的信息獲取(已有知足條件的nas)或建立一個同region可用的nasfun nas info
: 能夠查看本地 NAS 的目錄位置, 對於此工程是 $(pwd)/.fun/nas/auto-default/classifyfun nas sync
: 將本地 NAS 中的內容(.fun/nas/auto-default/classify)上傳到 NAS 中的 classify 目錄fun nas ls nas:///mnt/auto/
: 查看咱們是否已經正確將文件上傳到了 NAS登陸 NAS 控制檯 https://nas.console.aliyun.com 和 VPC 控制檯 https://vpc.console.aliyun.com
能夠觀察到在指定的 region 上有 NAS 和 相應的 vpc 建立成功
在 template.yml 中, 指定了這個函數是 http 類型的函數, 因此根據 fun 的提示:
執行 fun local start
, 本地就會啓動一個 http server 來模擬函數的執行, 而後咱們 client 端可使用 postman, curl 或者瀏覽器, 好比對於本例:
本地調試OK 後,咱們接下來將函數部署到雲平臺:
修改 template.yml LogConfig 中的 Project, 任意取一個不會重複的名字便可,有兩處地方須要更改,而後執行
fun deploy
注意: template.yml 註釋的部分爲自定義域名的配置, 若是想在 fun deploy 中完成這個部署工做:
fun deploy
這個時候若是沒有自定義域名, 直接經過瀏覽器訪問訪問http trigger 的url, 好比 https://123456.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/classify/cat-dog/
會被強制下載.
緣由:https://help.aliyun.com/knowledge_detail/56103.html#HTTP-Trigger-compulsory-header
登陸控制檯https://fc.console.aliyun.com,能夠看到service 和 函數已經建立成功, 而且 service 也已經正確配置。
在這裏,咱們發現第一次打開頁面訪問函數的時候,執行環境實例冷啓動時間很是長, 若是是一個在線AI推理服務,對響應時間很是敏感,冷啓動引發的毛刺對於這種類型的服務是不可接受的,接下來,本文講解如何利用函數計算的預留模式來消除冷啓動帶來的負面影響。
函數計算具備動態伸縮的特性, 根據併發請求量,自動彈性擴容出執行環境來執行環境,在這個典型的深度學習示例中,import keras 消耗的時間很長 , 在咱們設置的 1 G 規格的函數中, 併發訪問的時候耗時10s左右, 有時甚至20s+
從上面圖中咱們能夠看出,當函數執行的請求到來時,優先被調度到預留的實例中被執行, 這個時候是沒有冷啓動的,因此請求是沒有毛刺的, 後面隨着測試的壓力不斷增大(峯值TPS 達到 1184), 預留的實例不能知足調用函數的請求, 這個時候函數計算就自動進行按需擴容實例供函數執行,此時的調用就有冷啓動的過程, 從上面咱們能夠看出,函數的最大 latency 時間甚至達到了 32s,若是這個web AP是延時敏感的,這個 latency 是不可接受的。
本文做者:rsong
本文爲阿里雲內容,未經容許不得轉載。