# 如何在 CSIE Workstation 跑 notebook
> Author: [name=B13902080 陳以哲]
:::info
以下指令若包含角括號,請替換成自己喜歡的名字。例如:
`/tmp2/<你的學號>`,就應該被換成 `/tmp2/b13902001`
:::
## 零、連線到工作站
在 vscode 下載 [Remote - SSH](https://marketplace.visualstudio.com/items/?itemName=ms-vscode-remote.remote-ssh) 套件。
接著打開你的終端機,用以下指令連線到工作站
```shell
ssh <你的學號>@meow1.csie.ntu.edu.tw
```
其中可以把 `meow1` 換成另一台伺服器 `meow2`。
## 一、準備目錄
因為家目錄空間有限,所以在 `/tmp2` 下創建自己的目錄
```shell
b13902080@meow2 [~] cd /tmp2
b13902080@meow2 [/tmp2] mkdir -p <你的學號>
b13902080@meow2 [/tmp2/b13902080] mkdir -p .cache
b13902080@meow2 [/tmp2/b13902080/.cache] mkdir -p uv
b13902080@meow2 [/tmp2/b13902080/.cache] mkdir -p huggingface
```
## 二、虛擬環境
為了隔離套件,這邊用 [uv](https://docs.astral.sh/uv/getting-started/installation/) 這個套件進行虛擬環境管理。
```shell
curl -LsSf https://astral.sh/uv/install.sh | sh # 下載並安裝 uv
```
然後在 `/tmp2/<你的學號>` 底下創建虛擬環境
```shell
uv venv <venv_name> # 建立虛擬環境
source ./<venv_name>/bin/activate # 啟用虛擬環境
```
要退出虛擬環境請用 `deactivate` 指令
## 三、準備套件
### 每次會用到的
進入虛擬環境後,要下載 `torch`以及相關套件
```shell
(venv_name) export UV_CACHE_DIR=/tmp2/<你的學號>/.cache # 設定 cache 的路徑,不然家目錄又要被塞爆
(venv_name) uv pip install notebook papermill # 下載用來跑 notebook 的套件
(venv_name) uv pip install torch # 基本上每次都會用到
```
### ML HW6 會用到的
```shell
(venv_name) uv pip install -U datasets trl bitsandbytes
(venv_name) uv pip install peft
```
## 四、編輯 notebook
打開你的 `.ipynb` 檔案,可以用 vscode 或是其他方法傳到工作站上。
然後就可以在 vscode 裡面輕鬆編輯了。
### 環境變數
為了不要讓 LLM 塞爆家目錄,請在 notebook 的最開始加上一格:
```shell
%env HF_HOME=/tmp2/<你的學號>/.cache/huggingface
%env UV_CACHE_DIR=/tmp2/<你的學號>/.cache/uv
```

## 五、tmux
tmux 是可以 manage 視窗的軟體,它讓你可以就算斷線了,程序也繼續執行。
### 開啟 `tmux`
```shell
tmux
```

### 到你想要去的目錄
像我是在 `/tmp2/b13902080/MLhw6` 底下做事,所以就 `cd` 到那邊。(如果目錄不存在記得 `mkdir`)
### 開啟虛擬環境
tmux 基本上就是新開的視窗,所以就算外面已經在虛擬環境,tmux 內還是要 activate
```shell
b13902080@meow2 [/tmp2/b13902080] source ./<venv_name>/bin/activate # 啟用虛擬環境
```
### 退出 tmux 的方法
tmux 的命令,是用「前綴」+「命令」組成。預設的前綴是 `Ctrl+b`。
如果想退出 tmux,按下 `Ctrl+b d`。意思是先按 `Ctrl+b`,放開後再按 `d`。
### 連回 tmux 的方法
下 `tmux ls` 可以看自己當前有什麼 session

若要連到 0 號 session,請下
```shell
tmux a -t 0
```
把 `-t` 後面的數字換掉就可以連不同 session
## 六、執行 notebook
### 環境
請確保你正在 tmux 內,且已經啟動虛擬環境。
### 執行
papermill 可以將輸入的 `.ipynb` 檔執行完,輸出到指定的另一個檔案。如:
```shell
papermill ML_hw6.ipynb ML_hw6_2nd.ipynb
```
這樣就會執行 `ML_hw6.ipynb`,並將執行完的結果生成一個新的 notebook,檔名為 `ML_hw6_2nd.ipynb`
### 離開
然後你就可以退出 tmux 去喝下午茶了