# 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 芊瑀 - 各個隊伍得獎感言都會提到他們準備快一年,有誰誰誰的幫助 - 晚宴YAY - 與其他隊討論技術 ## 心得分享 <!-- 想要偷偷說的東西放註解裡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 的研究單位/公司