Training ML data on Cloud using Jenkins

Ivan Chiou
7 min readSep 15, 2022

因為PAIA平台的特殊性,當初有研發Desktop版本,來作為提供學員在自己本機端training model的功能。

因此藉由PAIA-Desktop,我們可以將其部署在雲端,透過自動化的訓練程式,讓雲端伺服器提供機器,協助用戶自動training model,並自動產出trained data提供給用戶下載。讓自己電腦不是很好的使用者也可以有機會,利用同樣的運算資源與其他使用者一同在PAIA平台競賽。

透過Jenkins我們可以手動或自動trigger 運算資源,給予要使用的Desktop version以及要訓練的檔案files_token(包含auto.py(手動訓練程式)與model_training.py)。

所謂files token,就是PAIA webservice API所提供的上傳與獲取他人分享的訓練程式碼的介面。

這裡就運用Desktop版本既有的功能,自動部署一個有包含PAIA-Desktop環境的POD在雲端的K8S上,讓其自動去執行使用者上傳想要訓練的model。

在Desktop版本的右上角提供使用者登入,登入後可以看見線上檔案集的功能。

透過線上檔案集,可以新增將自己目前在Desktop進行訓練的程式碼上傳到我們雲端PAIA系統,並分享給其他人使用。

其他用戶需要下載,可以在Desktop畫面的左下角,輸入下載特定專案的token number,即可顯示下載的按鈕。

下載後就會在程式庫顯示出該專案內的程式碼檔案與內容。其他使用者就可以自行修改與訓練model。

透過這樣過程,我們同樣可以自動化複製相同流程在雲端的運算資源上。

因為雲端使用AWS的環境,在Jenkins上我們可以透過withAWS去做使用者的驗證,並藉由aws cli指令去取得要部署的eks的configuration,接著使用kubectl去執行image的替換,或直接重新產生一個新的POD:

withAWS(credentials:'eks-admin-credential') {
sh 'curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"'
sh 'unzip -o awscliv2.zip'
sh './aws/install --update'
sh "aws eks --region ${REGION} update-kubeconfig --name ${CONTEXT_NAME}"
sh 'kubectl config set-context --current --namespace=default'
sh "kubectl set image deployment mlgame-desktop mlgame-desktop=${registry}/${image_name}:${version} --record"
sh 'kubectl rollout status deployment mlgame-desktop'
}

然後透過files token與API取得要訓練的程式碼。

export FILES=$(curl -H "Content-Type: application/json" \-H "Authorization: Bearer ${PAIA_DESKTOP_TOKEN}" \-X GET \https://backend.paia-arena.com/api/v1/shared_fileset?token=${FILES_TOKEN} | jq -r '.data.files[]')

放置程式碼於正確的路徑。

read -a FILES_URL < <(echo $(echo $FILES | jq -r '.file_url'))mkdir /usr/lib/paia-desktop/resources/app.asar.unpacked/library/mkdir /usr/lib/paia-desktop/resources/app.asar.unpacked/library/${GAME_NAME}mkdir /usr/lib/paia-desktop/resources/app.asar.unpacked/library/${GAME_NAME}/cloud_training@${FILES_TOKEN}cd /usr/lib/paia-desktop/resources/app.asar.unpacked/library/${GAME_NAME}/cloud_training@${FILES_TOKEN}wget -O 1.auto.py ${FILES_URL[0]}wget -O 2.model_training.py ${FILES_URL[1]}

接著在雲端機器上,開始自動執行訓練。

/usr/lib/paia-desktop/resources/app.asar.unpacked/python/dist/interpreter/interpreter -m mlgame --nd \-f 120 -i /usr/lib/paia-desktop/resources/app.asar.unpacked/library/${GAME_NAME}/cloud_training@${FILES_TOKEN}/1.auto.py \/usr/lib/paia-desktop/resources/app.asar.unpacked/games/${GAME_NAME} \--difficulty NORMAL --level 3/usr/lib/paia-desktop/resources/app.asar.unpacked/python/dist/interpreter/interpreter -m mlgame --nd \-f 120 -i /usr/lib/paia-desktop/resources/app.asar.unpacked/library/${GAME_NAME}/cloud_training@${FILES_TOKEN}/2.model_training.py \/usr/lib/paia-desktop/resources/app.asar.unpacked/games/${GAME_NAME} \--difficulty NORMAL --level 3

然後將訓練好的檔案連同原先的程式碼打包成zip後,上傳至雲端的storage

datatime=$(date +"%Y%m%d%H%M%S")az config set extension.use_dynamic_install=yes_without_promptaz storage blob directory create --container-name user-xx --directory-path $datatime --account-name xxxaz storage blob upload-batch -s code -d user-xx --destination-path $datatime --account-name xxx

如此便透過Jenkins自動或手動trigger,完成雲端資源的training model流程。

--

--

Ivan Chiou

Rich experience in multimedia integration, cross-functional collaboration, and dedicated to be a mentor for young developers.