上海電機學院 呂海龍 遲冬祥
大數據時代,通過AI對數據就行識別及處理的方法得到了廣泛的應用。對于無AI開發經驗的個人或企業,不具備算法開發能力,但當有利用AI模型進行生產或數據分析的業務需求時再去學習AI開發,顯然會消耗很多的時間成本。市面上有很多自動機器學習工具,開發者不需要較高的算法知識,只需要把數據上傳并標注,選擇合適的模型,點擊開始訓練,后臺就能自動訓練模型并部署上線。比如谷歌的AutoML、微軟的Custom Vision,百度的EasyDL,以及華為云的ModelArts。
華為提供的ModelArts平臺具有圖形化操作界面,同時提供了常用的算法框架和預置算法,降低了AI開發的難度。針對有大量業務數據卻不具備AI開發經驗,無法進行高效生產的企業,本文提出了使用ModelArts平臺高效開發AI模型的方案,以解決上述痛點問題,并以AI初學者為視角嘗試在華為AI開發平臺ModelArts上進行圖像識別原型的開發和部署,完成了圖片識別模型并將其部署到了網頁端,驗證了無經驗的AI開發者基于ModelArts平臺完成從AI模型開發到部署的可行性。
ModelArts是由華為公司提供的、面向AI開發者的一站式開發平臺,“一站式”是指AI開發的各個環節,包括數據處理、算法開發、模型訓練、模型部署都可以在ModelArts上完成。提供海量數據預處理及半自動化標注、大規模分布式訓練、自動化模型生成及端-邊-云模型按需部署能力,幫助用戶快速創建和部署模型,管理全周期AI工作流。筆者嘗試在ModelArts平臺開發了一個圖片識別模型并將其部署到了網頁端。
在進行模型開發或訓練等操作之前,需要將數據集導入到華為的數據存儲服務OBS中。在ModelArts中,可以在“數據管理”頁面,完成數據導入、數據標注等操作,也可以導入現成的數據集,為模型構建做好數據準備。
(1)導入圖片數據,標注標簽并生成數據集。數據標注任務中,一般由一個人完成,但是針對數據集較大時,需要多人協助完成。ModelArts提供了團隊標注功能,可以由多人組成一個標注團隊,針對同一個數據集進行標注管理。
(2)導入現成的數據集。開發中,筆者嘗試導入現成數據集。數據集文件格式如圖1所示:

圖1 數據集格式Fig.1 Data set format
(1)選取合適的預置算法。如果不具備算法開發能力,可以使用ModelArts內置的預置算法,通過簡單的調參,即可創建訓練作業構建模型,提高了模型開發效率。ModelArts在AI Gallery中發布了較多官方算法,比如用于物體檢測算法YOLOv5,圖像分類算法ResNet等,可以幫助AI開發者快速開始訓練和部署模型。筆者選用了AI Gallery提供的ResNet殘差神經網絡算法進行模型的圖片識別模型的訓練。
(2)創建訓練作業訓練。ModelArts提供了模型訓練的設置頁面(如圖2所示),在此頁面可以創建訓練任務,調整訓練參數和選取合適的算力資源。在設置模型完數據集的輸入OBS路徑和模型的輸出OBS路徑后,點擊提交鍵即可進行訓練,等待模型生成。
(3)模型部署。訓練完成的模型存儲在OBS路徑中,可以將模型在模型部署界面(如圖3所示)中導入并部署。部署為在線服務后,ModelArts提供了一個可調用的API接口,通過編寫POST語句對API發起預測請求,即可預測服務返回的結果。筆者編寫了調用在線服務API接口的.py程序以及基礎Flask框架的Web端網頁進行預測應用。整體項目分為三大部分:

圖3 部署界面Fig. 3 Deployment screen
(1)在線服務接口在接收到請求后需要進行用戶提供鑒權信息Token進行身份認證,為保證預測服務安全,鑒權Token為動態的,故需要編寫請求代碼獲取Token鑒權。部分代碼如下:
Url='https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens '
payload={}
Headers={"Content-Type":"application/json; charset=utf8" }
(2)編寫請求代碼通過POST方式調用預測API獲取預測結果,包括用Request函數發送預測請求,其中請求參數包含在服務的API,請求頭Header中包含第一部中的鑒權Token,還有本地文件的所在地址,用變量Path表示。部分代碼如下:
url='http://'# 此url為在線服務提供
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的網頁交互代碼并在服務器端部署,包括導入Flask框架到Python環境,編寫Html網頁代碼并用render_template函數作網頁代碼的映射。Flask是由Python實現的一個Web框架,使開發者可以使用Python語言快速實現一個網站或Web服務。部分代碼如下:
from flask import Flask,render_template, request,jsonify
from werkzeug.utils import secure_filename
from datetime import timedelta
import os
app=Flask(__name__)
# 創建app應用
app.debug=True
# 輸出
@app.route('/')
def hello_world():
return'Hello World!'
# 設置靜態文件緩存過期時間
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標簽獲取文件
f = request.files[ 'file' ]
# 當前文件所在路徑
basepath=os.path.dirname(__file__)
# 一定要先創建該文件夾,不然會提示沒有該路徑
upload_path=os.path.join(basepath,'staticimage',secure_filename(f.filename))
# 保存文件
f.save(upload_path)
# 調用api函數
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)
網頁端簡單的交互界面如圖4所示。

圖4 具備圖片識別功能的網頁端Fig.4 Web page with image recognition function
對于有人工智能編程基礎的開發者,常使用PyCharm工具開發算法或模型。對于沒有長期長時間訓練作業的開發者,將本地代碼提交到ModelArts訓練環境進行訓練,可以減少諸如GPU之類的算力硬件成本,ModelArts的AI平臺也提供了多種高性能的GPU和CPU供開發和選擇,提高模型開發的靈活性以及訓練的效率和時間。為方便快速將本地代碼提交到公有云的訓練環境,ModelArts提供了一個PyCharm插件工具PyCharm ToolKit,協助用戶完成代碼上傳、提交訓練作業、將訓練日志獲取到本地展示等,開發者只需要專注于本地的代碼開發即可。
筆者嘗試通過ModelArts提供了的PyCharm插件工具PyCharm ToolKit開發一個基于keras框架的VGG16卷積神經網絡算法的貓狗識別模型。
在實際生產中,用戶可能會碰到訓練數據為壓縮格式文件,若此時依舊按照上述數據集文件格式上傳OBS,則需要先對本地數據集進行解壓操作,再上傳至OBS,文件大小和數量的增加會導致上傳操作過于繁雜,時間效率低。筆者提供了上傳壓縮文件后通過指令解壓的方式解決了這一問題。用戶可以通過導入Moxing Framework模塊編輯本地和OBS間的傳輸代碼來解決此問題。Moxing Framework為Moxing提供基礎公共組件。目前,提供的Moxing Framework功能中主要包含操作和訪問OBS組件。
在本開發過程中,需要將533MB的貓狗數據集壓縮文件上傳至OBS,在上傳后,只需要在訓練代碼中添加通過Moxing庫下載壓縮文件進行解壓的代碼即可。
(1)在華為ModelArts的開發手冊中可以獲取ToolKit工具包的文件,打開本地PyCharm,選擇菜單欄的“File > Settings”,彈出“Settings”對話框。在“Settings”對話框中,首先單擊左側導航欄中的“Plugins”,然后單擊右側的設置圖標,選擇“Install Plugin from Disk”,彈出文件選擇對話框,如圖5所示。

圖5 選擇從本地安裝插件Fig.5 Selecting to install the plug-in locally
(2)在彈出的對話框中,從本地目錄選擇ToolKit的工具包,然后單擊“OK”,如圖6所示。

圖6 選擇插件文件Fig.6 Selecting the plug-in file
(3)單擊“Restart IDE”重啟PyCharm。在彈出的確認對話框中,單擊“Restart”開始重啟。重啟成功后,打開一個Project,當PyCharm工具欄出現“ModelArts”頁簽,表示ToolKit工具已安裝完成,如圖7所示。

圖7 重啟PyCharmFig.7 Restarting PyCharm
(4)當PyCharm工具欄出現“ModelArts”頁簽,表示ToolKit工具已安裝完成,如圖8所示。

圖8 安裝成功Fig. 8 Successful installation
(1)將訓練代碼的文件夾命名為‘src’,便于之后的文件路徑填寫,如圖9所示。

圖9 將訓練代碼的文件夾命名為srcFig. 9 Names the folder for the training code src
(2)在Pycharm工具欄中,選擇“ModelArts->Edit Credential”進行登錄。
為了確保服務的安全性,此處需要通過訪問密鑰(AK/SK)進行登錄。登錄華為云,在頁面右上方單擊“控制臺”,進入華為云管理控制臺。在控制臺右上角的帳戶名下方,單擊“我的憑證”,進入“我的憑證”頁面。在“我的憑證”頁面,選擇“訪問密鑰>新增訪問密鑰”。填寫該密鑰的描述說明,單擊“確定”,如圖10所示。

圖10 登錄框Fig.10 Login box
根據提示單擊“立即下載”,下載密鑰,即可獲得一個名為“credentials”的csv格式文件,打開即可看到訪問密鑰,如圖11所示。

圖11 獲取訪問密鑰Fig.11 Obtaining the access key
(3)登陸后,選擇“ModelArts->Edit Training Job Configuration”在彈出的對話框中,如圖12所示示例配置訓練參數:

圖12 配置訓練參數Fig.12 Configuring training parameters
此處AI引擎為TensorFlow-TF-1.13.1-pytho3.6。“Boot File Path”為本地訓練項目的路徑,“Directory”為訓練代碼路徑。“OBS Path”用于存放訓練輸出模型和訓練日志的目錄,“Data Path in OBS”為訓練集所在目錄。“Specifications”為訓練使用資源類型,目前支持公共資源池的CPU和GPU,規格與ModelArts管理控制臺中訓練作業支持的規格一致且同步。“Compute Nodes”為計算資源節點個數。數量設置為1時,表示單機運行;數量設置大于1時,表示后臺的計算模式為分布式。“Running Parameters”為運行參數。如果您的代碼需要添加一些運行參數,可以在此處添加,多個運行參數使用英文分號隔開,例如“key1=value1;key2=value2”。此參數也可以不設置,即保持為空。
設置好后,點擊“Apply and Run”,即可在本地開始調用云端ModelArts平臺訓練模型,開發者可以在“ModelArts Training Log”框內看到損失值,準確率等參數訓練的更新情況如圖13所示。

圖13 訓練更新情況Fig.13 Training update
當看到“ModelArts Event Log”框中出現下面的指示語時,即說明模型訓練成功,如圖14所示。

圖14 訓練成功Fig.14 Successful training
訓練成功后,可以在OBS的模型輸出路徑看到訓練輸出模型的PB文件,開發者可以使用模型文件在ModelArts云端進行在線部署。有后端開發經驗的開發者也可以將模型下載到本地,部署在自己的服務器上。本次實驗筆者選擇將模型文件在ModelArts云端進行在線部署。
此次的訓練代碼是基于TensorFlow的Keras框架的VGG16神經網絡算法。VGG16卷積神經網絡算法對圖片識別非常有效。Keras是一個用Python編寫的高級神經網絡API,它能夠以TensorFlow,CNTK,或者Theano作為后端運行。自2017年起,Keras得到了TensorFlow團隊的支持,其大部分組件被整合至TensorFlow的Python API中。在2018年TensorFlow 2.0.0公開后,Keras被正式確立為TensorFlow高階API,即tf.keras。tf.keras是Keras API在TensorFlow里的實現。這是一個高級API,用于構建和訓練模型,同時兼容TensorFlow的絕大部分功能。tf.keras使得TensorFlow 更容易使用,且保持了靈活性和性能。
(1)在OBS服務中,進入訓練設置時自定義的訓練模型輸出路徑下面的output文件夾下,放入編寫好的模型配置文件“config.json”和模型推理文件“customize_service.py”。模型配置文件描述模型用途、模型計算框架、模型精度、推理代碼依賴包以及模型對外API接口。模型推理文件執行預測數據的預處理功能,如圖15所示。

圖15 在輸出路徑放入推理及配置文件Fig.15 Puts the inference and configuration files in the output path
(2)上傳后回到Pycharm界面,點擊左下頁面的“ModelArts Explorer”,在跳出來的界面中,選擇訓練本次訓練項目的最高版本(當前為V0001),點擊右鍵,選擇“Deploy to Service”,如圖16所示。

圖16 部署服務Fig.16 Deploying the service
在彈出窗口內點擊“Auto Stop”可設置在線服務的自動關閉時間(當前為1小時候關閉)。在 “Specifications”選項中選擇在線服務的資源(當前為“gpu型”)設置完畢后點擊“ok”,即可進行在線服務部署,如圖17所示。

圖17 選擇部署資源Fig.17 Selecting deployment resources
開發者依舊可在“ModelArts Event Log”中查看在線服務部署進度。部署成功后,“ModelArts Event Log”中會出現在線服務的API供開發者調用,如圖18所示。

圖18 顯示在線服務部署成功Fig.18 Shows the successful deployment of the online service
與傳統AI開發流程相比,ModelArts平臺的圖形化界面大大減輕了開發這的代碼學習成本。在數據集的制作與創建流程中,平臺完全為圖形化界面,對于圖像數據,用戶只需對圖像進行分類標注或者對內容圈選操作,無需制作例如XML等格式的圖像信息文件,降低了學習成本和時間成本。同時平臺具有團隊標注功能,可進行多人線上標注,提高了數據集制作效率。在模型訓練流程中,ModelArts在AI Gallery中提供了較多的官方算法以及華為自研的高效算法,通過簡單的調參,即可創建訓練作業構建模型,大大提高了模型開發效率和模型的準確率,在最后的模型部署流程中,華為提供了在線服務API,通過簡單的調用即可完成模型的預測功能。筆者從數據集導入到模型部署,在ModelArts平臺完成了完整的AI開發流程,最終生成了具有圖片識別的功能的網頁端,驗證了無經驗的AI開發者利用AI開發平臺進行模型開發實現業務需求的可行性。
另外對于有一定基礎的AI開發者,ModelArts平臺也提供了將訓練代碼上傳云端進行訓練的模型開發方式,如果訂閱算法不能滿足需求或者用戶希望遷移本地算法至云上訓練,可以考慮使用ModelArts支持的預置訓練引擎實現算法構建。在ModelArts中,這種方式稱為“使用自定義腳本訓練”。ModelArts支持了諸如TensorFlow、pytorch、以及華為自研的Ascend等大多數主流的AI引擎。同時,平臺提供多種高性能的GPU和CPU供開發和選擇,可以減少諸如GPU之類的算力硬件成本,提高了模型開發的靈活性以及訓練的效率和時間。
使用AI開發平臺進行AI模型的開發和部署大大提高了生產效率。因此,無論是資深的AI開發人員還是AI初學者,使用類似ModelArts的AI開發平臺進行生產必然是未來的趨勢。