# Environment setting ## 1. Install Docker (Windows): https://docs.docker.com/desktop/ ![image](https://hackmd.io/_uploads/B1OtFMsexl.png) ## 2. Install WSL2 * open cmd : `wsl --install` * check version : `wsl --list --verbose` > 這是對的 :+1: ![image](https://hackmd.io/_uploads/HJXFoKvWgg.png) > 這是錯的 :-1: ![image](https://hackmd.io/_uploads/ByJAYYv-ex.png) 如果做錯可以用`wsl --set-version Ubuntu 2`轉換版本, 再檢查 version * setting docker ![image](https://hackmd.io/_uploads/B1TJ3tv-eg.png) * cmd : `wsl` 創建帳號 :::info ## Install Docker (Ubuntu): https://docs.docker.com/engine/install/ubuntu/ * Install WSL2, and then enter WSL * Add Docker's official GPG key: ``` sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc ``` * Add the repository to Apt sources ``` echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ``` To install the latest version, run ``` sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` ::: ## 3. Install Container toolkit : https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html * Configure the production repository : ``` curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list ``` * Update the packages list from the repository : ``` sudo apt-get update ``` * Install the NVIDIA Container Toolkit packages : ``` sudo apt-get install -y nvidia-container-toolkit7 ``` * Docker restart ``` sudo nvidia-ctk runtime configure --runtime=docker sudo service restart docker ``` ## 4. Install Modulus * Install NVIDIA Container : https://catalog.ngc.nvidia.com/orgs/nvidia/teams/physicsnemo/containers/physicsnemo * check available container version: https://catalog.ngc.nvidia.com/orgs/nvidia/teams/physicsnemo/containers/physicsnemo/tags * Download physicsnemo docker image ``` docker pull nvcr.io/nvidia/physicsnemo/physicsnemo:xx.xx ``` > 第一次會下載很多東西(50GB), 會放入 docker image, 以後在 wsl 使用相同指令就能創建 container * Launch physicsnemo container ``` docker run --gpus all --shm-size=8g --ulimit memlock=-1 --ulimit stack=67108864 --runtime nvidia --rm -it nvcr.io/nvidia/physicsnemo/physicsnemo:xx.xx bash ``` > Where xx.xx is the container version. For example, 25.03. Command 中含有 `--rm`, container 只要關閉就會消失 * 可以幫 conainer 命名, 增加共享記憶體至4G, 並且關閉後 container 能夠儲存 ``` docker run --gpus all --shm-size=8g --ulimit memlock=-1 --ulimit stack=67108864 --runtime nvidia -it --name my_nemo_container nvcr.io/nvidia/physicsnemo/physicsnemo:xx.xx bash ``` * 以後可以使用下面這個指令開啟 ``` docker start my_nemo_container docker exec -it my_nemo_container bash ``` > container 對應的 docker image 不能刪除, 執行 docker start 會參考原始 image 的內容 * 一些有用的 docker 指令, 要在 wsl 內使用 | Command | function | | ------------ | ---------------------- | | docker ps | 查看 Running container | | docker ps -a | 查看 All container | | docker image ls | 查看 docker image file | ## 6. Check CUDA version and Modulus needed : https://catalog.ngc.nvidia.com/orgs/nvidia/teams/physicsnemo/containers/physicsnemo/layers * 在 wsl 輸入 `nvidia-smi`, 確認 CUDA version ![image](https://hackmd.io/_uploads/ryCJilsWxl.png) * 進到官網 Ctrl + F 搜尋 "CUDA_VERSION" (可能需要一頁一頁找) ![image](https://hackmd.io/_uploads/SyXpjliZee.png) * 只要確認 CUDA version > Modulus needed 就行了 > 像我目前的 cuda 是 12.9, Modulus 需要的版本是 12.8 ## 7. Container command * 查看當前 folder 下的子項目 ``` ls -l ``` * 查看 file 樹狀結構 > 先用 `apt install tree` 安裝套件 ``` tree -L 2 ``` * Edit file ``` nano [file name] ``` ## 8. 學姐推薦的作法 * 把 github 資料夾下載到 wsl ``` git clone https://github.com/NVIDIA/physicsnemo-sym.git ``` * cd 到想要的目錄, 例如 : ``` cd physicsnemo-sym/examples/darcy/ ``` * 在 wsl 打開 vscode, 方便更改 code ``` code . ``` * 創建 container, 並且將資料夾 mount 到 workspace/ ``` docker run -p 7007:7007 -d --gpus all --shm-size=8g --ulimit memlock=-1 --ulimit stack=67108864 -v ${PWD}:/workspace -it nvcr.io/nvidia/physicsnemo/physicsnemo:25.03 bash ``` > 要注意 port 有沒有被其他程式占用 > ![image](https://hackmd.io/_uploads/BJ_jF70bge.png) >可以用 `docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" | grep 7007` 看是誰在搞鬼 * 進到 container ``` docker exec -it [container_name] bash ``` # Darcy Flow with Adaptive Fourier Neural Operator ## 1. example : train_fno_darcy.py * Download physicsnemo package ``` git clone https://github.com/NVIDIA/physicsnemo-sym.git ``` * cd to ./modulus/examples/cfd/darcy_fno/ ``` cd physicsnemo/examples/cfd/darcy_fno/ ``` * Download required package ``` pip install warp-lang pip install mlflow ``` * Running ``` python train_fno_darcy.py ``` > Max_step : 256 epochs > Use 5070 Ti waste 7 hr 20 min > shm-size = 1g ## 2. example : darcy_AFNO.py * Download physicsnemo-sym package ``` https://github.com/NVIDIA/physicsnemo-sym.git ``` * cd to physicsnemo-sym/examples/darcy/ ``` cd physicsnemo-sym/examples/darcy/ ``` * Download required package ``` pip install gdown ``` * Running ``` python darcy_AFNO.py ``` * open tensorboard ``` tensorboard --logdir=./ --port=7007 ``` > Max_step : 10000 steps > Use 5070 Ti waste 7 min > shm-size = 8g