溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

發(fā)布時(shí)間:2020-07-15 08:52:44 來(lái)源:網(wǎng)絡(luò) 閱讀:129 作者:阿里系統(tǒng)軟件技術(shù) 欄目:云計(jì)算

目前深度學(xué)習(xí)應(yīng)用廣發(fā), 其中 AI 推理的在線服務(wù)是其中一個(gè)重要的可落地的應(yīng)用場(chǎng)景。本文將為大家介紹使用函數(shù)計(jì)算部署深度學(xué)習(xí) AI 推理的最佳實(shí)踐, ?其中包括使用 FUN 工具一鍵部署安裝第三方依賴、一鍵部署、本地調(diào)試以及壓測(cè)評(píng)估, 全方位展現(xiàn)函數(shù)計(jì)算的開發(fā)敏捷特性、自動(dòng)彈性伸縮能力、免運(yùn)維和完善的監(jiān)控設(shè)施。

1.1 DEMO 概述

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

通過(guò)上傳一個(gè)貓或者狗的照片, 識(shí)別出這個(gè)照片里面的動(dòng)物是貓還是狗

  • DEMO 示例效果入口: http://sz.mofangdegisn.cn
  • DEMO 示例工程地址: https://github.com/awesome-fc/cat-dog-classify

開通服務(wù)

免費(fèi)開通函數(shù)計(jì)算, 按量付費(fèi),函數(shù)計(jì)算有很大的免費(fèi)額度。

免費(fèi)開通文件存儲(chǔ)服務(wù)NAS, 按量付費(fèi)

1.2 解決方案

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

如上圖所示, 當(dāng)多個(gè)用戶通過(guò)對(duì)外提供的 url 訪問(wèn)推理服務(wù)時(shí)候,每秒的請(qǐng)求幾百上千都沒(méi)有關(guān)系, 函數(shù)計(jì)算平臺(tái)會(huì)自動(dòng)伸縮, 提供足夠的執(zhí)行實(shí)例來(lái)響應(yīng)用戶的請(qǐng)求, 同時(shí)函數(shù)計(jì)算提供了完善的監(jiān)控設(shè)施來(lái)監(jiān)控您的函數(shù)運(yùn)行情況。

1.3. Serverless 方案與傳統(tǒng)自建服務(wù)方案對(duì)比

1.3.1 卓越的工程效率

自建服務(wù) 函數(shù)計(jì)算 Serverless
基礎(chǔ)設(shè)施 需要用戶采購(gòu)和管理 無(wú)
開發(fā)效率 除了必要的業(yè)務(wù)邏輯開發(fā),需要自己建立相同線上運(yùn)行環(huán)境, 包括相關(guān)軟件的安裝、服務(wù)配置、安全更新等一系列問(wèn)題 只需要專注業(yè)務(wù)邏輯的開發(fā), 配合 FUN 工具一鍵資源編排和部署
學(xué)習(xí)上手成本 可能使用 K8S 或彈性伸縮( ESS ),需要了解更多的產(chǎn)品、名詞和參數(shù)的意義 會(huì)編寫對(duì)應(yīng)的語(yǔ)言的函數(shù)代碼即可

1.3.2 彈性伸縮免運(yùn)維

自建服務(wù) 函數(shù)計(jì)算 Serverless
彈性高可用 需要自建負(fù)載均衡 (SLB),彈性伸縮,擴(kuò)容縮容速度較 FC 慢 FC系統(tǒng)固有毫秒級(jí)別彈性伸縮,快速實(shí)現(xiàn)底層擴(kuò)容以應(yīng)對(duì)峰值壓力,免運(yùn)維
監(jiān)控報(bào)警查詢 ECS 級(jí)別的 metrics 提供更細(xì)粒度的函數(shù)執(zhí)行情況,每次訪問(wèn)函數(shù)執(zhí)行的 latency 和日志等, 更加完善的報(bào)警監(jiān)控機(jī)制

1.3.3 更低的成本

  • 函數(shù)計(jì)算 (FC) 固有自動(dòng)伸縮和負(fù)載均衡功能,用戶不需要購(gòu)買負(fù)載均衡 (SLB) 和彈性伸縮。
  • 具有明顯波峰波谷的用戶訪問(wèn)場(chǎng)景(比如只有部分時(shí)間段有請(qǐng)求,其他時(shí)間甚至沒(méi)有請(qǐng)求),選擇按需付費(fèi),只需為實(shí)際使用的計(jì)算資源付費(fèi)。

對(duì)于明顯波峰波谷或者稀疏調(diào)用具有低成本優(yōu)勢(shì), 同時(shí)還保持了彈性能力,以后業(yè)務(wù)規(guī)模做大以后并沒(méi)有技術(shù)切換成本,同時(shí)財(cái)務(wù)成本增長(zhǎng)配合預(yù)付費(fèi)也能保持平滑。

  • 部分請(qǐng)求持續(xù)平穩(wěn)的場(chǎng)景下,可以配合預(yù)付費(fèi)解決按需付費(fèi)較高單價(jià)問(wèn)題。函數(shù)計(jì)算成本優(yōu)化最佳實(shí)踐文檔。

假設(shè)有一個(gè)在線計(jì)算服務(wù),由于是CPU 密集型計(jì)算, 因此在這里我們將平均 CPU 利用率作為核心參考指標(biāo)對(duì)成本,以一個(gè)月為周期,10臺(tái) C5 ECS 的總計(jì)算力為例,總的計(jì)算量約為 30% 場(chǎng)景下, 各解決方案 CPU 資源利用率使用情況示意圖大致如下:

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

由上圖預(yù)估出如下計(jì)費(fèi)模型:

  • 函數(shù)計(jì)算預(yù)付費(fèi) 3CU 一個(gè)月: 246.27 元, 計(jì)算能力等價(jià)于 ECS 計(jì)算型 C5
  • ECS 計(jì)算型 C5 (2vCPU,4GB)+云盤: 包月219 元,按量: 446.4 元
  • 包月10 Mbps 的 SLB: 526.52 元(這里做了一定的流量假設(shè)), 彈性伸縮免費(fèi)
  • 飽和使用下,函數(shù)計(jì)算按量付費(fèi)的一臺(tái)機(jī)器成本約為按量付費(fèi) C5 ECS 的2 倍
平均CPU利用率 計(jì)算費(fèi)用 SLB 總計(jì)
函數(shù)計(jì)算組合付費(fèi) >=80% 738+X(246.27*3+X) 無(wú) <= 738+X
按峰值預(yù)留ECS <=30% 2190(10*219) 526.52 >=2716.52
彈性伸縮延遲敏感 <=50% 1314(102193/5) 526.52 >= 1840.52
彈性伸縮成本敏感 <=70% 938.57 (102193/7) 526.52 >= 1465.09

注:

  1. 這里假設(shè)函數(shù)邏輯沒(méi)有公網(wǎng)公網(wǎng)下行流量費(fèi)用, 即使有也是一致的, 這里成本比較暫不參與

  2. 延時(shí)敏感,當(dāng) CPU 利用率大于等于 50% 就需要開始進(jìn)行擴(kuò)容,不然更來(lái)不及應(yīng)對(duì)峰值

  3. 成本敏感,當(dāng) CPU 利用率大約 80% 即開始進(jìn)行擴(kuò)容, 能容受一定幾率的超時(shí)或者5XX

上表中, 其中函數(shù)計(jì)算組合付費(fèi)中的 X 為按需付費(fèi)的成本價(jià),假設(shè)按需付費(fèi)的計(jì)算量占整個(gè)計(jì)算量的 10%,假設(shè) CPU 利用率為100%, ?對(duì)應(yīng)上表,那么需要 3 臺(tái) ECS 的計(jì)算能力即可。因此 FC 按量付費(fèi)的成本 X = 3 ?446.4 ? 10% ? 2 = ?267.84 ( FC 按量付費(fèi)是按量 ECS 的2倍),這個(gè)時(shí)候函數(shù)計(jì)算組合付費(fèi)總計(jì) ?1005.8 元。 在這個(gè)模型預(yù)估里面, 只要 FC 按量付費(fèi)占整個(gè)計(jì)算量小于 20%, 即使不考慮 SLB, 單純考慮計(jì)算成本, 都是有一定優(yōu)勢(shì)的。

1.3.4. 小結(jié)

基于函數(shù)計(jì)算進(jìn)行 AI 推理等 CPU 密集型的主要優(yōu)勢(shì):

  1. 上手簡(jiǎn)單, 只專注業(yè)務(wù)邏輯開發(fā), 極大提高工程開發(fā)效率。
    • 自建方案有太多學(xué)習(xí)和配置成本,如針對(duì)不同場(chǎng)景,ESS 需要做各種不同的參數(shù)配置
    • 系統(tǒng)環(huán)境的維護(hù)升級(jí)等
  2. 免運(yùn)維,函數(shù)執(zhí)行級(jí)別粒度的監(jiān)控和告警。
  3. 毫秒級(jí)彈性擴(kuò)容,保證彈性高可用,同時(shí)能覆蓋延遲敏感和成本敏感類型。
  4. 在 CPU 密集型的計(jì)算場(chǎng)景下, 通過(guò)設(shè)置合理的組合計(jì)費(fèi)模式, 在如下場(chǎng)景中具有成本優(yōu)勢(shì):
    • 請(qǐng)求訪問(wèn)具有明顯波峰波谷, 其他時(shí)間甚至沒(méi)有請(qǐng)求
    • 有一定穩(wěn)定的負(fù)載請(qǐng)求, 但是有部分時(shí)間段請(qǐng)求量突變劇烈

打包代碼ZIP包和部署函數(shù)

FUN 操作簡(jiǎn)明視頻教程

開通服務(wù)

免費(fèi)開通函數(shù)計(jì)算, 按量付費(fèi),函數(shù)計(jì)算有很大的免費(fèi)額度。

免費(fèi)開通文件存儲(chǔ)服務(wù)NAS, 按量付費(fèi)

2.1 安裝第三方包到本地并上傳到NAS

2.1.1 安裝最新的Fun

  • 安裝版本為8.x 最新版或者10.x 、12.x nodejs
  • 安裝 funcraf

2.1.2 Clone 工程 & Fun 一鍵安裝第三方庫(kù)到本地

  • git clone https://github.com/awesome-fc/cat-dog-classify.git
  • 復(fù)制 .env_example 文件為 .env, 并且修改 .env 中的信息為自己的信息
  • 執(zhí)行 fun install -v, ?fun 會(huì)根據(jù) Funfile 中定義的邏輯安裝相關(guān)的依賴包

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

root@66fb3ad27a4c: ls .fun/nas/auto-default/classify
model  python
root@66fb3ad27a4c: du -sm .fun
697     .fun

根據(jù) Funfile 的定義:

  • 將第三方庫(kù)下載到 .fun/nas/auto-default/classify/python 目錄下
  • 本地 model 目錄移到 .fun/nas/auto-default/model 目錄下

安裝完成后,從這里我們看出, 函數(shù)計(jì)算引用的代碼包解壓之后已經(jīng)達(dá)到了 670 M, 遠(yuǎn)超過(guò) 50M 代碼包限制, 解決方案是 NAS 詳情可以參考: ?掛載NAS訪問(wèn),幸運(yùn)的是 FUN 工具一鍵解決了 nas 的配置和文件上傳問(wèn)題。

2.1.3. 將下載的依賴的第三方代碼包上傳到 NAS

fun nas init
fun nas info
fun nas sync
fun nas ls nas://classify:/mnt/auto/

依次執(zhí)行這些命令,就將本地中的 .fun/nas/auto-default 中的第三方代碼包和模型文件傳到 NAS 中, 依次看下這幾個(gè)命令的做了什么事情:

  • fun nas init: 初始化 NAS, 基于您的 .env 中的信息獲取(已有滿足條件的nas)或創(chuàng)建一個(gè)同region可用的nas
  • fun nas info: 可以查看本地 NAS 的目錄位置, 對(duì)于此工程是 $(pwd)/.fun/nas/auto-default/classify
  • fun nas sync: 將本地 NAS 中的內(nèi)容(.fun/nas/auto-default/classify)上傳到 NAS 中的 classify 目錄
  • fun nas ls nas:///mnt/auto/: 查看我們是否已經(jīng)正確將文件上傳到了 NAS

登錄 NAS 控制臺(tái) https://nas.console.aliyun.com 和 VPC 控制臺(tái) https://vpc.console.aliyun.com<br />可以觀察到在指定的 region 上有 NAS 和 相應(yīng)的 vpc 創(chuàng)建成功

2.2 本地調(diào)試函數(shù)

在 template.yml 中, 指定了這個(gè)函數(shù)是 http 類型的函數(shù), 所以根據(jù) fun 的提示:

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

執(zhí)行 fun local start, ?本地就會(huì)啟動(dòng)一個(gè) http server 來(lái)模擬函數(shù)的執(zhí)行, 然后我們 client 端可以使用 postman, curl 或者瀏覽器, 比如對(duì)于本例:

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

2.3 部署函數(shù)到FC平臺(tái)

本地調(diào)試OK 后,我們接下來(lái)將函數(shù)部署到云平臺(tái):

修改 template.yml LogConfig 中的 Project, 任意取一個(gè)不會(huì)重復(fù)的名字即可,有兩處地方需要更改,然后執(zhí)行

fun deploy

注意: ?template.yml 注釋的部分為自定義域名的配置, 如果想在 fun deploy 中完成這個(gè)部署工作:

  • 先去域名解析, 比如在示例中, 將域名 sz.mofangdegisn.cn 解析到 123456.cn-hangzhou.fc.aliyuncs.com, 對(duì)應(yīng)的域名、accountId 和 region 修改成自己的
  • 去掉 template.yml 中的注釋, 修改成自己的域名
  • 執(zhí)行 fun deploy

這個(gè)時(shí)候如果沒(méi)有自定義域名, 直接通過(guò)瀏覽器訪問(wèn)訪問(wèn)http trigger 的url, 比如 https://123456.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/classify/cat-dog/ 會(huì)被強(qiáng)制下載.

原因:https://help.aliyun.com/knowledge_detail/56103.html#HTTP-Trigger-compulsory-header

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

登錄控制臺(tái)https://fc.console.aliyun.com,可以看到service 和 函數(shù)已經(jīng)創(chuàng)建成功, 并且 service 也已經(jīng)正確配置。

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

在這里,我們發(fā)現(xiàn)第一次打開頁(yè)面訪問(wèn)函數(shù)的時(shí)候,執(zhí)行環(huán)境實(shí)例冷啟動(dòng)時(shí)間非常長(zhǎng), 如果是一個(gè)在線AI推理服務(wù),對(duì)響應(yīng)時(shí)間非常敏感,冷啟動(dòng)引起的毛刺對(duì)于這種類型的服務(wù)是不可接受的,接下來(lái),本文講解如何利用函數(shù)計(jì)算的預(yù)留模式來(lái)消除冷啟動(dòng)帶來(lái)的負(fù)面影響。

使用預(yù)留模式消除冷啟動(dòng)毛刺

函數(shù)計(jì)算具有動(dòng)態(tài)伸縮的特性, 根據(jù)并發(fā)請(qǐng)求量,自動(dòng)彈性擴(kuò)容出執(zhí)行環(huán)境來(lái)執(zhí)行環(huán)境,在這個(gè)典型的深度學(xué)習(xí)示例中,import keras 消耗的時(shí)間很長(zhǎng) , 在我們?cè)O(shè)置的 1 G 規(guī)格的函數(shù)中, 并發(fā)訪問(wèn)的時(shí)候耗時(shí)10s左右, 有時(shí)甚至20s+

start = time.time()
from keras.models import model_from_json
print("import keras time = ", time.time()-start)

3.1 函數(shù)計(jì)算設(shè)置預(yù)留

預(yù)留操作簡(jiǎn)明視頻教程

  • 在 FC 控制臺(tái),發(fā)布版本,并且基于該版本創(chuàng)建別名 prod,并且基于別名 prod 設(shè)置預(yù)留, 操作過(guò)程請(qǐng)參考:https://help.aliyun.com/document_detail/138103.html
  • 將該函數(shù)的 http trigger 和 自定義域名的設(shè)置執(zhí)行 prod 版本
    使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

一次壓測(cè)結(jié)果

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)
使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

從上面圖中我們可以看出,當(dāng)函數(shù)執(zhí)行的請(qǐng)求到來(lái)時(shí),優(yōu)先被調(diào)度到預(yù)留的實(shí)例中被執(zhí)行, 這個(gè)時(shí)候是沒(méi)有冷啟動(dòng)的,所以請(qǐng)求是沒(méi)有毛刺的, 后面隨著測(cè)試的壓力不斷增大(峰值TPS 達(dá)到 1184), 預(yù)留的實(shí)例不能滿足調(diào)用函數(shù)的請(qǐng)求, 這個(gè)時(shí)候函數(shù)計(jì)算就自動(dòng)進(jìn)行按需擴(kuò)容實(shí)例供函數(shù)執(zhí)行,此時(shí)的調(diào)用就有冷啟動(dòng)的過(guò)程, 從上面我們可以看出,函數(shù)的最大 latency 時(shí)間甚至達(dá)到了 32s,如果這個(gè)web AP是延時(shí)敏感的,這個(gè) latency 是不可接受的。

總結(jié)

  • 函數(shù)計(jì)算具有快速自動(dòng)伸縮擴(kuò)容能力
  • 預(yù)留模式很好地解決了冷啟動(dòng)中的毛刺問(wèn)題
  • 開發(fā)簡(jiǎn)單易上手,只需要關(guān)注具體的代碼邏輯, Fun 工具助您一鍵式部署運(yùn)用
  • 函數(shù)計(jì)算具有很好監(jiān)控設(shè)施, 您可以可視化觀察您函數(shù)運(yùn)行情況, 執(zhí)行時(shí)間、內(nèi)存等信息

有任何問(wèn)題歡迎進(jìn)掃碼進(jìn)釘釘群溝通

使用函數(shù)計(jì)算三步實(shí)現(xiàn)深度學(xué)習(xí) AI 推理在線服務(wù)

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)圈。”

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI