# <font class="h2">**MX-Font 公用機/北科AI運算平台V100**</font> <style> .h1 { background: linear-gradient(135deg,#fff,#FF95CA) ; color: #BF0060; display:block; padding: 6px 5px; border-radius: 4px; } .h2 { background: linear-gradient(180deg,#fff 50%,#FF95CA) ; color: #BF0060; display:block; padding: 6px 5px; border-radius: 8px; border-bottom: 3px solid #BF0060; } </style> ![](https://hackmd.io/_uploads/H1LrihRdn.png =40%x) [TOC] ![](https://hackmd.io/_uploads/HJuJFnAd2.png =12%x) ![](https://hackmd.io/_uploads/S1KjO3C_2.png) ![](https://hackmd.io/_uploads/BJOHl0LP3.png =30%x) **Github:** https://github.com/clovaai/mxfont !!!電腦要有 <font color="hotpink">**NVIDIA GPU**</font>!!! (不推薦用公用機,有次跑起來大概5分鐘它就自動關機,可能 GPU 快壞掉) ## 北科AI運算平台 V100 使用 ### 如何使用 --- **STEP 1** ![](https://hackmd.io/_uploads/BkwNrYyj2.png =30%x) **STEP 2** ![](https://hackmd.io/_uploads/SyVABFyjn.png) **STEP 3** ![](https://hackmd.io/_uploads/BJ6HLFyo2.png) **STEP 4** 進到 Terminal 即可使用 ![](https://hackmd.io/_uploads/ByMYUY1s2.png) --- ### 容器環境 CUDA:11.3-CUDNN8 ![](https://hackmd.io/_uploads/B1wKNYyon.png) ### 安裝 pytorch ``` # CUDA 11.3 conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch ``` ## 前置環境條件 ### 環境 **Requirement** ``` * Python > 3.6 * pytorch >= 1.5 * sconf, numpy, scipy, scilit-image, tqdm, jsonlib, fonttools ``` **建議使用虛擬環境** ``` conda create --name mxfont python=3.8 conda activate mxfont git clone https://github.com/clovaai/mxfont.git cd mxfont ``` ### Install ``` conda install numpy scipy scikit-image tqdm jsonlib-python3 fonttools ``` (有時 jsonlib-python3 在 conda 無法安裝,改使用 pip install ) <font color="hotpink">**⇓ ⇓ ⇓**</font> ``` conda install numpy scipy scikit-image tqdm fonttools pip install jsonlib-python3 ``` ### 使用以下確認是否有CUDA ``` >python >>>import torch >>>torch.cuda.is_available() ``` # Error 錯誤訊息 (Train) 如果出現以下錯誤訊息可以根據以下方法排除。 ## UnicodeEecodeError: 'cp950'... `UnicodeDecodeError: 'cp950' codec can't decode byte 0xc3 in position 116: illegal multibyte sequence` 錯誤:要提醒 Python 我們要讀取的檔案是以 UTF-8 的編碼。 解決辦法:在 `mxfont/datasets/ttf_dataset.py` 第 218 行加上 `encoding="utf-8"` 即可解決。 ![](https://hackmd.io/_uploads/B1OdWs4w3.png) ## RuntimeError: indices should be either on cpu... `RuntimeError: indices should be either on cpu or on the same device as the indexed tensor (cpu)` 錯誤:有部分在 CPU 執行,有部分在 GPU 執行。 解決辦法: 1. 從 CPU 轉到 GPU (cuda) 中 2. 從 GPU (cuda) 轉到 CPU 中 以下為方法2,從 GPU (cuda) 轉到 CPU 中。 在 `mxfont/trainer/trainer_utils.py` 第 107、108 行的 `cuda()` 改為 `cpu()`。 ![](https://hackmd.io/_uploads/ryrKVo4Ph.png) ## torch.cuda.OutOfMemoryError: CUDA out of memory. `torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.00 GiB total capacity; 10.18 GiB already allocated; 0 bytes free; 10.23 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF` 錯誤:GPU 記憶體容量不足。 解決辦法:batch_size 改小一點。 在 `mxfont/cfgs/defaults.yaml` 改變 <font color="hotpink">**batch_size 值**</font>。 ![](https://hackmd.io/_uploads/r170GoVw3.png) <font color="hotpink">★ **使用以下可以觀察 GPU 記憶體使用量**</font> ``` nvidia-smi ``` ``` pip install gpustat watch gpustat ``` # TRAIN 訓練 ``` python train.py cfgs/train.yaml ``` <font color="hotpink">★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★</font> `mxfont/data/ttfs/` 路徑下的資料夾放 Source 和 Refence 字型檔。 可用 `mxfont/get_chars_from_ttf.py` 轉 .txt。 (有些字型會失敗,不確定原因,不過可以自己設定所以影響不大) 此 txt 檔為要訓練的字,也可<font color="hotpink">**自行設定**</font>。 出現以下就代表已經開始訓練!! ![](https://hackmd.io/_uploads/r1p5WpbF3.png) 在`mxfont/result/images/`能觀察到訓練結果。 每 10000 step 會存一次結果。 (總 step 數 預設 800000,可到 `mxfont/cfgs/defaults.yaml` 中的 `max_iter` 修改參數) <font color="hotpink">★ **公用機**</font> 跑到 step 50000 就自己停止(有可能是空間不足?)花了 15 hrs 左右 <font color="hotpink">★ **北科AI運算平台**</font> 跑到 450000 step 花了 103 hrs 左右(相對公用機速度較快) # TEST 生成 ``` python eval.py cfgs/eval.yaml --weight generator.pth --result_dir path/to/save/images ``` <font color="hotpink">★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★</font> *--resultdir path/to/save/images: 參考風格圖像路徑* `mxfont/data/chn_gen.json` 為訓練完生成的字集 Unicode。 `mxfont/cfgs/eval.yaml` 中的 `test: - data_dir: path to reference image` 放的是<font color="hotpink">**參考風格圖像**</font>路徑 <font color="red">**注意**</font>: 參考圖片要轉<font color="hotpink">**灰階**</font>變單軌(RGB為三軌)