# CHT 提供的雲端伺服器租用服務
site: https://userportal.hicloud.hinet.net/cloud/
環境設定上有點複雜,但設定好之後就可以很容易地使用 GPU 伺服器了,根據本篇的手把手設定教學可以輕鬆開始使用 CHT hicloud 服務
剛好因緣際會得到 hicloud 10 萬元的使用額度,因而誕生此教學文
Outline
[1] 申租 CVPC 軟體資料中心
[2] 申租 IPv4 子網段
[3] 申租網際網路連線
[4] 設定防火牆規則
[5] 申租 GPU 雲伺服器
[6] 申租額外的儲存空間
[7] 開機 GPU 雲伺服器
[8] ssh 連線 GPU 雲伺服器使用
[9] 掛載額外的儲存空間使用
[10] 使用 NGC Docker Image (Nvidia GPU Cloud)
[11] 儲存與載入 Docker Image
- 登入/註冊
- 選擇雲端服務 -> hicloud CVPC 雲運算版虛擬私雲
[1] 申租 → CVPC 軟體資料中心
前兩個欄位自行命名,後面如圖示選擇區域
- 下一步 → 同意條款 → 確認完成送出
(開通需要一些時間,可以半小時以後再回頭來看)
開通完成之後,就可以點擊名稱進入 CVPC 軟體資料中心
[2] 申租 → 子網段 → IPv4 子網段
第四個 IPv4 的位址可以自己設定
- 下一步 → 同意條款 → 確認完成送出
(子網段申租在數秒內就會完成)
[3] 申租 → 網際網路連線
名稱跟描述都可以自行任意設定
- 下一步 → 同意條款 → 確認完成送出
- 網際網路 → NAT 設定
- 點擊 (+) 新增 NAT 物件
外部 IP 、 IP 網段都不需要填寫,直接從下拉式選單中選擇
- 送出後一樣等待申租,也很快
[4] 左邊選單:防火牆
- 點擊 (+) 新增防火牆規則
- 新增 外對內 防火牆規則
來源端 IP 直接 0.0.0.0 按加入,允許所有 IP 連進來
目的端 IP 下拉式選單選擇剛剛的申租的 NAT 按加入
目的端協定根據需要選擇,我這邊只使用 SSH 為例,選擇 SSH 按加入
- 再新增一條 內對外 防火牆規則
來源端、目的端 IP 直接加入 0.0.0.0 (任意)
網際網路 IP 位址從下拉式選單中選擇
目的端協定直接把所有協定都加入: ANY
- 有兩條對內及對外的防火牆協定了,只允許 ssh 連線進來,而伺服器允許往外任意連線
- 點選 `套用` 啟用防火牆規則
- 下一步 → 同意條款 → 確認完成送出
[5] 申租 → 雲伺服器 → GPU 雲伺服器
- 選擇需要的版本,這邊選擇有 Docker 的版本
- 選擇規格,硬碟可以選擇 HDD 或 SSD
- 選擇申租的 IPv4 子網段
- 下一步 → 同意條款 → 確認完成送出
(雲伺服器申租需要一段時間,maybe 15 分鐘)
[6] 申租 → 儲存 → 儲存空間
如果雲伺服器的空間 100G 夠用的話,可以不需要多申租額外的儲存空間 (多 100G SSD 一天多 48 元)
- 掛載在剛剛申租的雲伺服器下
- 下一步 → 同意條款 → 確認完成送出
[7] 左邊選單:雲伺服器 → 點擊 GPU 雲伺服器
- 取得預設密碼
- 點擊上方 “開機”
[8] ssh 連線雲伺服器
- 使用 pietty 或 putty 等等可以 ssh 的連線軟體
- 這邊以 Mac terminal 示範
(使用 ssh 以外的連線方式的話需要在外對內防火牆中增加規則)
- 連線 IP 可以在左邊選單:Dashboard 裡面找到
- ssh 連線上雲伺服器
- command
ssh root@210.61.14.53
- 複製剛剛的預設密碼貼上
- 成功連上雲伺服器
- Nvidia driver 為最新版 418.39,CUDA 10.1
- GPU 為 Nvidia Tesla V100 32GB
- python 版本為 2.7、3.5
- 測試網路功能
- command
ping 8.8.8.8
(沒有東西回傳的話表示網路沒連接)
[9] 使用掛載的 EBS 硬碟
- 在雲伺服器下面可以看到掛載的 EBS 硬碟
(這邊使用了一顆 100G 的 HDD,每天大約 16 塊,之後退租費用昂貴的 GPU 雲伺服器不退租硬碟,資料儲存在裡面)
- 列出機器中所有的硬碟資訊
- command
fdisk -l
上面那一顆 Disk /dev/sda 就是我們雲伺服器的 100G SSD
下面 Disk /dev/sdb 就是我們掛載的 100G HDD
- 列出機器中的儲存空間資訊
- command
df -h
可以發現 /dev/sdb 還並不是我們能使用的儲存空間,需要做一些設定
- 首先先將硬碟分割出來使用 (就像 windows 切 D、E 槽那樣)
- command
fdisk /dev/sdb
輸入 n
表示 new partition
接下來都直接輸入 enter
用 default 值
輸入 w
表示 write and save
- 再看一次硬碟資訊
fdisk -l
最下面的 /dev/sdb 分割出了一個 partition /dev/sdb1 準備來做使用
- 再來將 /dev/sdb1 這個分割硬碟格式化
- command
mkfs -t ext4 /dev/sdb1
- 最後把硬碟掛載在我們的儲存空間底下
- 先在 root 底下創立一個新的資料夾來掛載
- command
mkdir /hdd
- 掛載硬碟
- command
mount /dev/sdb1 /hdd
最底下可以看到 /dev/sdb1 的 100G hdd 空間可以開始使用
下一次重新申租掛載之後,只要下
mount
掛載到機器上即可存取裡面的資料
[10] NGC (Nvidia GPU Cloud) Docker Image
- 可以上 NGC 官網上面提供各種框架的 docker image,這裡以 tensorflow 為例
- https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow
- 下載 tensorflow docker image (幾乎每月都會更新一版,可以試著下載最新版本的 docker)
- command:
docker pull nvcr.io/nvidia/tensorflow:19.04-py3
(下載 docker 需要一些時間,maybe 10 分鐘)
- 列出 docker image 的資訊
- command
docker images
可以看到剛剛 pull 下來的 tensorflow19.04
- run docker image
- command
nvidia-docker run -it -v /ssd:/container_ssd 621fd859db33
-v
設定 image 裡面與本機端的資料夾連結,否則在 image 上的更動不會同步,只會儲存在 image 中- 最後面是要 run 的 image ID,可以在上面那個指令找到
- 就開啟了這個 nvidia 的 tensorflow image
- 簡單測試一下 tensorflow 可以使用
[11] 儲存 Docker Image 到 HDD 儲存空間
- 在 image workspace 輸入 exit 可以離開關閉 workspace
- 列出所有的 image
- command
docker ps -a
- restart 剛剛關閉的 image
- command
docker start xenodochial_galois
- 看一下 image 的 STATUS 啟動了
- command
docker ps -a
- commit image
- command
docker commit xenodochial_galois robust:19.04
- save image
- command
docker save -o /hdd/robust_tf19.04.img robust:19.04
- 確認儲存在 hdd 裡面
- 我們把 image 刪除掉,重 load 回來測試
- command
docker stop xenodochial_galois
- command
docker rm xenodochial_galois
- load saved image
- command
docker load --input /hdd/robust_tf19.04.img
- run image
- command
nvidia-docker run -it -v /ssd:/container_ssd robust:19.04
- 如此一來在 image 做的環境更動都可以被儲存下來,只要退租大量花費的雲伺服器即可,下次只需要掛載回 hdd 就能 load 回 docker image 使用