---
# System prepended metadata

title: HiPAC 2024 CUDACOLA 隊檢討會暨參賽報告

---

# HiPAC 2024 CUDACOLA 隊檢討會暨參賽報告

日期：2024/08/14 (三)
時間：14:00 - 16:01
地點：Google Meet ( https://meet.google.com/eih-yvda-ojw )

## 議程
- 競賽日誌回顧
- 心得分享
- 檢討建議
- 撰寫參賽報告

## 競賽日誌回顧
### 賽前
- 6/20
    - 國網盃群組成立
- 6/24 
    - 跟老師線上討論參賽計畫書怎麼寫
    - 從國網盃 10 人中，拆分成 CUDA 組與 OpenMPI 組，按照個人意願各自選
- 6/25 
    - 17:00-21:00 試 CUDA & 寫計畫書
    - 18:49 確定隊名訂為 CUDACOLA<!-- 其實我當初是發出「哭阿」的聲音，被郁芳聽成 COLA -->
    - 確定我們有能力完成 CUDA 環境建置
    	- 使用 Paperspace 雲端機器，美金 $0.45/hr 和儲存費用另計
    	- GPU: NVIDIA Quadro M4000 (8 GB GPU memory)
    	- 軟體: NVIDIA Container Toolkit + CUDA container
- 6/27 
    - 16:00-隔天00:30 繼續把參賽計畫書寫完
    - 凌晨的google meet大合照
    ![LINE_ALBUM_凌晨的google meet大合照_240814_1](https://hackmd.io/_uploads/HkUK9y5qR.jpg)
    (郁芳的螢幕截圖)
- 6/28
    - 完成參賽計畫書，寄出給比賽單位
- 7/10
    - 13:30-16:30 參加官方賽前教育訓練
    - 20:00-隔天00:10 討論各自要準備讀什麼，分工
- 7/11 - 7/23
    - 大家各自研究，寫出自己所負責部份的架環境 SOP 文件
    - 練習和測試環境
    	- Paperspace
    	- Hyperstack
    	- 有 NVIDIA 顯卡的個人電腦
    	- 自己電腦內 2 台虛擬機
- 7/24
    - 19:00-23:50 照著 SOP 接力進行架環境演練
    	- 使用 Hyperstack 雲端機器，美金 $0.30/hr
    	- GPU: NVIDIA RTX A4000
- 7/26
    - 19:00 PIConGPU 和 NAMD 分組討論
    	- PIConGPU 有跑成功內建 LaserWakefield example
- 8/2
    - 10:00-12:00 郁芳 HPCxAI 夏令營心得分享會
    - 13:30 Slurm 研討會
### 第一天早上(8/6 10:00 ~12:00)
- (從新竹以外地方出發的人) 持主辦單位幾天前寄到家裡的高鐵票(指定車次對號座)，早起坐高鐵於 08:03 或 08:11 抵達高鐵新竹站，在高鐵站出口處轉乘比賽大巴士接駁車
- 抵達國網比賽現場
- 持學生證簽到，拿到免費送的 T-shirt 、玻璃水壺、識別證名牌
- 在國際會議室聽出題者現場講解題目敘述
- 隊長們抽籤決定是要用哪個攤位區，家正抽到 3 號位置
- 於攤位收到發放物資：延長線、帳密 A4 紙、綠色乖乖x2
- 拿到裝有題目的隨身碟，此時還不能連上網路<!-- 這個隨身碟後來送給我們，被家正帶回家了 -->
- 鳴笛開始比賽
    - 用紙上寫的 WiFi SSID 帳密來連上會場網路，僅能透過此 WiFi 來 SSH 進比賽機器
    - SSH 進 pca1, pca2 所需的 host, port, username, password 同樣寫在這張紙上
- 在 pca1, pca2 新增 user: cudacola，置入 SSH public key
- 攤位上方有個電視可以播東西給評審、工作人員或其他參賽者看
  ![攤位照片](https://hackmd.io/_uploads/By-aKPqcA.jpg)
  (照片由家正拍攝，以 [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.zh-hant) 授權釋出)
    ::: spoiler
    家正這幾天有播放：
    - tmux 上下分割畫面對主機效能監控
        -  `htop`, `nvtop` 或 `watch -n1  "w |sort -n -k 5"`
    - 可愛動物影片: Cute Baby Animals 🐻 4K - Relaxation Film with Peaceful Relaxing Music and Animals Video Ultra HD 
    - 令人放鬆的大自然風景: 3 Hours of Amazing Nature Scenery & Relaxing Music for Stress Relief. 
    - Rickroll 瑞克搖 原版/保險公司版/but it's all nature
    - 《鹿乃子乃子乃子虎視眈眈》洗腦 OP 主題曲 1 小時版
    - 《玩命關頭》第 7, 9, 10 集電影預告片
    - 巴哈動畫瘋上的《鹿乃子乃子乃子虎視眈眈》第 6 集
   :::
- 安裝與Debug Nvidia Driver, CUDA toolkit, OpenMPI
- 安裝 Mellanox OFED Driver-24.04-0.7.0.0
- 安裝 icc-2021.4.0
- 安裝 mkl
- 午休吃便當
	- 炸雞丼飯 / 烤排骨飯 / ... 多種便當任君選擇
    - 小餅乾糖果是隨時能去 B1 拿
    - 還有可自由取用的桶裝咖啡、冰綠茶，以及限量罐裝可樂、黑咖啡
### 第一天下午(8/6 13:00 ~18:00)
- NAMD-2.14編譯CPU版本並提交第一題的CPU部分
- 處理Nvidia driver和cuda的問題
- 15:00 下午茶：油條麵包夾蛋、大杯康青龍紅茶三分糖去冰
### 第二天早上(8/7 10:00 ~12:00)
- 享用飯店早餐 buffet
- 生醫題、電漿題 出題者分別召集各隊到中間聽補充說明
- 解決Nvidia driver和cuda的問題
- NAMD-2.14編譯GPU版本，並提交第一題GPU部分
- 繼續Debug OpenMPI(4.1.4)
- 嘗試安裝 PIConGPU
    - 有些 dependency 能用 Spack 裝得起來，但出題者給的 hackmd 小抄上寫的 cmake 版本號碼在 spack public repo 上找不到
- 午餐有要價 $120 的便當 / 壽司

### 第二天下午(8/7 13:00 ~18:00)
- 發現OpenMPI版本不相容，嘗試升級至OpenMPI 5.0.3但因為時間排程關係無法實裝Production
- NAMD-2.14嘗試配置雙節點運行。在另一個節點上安裝icc、Nvidia driver、Cuda、NFS、設定SSH開放端口2201和2202，在使用GPU版本時失敗，改成CPU版本，最後時間不夠，設置為背景運行，準備明天察看結果。
- 15:00 下午茶點心
	> 多到吃不下了，下次可不可以叫他們不用準備我的份OAO [name=家正]
- 遇到 PIConGPU 比賽題目一定要用到 HDF5，但我們沒事先練過怎麼裝
- slurm太晚才試，導致出問題來不及修改
### 第三天早上(8/8 09:30 ~11:30)
- 享用飯店早餐 buffet
- 公佈隱藏題
- NAMD-2.14第三題提交，被評審回報有問題，3分鐘後，評審來到攤位上說明是使用CPU版本導致的問題，成績被採錄。
- PyFR 安裝失敗，主要為matrix multiplication error和找不到METIS lib path，據清大的同學說，他們同樣遇到這些問題，並且現場沒有一組在時間內執行出結果。
- PyFR第二題可以成功以單GPU跑起來，但因時間不足最後失敗。
- 密碼破解題提供一個base64編碼，解碼後是 [GitLab連結](https://gitlab.td.nchc.org.tw/cchou0519/hipac24-password-recovery)，是題目的描述。
    - 題目只給要破解的密文，沒指定說要怎麼解，於是經過 Google 搜尋「password cracking tool」，選了資安 CTF 比賽常用且支援 CUDA 加速的 hashcat 作為解題使用程式
    - 有 2500 個 hash 要解，且有 MD5, MD5crypt, bcrypt 這三種演算法的加密結果混雜在其中
    - 提供一個有提示的密碼，解出後可得到字典本，可加速後續破解。
    - 寫了 Python script 來弄字串處理，試著把上面每種加密方法根據前綴來篩選，變成 3 個 .txt 檔案，每個 .txt 檔案裡只有單純一種加密法
    - 寫了 shell script 把字典檔分割成 4 等分，嘗試一次執行多個 hashcat 來平行化
    - 用 curl 來提交答案
    - 但在比賽結束前仍未跑出一組解答
- 趕工做成果簡報
### 第三天下午(8/8 12:30~20:00)
- 成果報告講給評審聽
    - 抽籤決定順序，我們抽到第一組 
    - 10分鐘簡報，要報告HPL, HPCG, PIConGPU, NAMD2, 解密題, PyFR，時間不夠用
    - 10分鐘回答問題，問答題要速記全部人的提問，小組成員討論 2 分鐘後，再回答
- 沒等到攝影機採訪
- 到階梯教室聽參賽者座談
	- 去年得獎學長姊分享
	- 出題者講可用的解題技巧、設計理念
		- 密碼破解其實可以從 MD5 開始破，需要計算量最小最快能取得成果
		- 生醫題藉由 3 個階段引導參賽者由淺入深，嘗試榨乾硬體效能
		- 電漿題聲稱說照著 hackmd 步驟照做就能跑出來，但裡面寫的 cmake 有個版本在 Spack public repo 找不到是故意的
- 去看國網展示用機房、模型
    - 放的都是以前專案購置的機器，台灣杉們在別處
    - 聽到講解關於實體機房需要的線路、氣體冷卻、防地震鋼架
    - 問要買什麼硬體來練習，蝦皮或淘寶 (特定零件型號郁芳有拍起來)
- 頒獎典禮
	- 隊呼：「嘿！」，發想 by 芊瑀
	- 各個隊伍得獎感言都會提到他們準備快一年，有誰誰誰的幫助
- 晚宴ＹＡＹ
- 與其他隊討論技術

## 心得分享
<!-- 想要偷偷說的東西放註解裡XD -->
### 益翔
- 學到的東西
    - [hlajungo Note](https://hackmd.io/2deAUP8zQ-u1giVioCOdaQ)
- 建議的步驟
    <!-- Written by Chatgpt-->
    - 構建環境
    嘗試去弄出一個實體環境或用虛擬機模擬(較不推薦)，盡量在cpu、gpu、作業系統、網路去還原環境。
    - 了解系統
    確認CPU、GPU、作業系統、內核版本，用`lscpu`、`nvidia-smi`、`uname -a`等。
    - 確定目標
    選擇你要安裝或使用的軟體版本前，看看能選的範圍，考慮硬體、驅動和系統的限制
    - 語言與編譯器
    確認你用的程式語言和編譯器版本
    - 管理依賴
    列出依賴項，注意版本範圍。學會檢查、更新或移除這些版本。
    - 管理版本
    記錄所有用到的版本，當兩個目標要使用相同套件的不同版本時，考慮用Conda或其他套件版本管理套件來管理版本
    - 自動測試
    寫腳本自動測試，調整參數，收集結果
    - 數據可視化
    用工具像gnuplot來視覺化數據
    - 了解怎麼閱讀cpu使用率、gpu使用率、記憶體使用量。
    `htop`和`nvidia-smi`
- 心得
    架設環境和編譯用掉了9成的時間，執行和調適只用了1成的時間，我事先花費太多時間在調適上，如果可能的話，嘗試配置實體比賽環境，實體雙節點infinite band設備 > 實體雙節點 ethernet設備 > 雙gpu虛擬機模擬雙節點 > cpu only虛擬機模擬雙節點。
### 俊翔
提前了解所有Dependencies並畫出相依性順序圖可以有效的提升環境建置效率，並且管理排程工具必須要提前設定好，不要因為賽前有建制成功就覺得可以偷懶。
報告必須抓緊時間，並且定期與隊友打暗號，因為一個人容易Tunnel Vision太專注於某個東西，才不會有超時的情況產生
### 芊瑀
slurm儘量早點試，因為可能發生"想用的"和"實際發生的"不一樣，也可以試試看`salloc`這個指令先try try（我的看法，比賽時我太緊張忘了）。
PIConGPU我走保守路線（按照之前演練方法），結果卡在driver版本問題。
### 郁芳
第一天在環境建置時，彼此的安裝和版本一直有衝突，當我基於原本的CUDA版本編譯了mpi，卻在之後的測試環節發現nvidia driver不見了，因此建議當有影響隊員的環境變動時，須及時通知其他隊員，保持良好的溝通，第三天晚宴跟冠軍隊伍交流後，瞭解`module`這個工具的重要性，這能幫助我們在同一個node(電腦)、同一個帳號下實現不同session的環境變數彼此獨立。
### 家正
第二次當校外比賽隊長，講了好多話，還去跟其他學校隊伍聊天，我都不知道我能那麼外向。
有嘗試用了 [doodle](https://doodle.com/en/) 這套調查大家有空開會時間的投票工具，感想是滿好用的，但免費版有限制，可改用[開源的替代品](https://opensource.com/article/22/4/open-source-alternatives-doodle-polls)。
有時候會太心軟或想偷懶，有選擇時都決定往比較輕鬆的路走。例如說或許可以叫隊員都去看一整套超算培訓影片，但想說不知道會不會用到，就先懶得看；也或許可以再硬一點。
有些技巧能夠事先讓隊員學會的，其實我能教學，但不太確定需不需要，這次以後就稍微知道必修和選修知識有哪些。
看完 [Open MPI 官網影片](https://www.open-mpi.org/video/?category=general)真是醍醐灌頂，很多名詞都融會貫通弄懂意思和串連起來，而且從裡面知道這個 MPI 生態系其實很龐大，有好多個社群在朝這方向努力。

## 給下屆建議
<!--
Note: Soloman: ACM要依據這些建議規劃出對應的培訓活動。
Nvidia Driver和cuda版本衝突。
錯誤的安裝步驟導致同時存在兩個Nvidia Driver。
隊裡有需要不同版本的Nvidia Driver和cuda。
-->
- 不要看某個的軟體的版本超級舊就不想用
  - 例如 hpl-2.0_FERMI (有 GPU 加速的 benchmark) 我們決賽前有看到但略過不練，到比賽真的出出來這題目有些後悔XD 
  - 下屆題目不一定會出這程式，版本號碼僅供參考
- 有時候用最新版軟體反而會造成相依問題，例如 CUDA, OpenMPI
- 去看完清大 [SC24](https://hackmd.io/@NTHUSC/Hyu41J4oi/https%3A%2F%2Fhackmd.io%2F%40kuokuoyiyi%2Fry7t3kJG2) 教學影片
  - 因為我們跟第一名隊伍交流發現他們有事先教 Linux, binary, dynamic linking 觀念，和第三名隊伍的高中生們也是 Linux 高手，在影片裡都有教
- slurm不要想到才安裝，提早完成
- 可以斟酌要不要用 Spack 來幫助安裝某些套件，因為某些隊伍對 Spack 同樣沒好印象 (他們在吐槽: 誰還用 spack)，要用的話要賽前就學會
- 去研究一下如何同台機器多個 CUDA 版本共存
- 處理同環境在裝不同版本函式庫的時候能不打架
    - `sudo apt install environment-modules`
    - 把想 load 的套件 compile 好之後，寫個 modulefile 來 include 進去 (要再研究設定方法)
    - `module load <???>` 之後只會在那個人的 session 有變動環境變數 PATH
    - 也可以 `module unload <???>` 等方法來隨時把套件從環境變數中移除，神器一個
- 能找其他 lab 借顯卡，第一名隊伍有人說他跟兩個老師保持良好關係<!-- 暨大可找信宏lab -->
- 找能出錢出力的學長姐當教練，有機會幫生出 InfiniBand 網卡等硬體設備可以做練習環境<!-- 玄學 -->
- [Grafana](https://grafana.com/) 架 web dashboard 可以有歷史資料、複雜的圖表呈現
    - 還需要安裝我們需要的某後端 prometheus exporter，來把資料倒給前端 web 來顯示
    - 在還沒有 web dashboard 的時候也可以在命令列用下列指令看
    - `htop` 可看即時 CPU 用量
    - `nvtop` 可看即時 GPU 用量
    - `watch -n1  "w |sort -n -k 5"` 看最近有在執行指令的 session， 以 IDLE time 做排序[(source)](https://www.linuxquestions.org/questions/linux-general-1/how-can-i-sort-the-w-output-by-idle-time-666807/)
- k8s、container建議先不要碰，跨節點container很麻煩 
	- 可以真的非常有空的人賽前慢慢研究，但在比賽場上先不要
    - 有空可去參加國網教育訓練: [Singularity容器運算技術介紹與實作](https://edu.nchc.org.tw/course/one_course_introduction.asp?lms_auto_course_id=4111&from_course_list_url=course_index)
	- 因為前期解決 container 的問題所花的時間，會遠大於解決 HPC 問題的
- 不要無腦用太多顯卡會IO Bound（bottleneck 在 I/O)
- 可以刷考古題(三大超級電腦大賽: 德國ISC與美國SCC、中國ASC)，或參加線上競賽 (ISC Student Cluster Competition virtual/remote team) 作練習
- 要啃別的超級電腦大賽隊伍寫的共筆
    - 清大 [SCC會議記錄](https://hackmd.io/@William-Mou/HJuh7NC_B/%2F%40William-Mou%2FS1AgN4CCt)
- 組員間最好平時就在交流技術
    - 約吃午餐
    - 分享彼此看的資料
- 關注一下明年 2 ~ 3 月國網在中南部可能舉辦助教培訓營
- 套件很可能會有類似於`--help`的指令，這會給出很明確的編譯或使用資訊，或者可以不帶任何參數的空跑，也可能會給出使用說明。以及類似於`++debug`，可以開啟調適模式，這會不停地輸出目前的運行步驟。
- 先從自己電腦 VM 開始練，再研究組 cluster 方法
	- 練架 Slurm, NFS, NIS, OpenMPI, ... 的多節點
    - PC cluster 也可以
- 有志往 HPC 方向發展可進 [MVAPICH :: Users](https://mvapich.cse.ohio-state.edu/users/) 使用者列表中列出有 Taiwan 的研究單位/公司







