---
title: HowTo:使用 TWCC CLI 部署自動化 AI/ML pipeline
tags: HowTo, CLI, CCS, EN
GA: UA-155999456-1
---
{%hackmd @docsharedstyle/default %}
{%hackmd @docsharedstyle/eng-working-en %}
# HowTo:使用 TWCC CLI 部署自動化 AI/ML pipeline
:::success
<i class="fa fa-star" aria-hidden="true"></i> **案例情境:是否有一套工作流程,可以自動建立容器、執行模型訓練、刪除容器?**
*您是否也有相同的困擾?讓我們手把手帶您組合 TWCC 雲端服務架構,輕鬆解決您的問題!*
:::
這篇文章將幫助使用者了解如何運用 TWCC CLI 及一台虛擬運算個體 (VCS),將以下工作串接為自動化的流程 (pipeline),提高工作效率並節省容器持續開起的成本:
```
1. 建立容器
2. 執行訓練程式
3. 刪除容器
```
利用部署 pipeline 串接 TWCC 資源,您可將手動工作交由 script 自動化完成,在時間與人力上的安排會更加彈性,**且資源在執行完程式即自動刪除,運算所需的成本也會隨之降低。**
## 環境部署
本文範例將使用 TWCC 虛擬運算個體做為 local 端主機,已為使用者安裝 TWCC CLI,可快速執行部署容器自動化管理流程,您也可將 TWCC CLI 安裝於自己的電腦操作。
:::info
<i class="fa fa-paperclip fa-20" aria-hidden="true"></i> **附註:** TWCC-CLI 安裝步驟與資源操作指令,可參考 [<ins>TWCC-CLI α</ins>](https://man.twcc.ai/@twccdocs/twcc-cli-v05)。
:::
### Step 1. 建立虛擬運算個體
依照[建立虛擬運算個體](https://www.twcc.ai/doc?page=vm#%E5%BB%BA%E7%AB%8B%E8%99%9B%E6%93%AC%E9%81%8B%E7%AE%97%E5%80%8B%E9%AB%94),在使用者網站建立一個虛擬運算務個體,設定請參考下方:
```
映像檔:Ubuntu 20.04
基本設定:v.super
```
### Step 2. 啟用 TWCC CLI
請參考 [登入 TWCC CLI](https://man.twcc.ai/@twccdocs/doc-cli-main-zh/https%3A%2F%2Fman.twcc.ai%2F%40twccdocs%2Fguide-cli-signin-zh) 啟用 TWCC CLI。
### Step 3. 安裝 jq
jq 是一個 JSON 格式的處理工具。TWCC CLI 資料都可轉換為 JSON 格式呈現,並可利用 jq 截取資料中某些欄位進行運用,相關文件可參考 [jq manual](https://stedolan.github.io/jq/manual/)。
- 輸入以下指令,安裝 jq:
```bash
$ sudo apt install jq
```
## SSH Without Password
一般 SSH 連線需要帶入金鑰或輸入密碼才能登入,因此將導致自動化過程停止無法繼續。
使用以下方法,建立一個容器並將虛擬運算個體的 SSH key 傳送至容器,往後即可略過帶入金鑰或輸入密碼的動作,直接登入容器。
### Step 1. 製作 SSH key
- 輸入以下指令,製作 SSH key
```
$ ssh-keygen -t rsa -n 4096
```
按 <kbd>Enter</kbd> 鍵略過以下三個問題
```bash
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

- 輸入以下指令,建立一個開發型容器
```bash
$ twccli mk ccs -gpu 1
```
### Step 2. 將 SSH key 帶入開發型容器
- 輸入以下指令,將 SSH key 帶入開發型容器
```bash
$ ssh-copy-id <USERNAME>@<CCS_IP> -p <PORT>
#<USERNAME>:主機帳號
#<CCS_IP>:開發型容器的公用 IP
#<PORT>:容器 SSH 的對外埠
```
- 首次將 key 放入容器,需請您輸入**主機密碼**,完成後虛擬運算個體對容器下指令就不再需要輸入密碼:

:::info
<i class="fa fa-paperclip fa-20" aria-hidden="true"></i> **附註:** [<ins>忘記主機密碼?</ins>](https://man.twcc.ai/@twccdocs/guide-service-hostname-pwd-otp-zh#%E9%87%8D%E7%BD%AE%E4%B8%BB%E6%A9%9F%E5%AF%86%E7%A2%BC)
:::
### Step 3. 下載範例程式:GPU Burn
本文使用 GPU Burn 程式做為操作範例,您可參考以下步驟,在進入容器環境後,載入所需的模型訓練程式,或直接[透過 SFTP + Filezilla ](https://www.twcc.ai/doc?page=hfs#%E4%BD%BF%E7%94%A8-SFTP--Filezilla-%E5%82%B3%E8%BC%B8%E6%AA%94%E6%A1%88) 將程式上傳至容器預設儲存空間 - 高速檔案系統。
- 輸入以下指令進入容器環境
```bash
$ ssh <USERNAME>@<CCS_IP> -p <PORT>
#<USERNAME>:主機帳號
#<CCS_IP>:開發型容器的公用 IP
#<PORT>:容器 SSH 的對外埠
```
- 下載範例程式 GPU Burn
```bash
$ git clone https://github.com/wilicc/gpu-burn.git
```
- 將程式編譯成可用的指令 (可略)
```bash
$ cd gpu-burn
$ make >> progress.log 2>&1
```
- 退出容器回到虛擬運算個體環境
```bash
$ exit
```
- 完成以上動作後,可刪除方才部署環境用的容器。請先列出所有容器,並找出容器 ID
```bash
$ twccli ls ccs
```

- 刪除部署環境的容器
```bash
$ twccli rm ccs -f -s <SITE_ID>
#<SITE_ID>:容器 ID
```
部署環境和載入執行程式完成囉!接下來即可開始製作並執行自動化建立容器、執行運算、刪除容器的 script。
## AI/ML pipeline script
自動化 AI/ML pipeline script 內容可分為 5 個步驟:
1. Create:建立容器運算資源。
2. Put Data:將相關檔案上傳至容器。
3. Execution:執行程式。
4. Collect Data:收集執行程式結果。
5. Garbage Collection:回收使用完的運算資源。
請參考下方步驟,製作和執行 pipeline script。
### Step 1. 製作 pipeline script
- 輸入以下指令編輯 pipeline script
```bash
$ vi AI_ML.sh
```
- 輸入`i` 進入編輯模式,將以下範例 script 貼入 `AI_ML.sh` 中。內容可依據您的運算程式修改,也可選擇建立規格更大的容器。
```bash
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
```
- 按 <kbd>Esc</kbd> 鍵並輸入 `:wq!` 存檔。
:::info
<i class="fa fa-paperclip fa-20" aria-hidden="true"></i> **附註:**
* 步驟 **echo "4. RUN GPU"** 可依據您的程式,修改 `"cd gpu-burn;/bin/bash --login -c './gpu_burn 150'"` 此部分 script。
:::
### Step 2. 執行 pipeline script
- 輸入以下指令,執行 pipeline script:
```bash
$ bash AI_ML.sh
```
- Script 執行畫面如下,將會自動建立容器、執行 GPU burn 程式,並自動刪除容器。

