上海電機(jī)學(xué)院 呂海龍 遲冬祥
大數(shù)據(jù)時(shí)代,通過AI對(duì)數(shù)據(jù)就行識(shí)別及處理的方法得到了廣泛的應(yīng)用。對(duì)于無AI開發(fā)經(jīng)驗(yàn)的個(gè)人或企業(yè),不具備算法開發(fā)能力,但當(dāng)有利用AI模型進(jìn)行生產(chǎn)或數(shù)據(jù)分析的業(yè)務(wù)需求時(shí)再去學(xué)習(xí)AI開發(fā),顯然會(huì)消耗很多的時(shí)間成本。市面上有很多自動(dòng)機(jī)器學(xué)習(xí)工具,開發(fā)者不需要較高的算法知識(shí),只需要把數(shù)據(jù)上傳并標(biāo)注,選擇合適的模型,點(diǎn)擊開始訓(xùn)練,后臺(tái)就能自動(dòng)訓(xùn)練模型并部署上線。比如谷歌的AutoML、微軟的Custom Vision,百度的EasyDL,以及華為云的ModelArts。
華為提供的ModelArts平臺(tái)具有圖形化操作界面,同時(shí)提供了常用的算法框架和預(yù)置算法,降低了AI開發(fā)的難度。針對(duì)有大量業(yè)務(wù)數(shù)據(jù)卻不具備AI開發(fā)經(jīng)驗(yàn),無法進(jìn)行高效生產(chǎn)的企業(yè),本文提出了使用ModelArts平臺(tái)高效開發(fā)AI模型的方案,以解決上述痛點(diǎn)問題,并以AI初學(xué)者為視角嘗試在華為AI開發(fā)平臺(tái)ModelArts上進(jìn)行圖像識(shí)別原型的開發(fā)和部署,完成了圖片識(shí)別模型并將其部署到了網(wǎng)頁端,驗(yàn)證了無經(jīng)驗(yàn)的AI開發(fā)者基于ModelArts平臺(tái)完成從AI模型開發(fā)到部署的可行性。
ModelArts是由華為公司提供的、面向AI開發(fā)者的一站式開發(fā)平臺(tái),“一站式”是指AI開發(fā)的各個(gè)環(huán)節(jié),包括數(shù)據(jù)處理、算法開發(fā)、模型訓(xùn)練、模型部署都可以在ModelArts上完成。提供海量數(shù)據(jù)預(yù)處理及半自動(dòng)化標(biāo)注、大規(guī)模分布式訓(xùn)練、自動(dòng)化模型生成及端-邊-云模型按需部署能力,幫助用戶快速創(chuàng)建和部署模型,管理全周期AI工作流。筆者嘗試在ModelArts平臺(tái)開發(fā)了一個(gè)圖片識(shí)別模型并將其部署到了網(wǎng)頁端。
在進(jìn)行模型開發(fā)或訓(xùn)練等操作之前,需要將數(shù)據(jù)集導(dǎo)入到華為的數(shù)據(jù)存儲(chǔ)服務(wù)OBS中。在ModelArts中,可以在“數(shù)據(jù)管理”頁面,完成數(shù)據(jù)導(dǎo)入、數(shù)據(jù)標(biāo)注等操作,也可以導(dǎo)入現(xiàn)成的數(shù)據(jù)集,為模型構(gòu)建做好數(shù)據(jù)準(zhǔn)備。
(1)導(dǎo)入圖片數(shù)據(jù),標(biāo)注標(biāo)簽并生成數(shù)據(jù)集。數(shù)據(jù)標(biāo)注任務(wù)中,一般由一個(gè)人完成,但是針對(duì)數(shù)據(jù)集較大時(shí),需要多人協(xié)助完成。ModelArts提供了團(tuán)隊(duì)標(biāo)注功能,可以由多人組成一個(gè)標(biāo)注團(tuán)隊(duì),針對(duì)同一個(gè)數(shù)據(jù)集進(jìn)行標(biāo)注管理。
(2)導(dǎo)入現(xiàn)成的數(shù)據(jù)集。開發(fā)中,筆者嘗試導(dǎo)入現(xiàn)成數(shù)據(jù)集。數(shù)據(jù)集文件格式如圖1所示:
圖1 數(shù)據(jù)集格式Fig.1 Data set format
(1)選取合適的預(yù)置算法。如果不具備算法開發(fā)能力,可以使用ModelArts內(nèi)置的預(yù)置算法,通過簡(jiǎn)單的調(diào)參,即可創(chuàng)建訓(xùn)練作業(yè)構(gòu)建模型,提高了模型開發(fā)效率。ModelArts在AI Gallery中發(fā)布了較多官方算法,比如用于物體檢測(cè)算法YOLOv5,圖像分類算法ResNet等,可以幫助AI開發(fā)者快速開始訓(xùn)練和部署模型。筆者選用了AI Gallery提供的ResNet殘差神經(jīng)網(wǎng)絡(luò)算法進(jìn)行模型的圖片識(shí)別模型的訓(xùn)練。
(2)創(chuàng)建訓(xùn)練作業(yè)訓(xùn)練。ModelArts提供了模型訓(xùn)練的設(shè)置頁面(如圖2所示),在此頁面可以創(chuàng)建訓(xùn)練任務(wù),調(diào)整訓(xùn)練參數(shù)和選取合適的算力資源。在設(shè)置模型完數(shù)據(jù)集的輸入OBS路徑和模型的輸出OBS路徑后,點(diǎn)擊提交鍵即可進(jìn)行訓(xùn)練,等待模型生成。
(3)模型部署。訓(xùn)練完成的模型存儲(chǔ)在OBS路徑中,可以將模型在模型部署界面(如圖3所示)中導(dǎo)入并部署。部署為在線服務(wù)后,ModelArts提供了一個(gè)可調(diào)用的API接口,通過編寫POST語句對(duì)API發(fā)起預(yù)測(cè)請(qǐng)求,即可預(yù)測(cè)服務(wù)返回的結(jié)果。筆者編寫了調(diào)用在線服務(wù)API接口的.py程序以及基礎(chǔ)Flask框架的Web端網(wǎng)頁進(jìn)行預(yù)測(cè)應(yīng)用。整體項(xiàng)目分為三大部分:
圖3 部署界面Fig. 3 Deployment screen
(1)在線服務(wù)接口在接收到請(qǐng)求后需要進(jìn)行用戶提供鑒權(quán)信息Token進(jìn)行身份認(rèn)證,為保證預(yù)測(cè)服務(wù)安全,鑒權(quán)Token為動(dòng)態(tài)的,故需要編寫請(qǐng)求代碼獲取Token鑒權(quán)。部分代碼如下:
Url='https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens '
payload={}
Headers={"Content-Type":"application/json; charset=utf8" }
(2)編寫請(qǐng)求代碼通過POST方式調(diào)用預(yù)測(cè)API獲取預(yù)測(cè)結(jié)果,包括用Request函數(shù)發(fā)送預(yù)測(cè)請(qǐng)求,其中請(qǐng)求參數(shù)包含在服務(wù)的API,請(qǐng)求頭Header中包含第一部中的鑒權(quán)Token,還有本地文件的所在地址,用變量Path表示。部分代碼如下:
url='http://'# 此url為在線服務(wù)提供
payload={}
files=[('images',open(path,'rb'))]
headers={'X-Auth-Token':token.get_token() }
response=requests.request("POST",url,headers = headers,data=payload,files=files )
(3)編寫基于Flask的網(wǎng)頁交互代碼并在服務(wù)器端部署,包括導(dǎo)入Flask框架到Python環(huán)境,編寫Html網(wǎng)頁代碼并用render_template函數(shù)作網(wǎng)頁代碼的映射。Flask是由Python實(shí)現(xiàn)的一個(gè)Web框架,使開發(fā)者可以使用Python語言快速實(shí)現(xiàn)一個(gè)網(wǎng)站或Web服務(wù)。部分代碼如下:
from flask import Flask,render_template, request,jsonify
from werkzeug.utils import secure_filename
from datetime import timedelta
import os
app=Flask(__name__)
# 創(chuàng)建app應(yīng)用
app.debug=True
# 輸出
@app.route('/')
def hello_world():
return'Hello World!'
# 設(shè)置靜態(tài)文件緩存過期時(shí)間
app.send_file_max_age_default=timedelta( seconds=1)
# 添加路由
@app.route('http://114.215.184.36:5000/upload',methods=['POST','GET'])
def upload():
if request.method=='POST':
# 通過file標(biāo)簽獲取文件
f = request.files[ 'file' ]
# 當(dāng)前文件所在路徑
basepath=os.path.dirname(__file__)
# 一定要先創(chuàng)建該文件夾,不然會(huì)提示沒有該路徑
upload_path=os.path.join(basepath,'staticimage',secure_filename(f.filename))
# 保存文件
f.save(upload_path)
# 調(diào)用api函數(shù)
result=get_result(upload_path)
# 返回上傳成功界面
return render_template('upload_ok.html',result= result)
# 重新返回上傳界面
return render_template('upload.html')
if __name__=='__main__':
app.run(debug=True,port=8000)
網(wǎng)頁端簡(jiǎn)單的交互界面如圖4所示。
圖4 具備圖片識(shí)別功能的網(wǎng)頁端Fig.4 Web page with image recognition function
對(duì)于有人工智能編程基礎(chǔ)的開發(fā)者,常使用PyCharm工具開發(fā)算法或模型。對(duì)于沒有長期長時(shí)間訓(xùn)練作業(yè)的開發(fā)者,將本地代碼提交到ModelArts訓(xùn)練環(huán)境進(jìn)行訓(xùn)練,可以減少諸如GPU之類的算力硬件成本,ModelArts的AI平臺(tái)也提供了多種高性能的GPU和CPU供開發(fā)和選擇,提高模型開發(fā)的靈活性以及訓(xùn)練的效率和時(shí)間。為方便快速將本地代碼提交到公有云的訓(xùn)練環(huán)境,ModelArts提供了一個(gè)PyCharm插件工具PyCharm ToolKit,協(xié)助用戶完成代碼上傳、提交訓(xùn)練作業(yè)、將訓(xùn)練日志獲取到本地展示等,開發(fā)者只需要專注于本地的代碼開發(fā)即可。
筆者嘗試通過ModelArts提供了的PyCharm插件工具PyCharm ToolKit開發(fā)一個(gè)基于keras框架的VGG16卷積神經(jīng)網(wǎng)絡(luò)算法的貓狗識(shí)別模型。
在實(shí)際生產(chǎn)中,用戶可能會(huì)碰到訓(xùn)練數(shù)據(jù)為壓縮格式文件,若此時(shí)依舊按照上述數(shù)據(jù)集文件格式上傳OBS,則需要先對(duì)本地?cái)?shù)據(jù)集進(jìn)行解壓操作,再上傳至OBS,文件大小和數(shù)量的增加會(huì)導(dǎo)致上傳操作過于繁雜,時(shí)間效率低。筆者提供了上傳壓縮文件后通過指令解壓的方式解決了這一問題。用戶可以通過導(dǎo)入Moxing Framework模塊編輯本地和OBS間的傳輸代碼來解決此問題。Moxing Framework為Moxing提供基礎(chǔ)公共組件。目前,提供的Moxing Framework功能中主要包含操作和訪問OBS組件。
在本開發(fā)過程中,需要將533MB的貓狗數(shù)據(jù)集壓縮文件上傳至OBS,在上傳后,只需要在訓(xùn)練代碼中添加通過Moxing庫下載壓縮文件進(jìn)行解壓的代碼即可。
(1)在華為ModelArts的開發(fā)手冊(cè)中可以獲取ToolKit工具包的文件,打開本地PyCharm,選擇菜單欄的“File > Settings”,彈出“Settings”對(duì)話框。在“Settings”對(duì)話框中,首先單擊左側(cè)導(dǎo)航欄中的“Plugins”,然后單擊右側(cè)的設(shè)置圖標(biāo),選擇“Install Plugin from Disk”,彈出文件選擇對(duì)話框,如圖5所示。
圖5 選擇從本地安裝插件Fig.5 Selecting to install the plug-in locally
(2)在彈出的對(duì)話框中,從本地目錄選擇ToolKit的工具包,然后單擊“OK”,如圖6所示。
圖6 選擇插件文件Fig.6 Selecting the plug-in file
(3)單擊“Restart IDE”重啟PyCharm。在彈出的確認(rèn)對(duì)話框中,單擊“Restart”開始重啟。重啟成功后,打開一個(gè)Project,當(dāng)PyCharm工具欄出現(xiàn)“ModelArts”頁簽,表示ToolKit工具已安裝完成,如圖7所示。
圖7 重啟PyCharmFig.7 Restarting PyCharm
(4)當(dāng)PyCharm工具欄出現(xiàn)“ModelArts”頁簽,表示ToolKit工具已安裝完成,如圖8所示。
圖8 安裝成功Fig. 8 Successful installation
(1)將訓(xùn)練代碼的文件夾命名為‘src’,便于之后的文件路徑填寫,如圖9所示。
圖9 將訓(xùn)練代碼的文件夾命名為srcFig. 9 Names the folder for the training code src
(2)在Pycharm工具欄中,選擇“ModelArts->Edit Credential”進(jìn)行登錄。
為了確保服務(wù)的安全性,此處需要通過訪問密鑰(AK/SK)進(jìn)行登錄。登錄華為云,在頁面右上方單擊“控制臺(tái)”,進(jìn)入華為云管理控制臺(tái)。在控制臺(tái)右上角的帳戶名下方,單擊“我的憑證”,進(jìn)入“我的憑證”頁面。在“我的憑證”頁面,選擇“訪問密鑰>新增訪問密鑰”。填寫該密鑰的描述說明,單擊“確定”,如圖10所示。
圖10 登錄框Fig.10 Login box
根據(jù)提示單擊“立即下載”,下載密鑰,即可獲得一個(gè)名為“credentials”的csv格式文件,打開即可看到訪問密鑰,如圖11所示。
圖11 獲取訪問密鑰Fig.11 Obtaining the access key
(3)登陸后,選擇“ModelArts->Edit Training Job Configuration”在彈出的對(duì)話框中,如圖12所示示例配置訓(xùn)練參數(shù):
圖12 配置訓(xùn)練參數(shù)Fig.12 Configuring training parameters
此處AI引擎為TensorFlow-TF-1.13.1-pytho3.6?!癇oot File Path”為本地訓(xùn)練項(xiàng)目的路徑,“Directory”為訓(xùn)練代碼路徑?!癘BS Path”用于存放訓(xùn)練輸出模型和訓(xùn)練日志的目錄,“Data Path in OBS”為訓(xùn)練集所在目錄?!癝pecifications”為訓(xùn)練使用資源類型,目前支持公共資源池的CPU和GPU,規(guī)格與ModelArts管理控制臺(tái)中訓(xùn)練作業(yè)支持的規(guī)格一致且同步?!癈ompute Nodes”為計(jì)算資源節(jié)點(diǎn)個(gè)數(shù)。數(shù)量設(shè)置為1時(shí),表示單機(jī)運(yùn)行;數(shù)量設(shè)置大于1時(shí),表示后臺(tái)的計(jì)算模式為分布式。“Running Parameters”為運(yùn)行參數(shù)。如果您的代碼需要添加一些運(yùn)行參數(shù),可以在此處添加,多個(gè)運(yùn)行參數(shù)使用英文分號(hào)隔開,例如“key1=value1;key2=value2”。此參數(shù)也可以不設(shè)置,即保持為空。
設(shè)置好后,點(diǎn)擊“Apply and Run”,即可在本地開始調(diào)用云端ModelArts平臺(tái)訓(xùn)練模型,開發(fā)者可以在“ModelArts Training Log”框內(nèi)看到損失值,準(zhǔn)確率等參數(shù)訓(xùn)練的更新情況如圖13所示。
圖13 訓(xùn)練更新情況Fig.13 Training update
當(dāng)看到“ModelArts Event Log”框中出現(xiàn)下面的指示語時(shí),即說明模型訓(xùn)練成功,如圖14所示。
圖14 訓(xùn)練成功Fig.14 Successful training
訓(xùn)練成功后,可以在OBS的模型輸出路徑看到訓(xùn)練輸出模型的PB文件,開發(fā)者可以使用模型文件在ModelArts云端進(jìn)行在線部署。有后端開發(fā)經(jīng)驗(yàn)的開發(fā)者也可以將模型下載到本地,部署在自己的服務(wù)器上。本次實(shí)驗(yàn)筆者選擇將模型文件在ModelArts云端進(jìn)行在線部署。
此次的訓(xùn)練代碼是基于TensorFlow的Keras框架的VGG16神經(jīng)網(wǎng)絡(luò)算法。VGG16卷積神經(jīng)網(wǎng)絡(luò)算法對(duì)圖片識(shí)別非常有效。Keras是一個(gè)用Python編寫的高級(jí)神經(jīng)網(wǎng)絡(luò)API,它能夠以TensorFlow,CNTK,或者Theano作為后端運(yùn)行。自2017年起,Keras得到了TensorFlow團(tuán)隊(duì)的支持,其大部分組件被整合至TensorFlow的Python API中。在2018年TensorFlow 2.0.0公開后,Keras被正式確立為TensorFlow高階API,即tf.keras。tf.keras是Keras API在TensorFlow里的實(shí)現(xiàn)。這是一個(gè)高級(jí)API,用于構(gòu)建和訓(xùn)練模型,同時(shí)兼容TensorFlow的絕大部分功能。tf.keras使得TensorFlow 更容易使用,且保持了靈活性和性能。
(1)在OBS服務(wù)中,進(jìn)入訓(xùn)練設(shè)置時(shí)自定義的訓(xùn)練模型輸出路徑下面的output文件夾下,放入編寫好的模型配置文件“config.json”和模型推理文件“customize_service.py”。模型配置文件描述模型用途、模型計(jì)算框架、模型精度、推理代碼依賴包以及模型對(duì)外API接口。模型推理文件執(zhí)行預(yù)測(cè)數(shù)據(jù)的預(yù)處理功能,如圖15所示。
圖15 在輸出路徑放入推理及配置文件Fig.15 Puts the inference and configuration files in the output path
(2)上傳后回到Pycharm界面,點(diǎn)擊左下頁面的“ModelArts Explorer”,在跳出來的界面中,選擇訓(xùn)練本次訓(xùn)練項(xiàng)目的最高版本(當(dāng)前為V0001),點(diǎn)擊右鍵,選擇“Deploy to Service”,如圖16所示。
圖16 部署服務(wù)Fig.16 Deploying the service
在彈出窗口內(nèi)點(diǎn)擊“Auto Stop”可設(shè)置在線服務(wù)的自動(dòng)關(guān)閉時(shí)間(當(dāng)前為1小時(shí)候關(guān)閉)。在 “Specifications”選項(xiàng)中選擇在線服務(wù)的資源(當(dāng)前為“gpu型”)設(shè)置完畢后點(diǎn)擊“ok”,即可進(jìn)行在線服務(wù)部署,如圖17所示。
圖17 選擇部署資源Fig.17 Selecting deployment resources
開發(fā)者依舊可在“ModelArts Event Log”中查看在線服務(wù)部署進(jìn)度。部署成功后,“ModelArts Event Log”中會(huì)出現(xiàn)在線服務(wù)的API供開發(fā)者調(diào)用,如圖18所示。
圖18 顯示在線服務(wù)部署成功Fig.18 Shows the successful deployment of the online service
與傳統(tǒng)AI開發(fā)流程相比,ModelArts平臺(tái)的圖形化界面大大減輕了開發(fā)這的代碼學(xué)習(xí)成本。在數(shù)據(jù)集的制作與創(chuàng)建流程中,平臺(tái)完全為圖形化界面,對(duì)于圖像數(shù)據(jù),用戶只需對(duì)圖像進(jìn)行分類標(biāo)注或者對(duì)內(nèi)容圈選操作,無需制作例如XML等格式的圖像信息文件,降低了學(xué)習(xí)成本和時(shí)間成本。同時(shí)平臺(tái)具有團(tuán)隊(duì)標(biāo)注功能,可進(jìn)行多人線上標(biāo)注,提高了數(shù)據(jù)集制作效率。在模型訓(xùn)練流程中,ModelArts在AI Gallery中提供了較多的官方算法以及華為自研的高效算法,通過簡(jiǎn)單的調(diào)參,即可創(chuàng)建訓(xùn)練作業(yè)構(gòu)建模型,大大提高了模型開發(fā)效率和模型的準(zhǔn)確率,在最后的模型部署流程中,華為提供了在線服務(wù)API,通過簡(jiǎn)單的調(diào)用即可完成模型的預(yù)測(cè)功能。筆者從數(shù)據(jù)集導(dǎo)入到模型部署,在ModelArts平臺(tái)完成了完整的AI開發(fā)流程,最終生成了具有圖片識(shí)別的功能的網(wǎng)頁端,驗(yàn)證了無經(jīng)驗(yàn)的AI開發(fā)者利用AI開發(fā)平臺(tái)進(jìn)行模型開發(fā)實(shí)現(xiàn)業(yè)務(wù)需求的可行性。
另外對(duì)于有一定基礎(chǔ)的AI開發(fā)者,ModelArts平臺(tái)也提供了將訓(xùn)練代碼上傳云端進(jìn)行訓(xùn)練的模型開發(fā)方式,如果訂閱算法不能滿足需求或者用戶希望遷移本地算法至云上訓(xùn)練,可以考慮使用ModelArts支持的預(yù)置訓(xùn)練引擎實(shí)現(xiàn)算法構(gòu)建。在ModelArts中,這種方式稱為“使用自定義腳本訓(xùn)練”。ModelArts支持了諸如TensorFlow、pytorch、以及華為自研的Ascend等大多數(shù)主流的AI引擎。同時(shí),平臺(tái)提供多種高性能的GPU和CPU供開發(fā)和選擇,可以減少諸如GPU之類的算力硬件成本,提高了模型開發(fā)的靈活性以及訓(xùn)練的效率和時(shí)間。
使用AI開發(fā)平臺(tái)進(jìn)行AI模型的開發(fā)和部署大大提高了生產(chǎn)效率。因此,無論是資深的AI開發(fā)人員還是AI初學(xué)者,使用類似ModelArts的AI開發(fā)平臺(tái)進(jìn)行生產(chǎn)必然是未來的趨勢(shì)。