HowTo:使用 TWCC CLI 部署自動化 AI/ML pipeline
這篇文章將幫助使用者了解如何運用 TWCC CLI 及一台虛擬運算個體 (VCS),將以下工作串接為自動化的流程 (pipeline),提高工作效率並節省容器持續開啟的成本:
1. 建立容器
2. 執行訓練程式
3. 刪除容器
利用部署 pipeline 串接 TWSC 資源,您可將手動工作交由 script 自動化完成,在時間與人力上的安排會更加彈性,且資源在執行完程式即自動刪除,運算所需的成本也會隨之降低。
環境部署
本文範例將使用 TWSC 虛擬運算個體做為 local 端主機,已為使用者安裝 TWCC CLI,可快速執行部署容器自動化管理流程,您也可將 TWCC CLI 安裝於自己的電腦操作。
TWCC-CLI 安裝步驟與資源操作指令,可參考 TWCC-CLI。
Step 1. 建立虛擬運算個體
依照建立虛擬運算個體,在使用者網站建立一個虛擬運算個體,設定請參考下方:
映像檔 :Ubuntu 20.04
基本設定:v.super
Step 2. 啟用 TWCC CLI
請 登入 TWCC CLI 啟用 TWCC CLI。
Step 3. 安裝 jq
jq 是一個 JSON 格式的處理工具。TWCC CLI 資料都可轉換為 JSON 格式呈現,並可利用 jq 截取資料中某些欄位進行運用,相關文件可參考 jq manual。
- 輸入以下指令,安裝 jq:
sudo apt install jq
SSH Without Password
一般 SSH 連線需要帶入金鑰或輸入密碼才能登入,因此將導致自動化過程停止無法繼續。
使用以下方法,建立一個容器並將虛擬運算個體的 SSH key 傳送至容器,往後即可略過帶入金鑰或輸入密碼的動作,直接登入容器。
Step 1. 製作 SSH key
- 輸入以下指令,製作 SSH key
ssh-keygen -t rsa -n 4096
按 Enter 鍵略過以下三個問題
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
- 輸入以下指令,建立一個開發型容器
twccli mk ccs -gpu 1
Step 2. 將 SSH key 帶入開發型容器
- 輸入以下指令,將 SSH key 帶入開發型容器
ssh-copy-id <USERNAME>@<CCS_IP> -p <PORT>
# <USERNAME> 主機帳號
# <CCS_IP> 開發型容器的公用 IP
# <PORT> 容器 SSH 的對外埠
- 首次將 key 放入容器,需請您輸入主機密碼,完成後虛擬運算個體對容器下指令就不再需要輸入密碼:
Step 3. 下載範例程式:GPU Burn
本文使用 GPU Burn 程式做為操作範例,您可參考以下步驟,在進入容器環境後,載入所需的模型訓練程式,或直接 透過 SFTP + Filezilla 將程式上傳至容器預設儲存空間 - 高速檔案系統。
- 輸入以下指令進入容器環境
ssh <USERNAME>@<CCS_IP> -p <PORT>
# <USERNAME> 主機帳號
# <CCS_IP> 開發型容器的公用 IP
# <PORT> 容器 SSH 的對外埠
- 下載範例程式 GPU Burn
git clone https://github.com/wilicc/gpu-burn.git
- 將程式編譯成可用的指令 (可略)
cd gpu-burn
make >> progress.log 2>&1
- 退出容器回到虛擬運算個體環境
exit
- 完成以上動作後,可刪除方才部署環境用的容器。請先列出所有容器,並找出容器 ID
twccli ls ccs
- 刪除部署環境的容器
twccli rm ccs -f -s <SITE_ID>
#<SITE_ID> 容器 ID
部署環境和載入執行程式完成囉!接下來即可開始製作並執行自動化建立容器、執行運算、刪除容器的 script。
AI/ML pipeline script
自動化 AI/ML pipeline script 內容可分為 5 個步驟:
- Create:建立容器運算資源。
- Put Data:將相關檔案上傳至容器。
- Execution:執行程式。
- Collect Data:收集執行程式結果。
- Garbage Collection:回收使用完的運算資源。
請參考下方步驟,製作和執行 pipeline script。
Step 1. 製作 pipeline script
- 輸入以下指令編輯 pipeline script
vi AI_ML.sh
- 輸入
i
進入編輯模式,將以下範例 script 貼入AI_ML.sh
中。內容可依據您的運算程式修改,也可選擇建立規格更大的容器。
TWCC_CLI_CMD=/usr/local/bin/twccli
echo "1. Creating CCS" # 建立開發型容器
$TWCC_CLI_CMD mk ccs -gpu 1 -wait -json > ccs_res.log
CCS_ID=$(cat ccs_res.log | jq '.id')
echo "2. CCS ID:" $CCS_ID # 開發型容器 ID
echo "3. Checking GPU" # 確認 GPU 狀態
ssh -t -o "StrictHostKeyChecking=no" `$TWCC_CLI_CMD ls ccs -gssh -s $CCS_ID` "/bin/bash --login -c nvidia-smi"
echo "4. RUN GPU" # 執行運算程式
ssh -t -o "StrictHostKeyChecking=no" `$TWCC_CLI_CMD ls ccs -gssh -s $CCS_ID` "cd gpu-burn;/bin/bash --login -c './gpu_burn 150'"
# 可依據您的程式,修改 "cd gpu-burn;/bin/bash --login -c './gpu_burn 150'"
echo "5. GC GPU" # 刪除開發型容器
$TWCC_CLI_CMD rm ccs -f -s $CCS_ID
echo "6. Checking CCS" # 檢視容器狀態
$TWCC_CLI_CMD ls ccs
- 按 Esc 鍵並輸入
:wq!
存檔。
- 步驟 echo "4. RUN GPU" 可依據您的程式,修改
"cd gpu-burn;/bin/bash --login -c './gpu_burn 150'"
此部分 script。
Step 2. 執行 pipeline script
- 輸入以下指令,執行 pipeline script:
bash AI_ML.sh
- Script 執行畫面如下,將會自動建立容器、執行 GPU burn 程式,並自動刪除容器。