hpc進度筆記--自駕車AI
===
當周目標:用YOLOR訓練Waymo的Dataset
# 02/09(三)
## 看資料、了解YOLOR, YOLO及如何訓練
### YOLOR(you only learn one representation)
論文pdf:https://click.endnote.com/viewer?doi=arxiv%3A2105.04206&token=WzMzNTA4MTksImFyeGl2OjIxMDUuMDQyMDYiXQ.YuFSLyKBAmWjnyHaU0iBUTMxk-o
論文github:https://github.com/WongKinYiu/yolor
講解影片1:https://www.youtube.com/watch?v=y1XM9zrY4c0
講解影片2(AINTU):https://www.youtube.com/watch?v=HdQqAF-rMKc
### YOLO(you only look once)
論文:https://click.endnote.com/viewer?doi=arxiv%3A1506.02640&token=WzMzNTA4MTksImFyeGl2OjE1MDYuMDI2NDAiXQ.KNZp0EjOCms691JzkVvxQDzi3l4
論文(中文翻譯):https://hackmd.io/@allen108108/r1-wSTAjS
### 訓練方式
https://blog.roboflow.com/train-yolor-on-a-custom-dataset/
wiki:https://zh.wikipedia.org/wiki/%E8%AE%AD%E7%BB%83%E9%9B%86%E3%80%81%E9%AA%8C%E8%AF%81%E9%9B%86%E5%92%8C%E6%B5%8B%E8%AF%95%E9%9B%86
## 執行YPLOR
## 關鍵字
YOLO | YOLOv4 | YOLOR | AINTU | Waymo | t-SNE | manifold learning |
# 02/10(四)
## run YOLOR
- [x] 看YT How to Run YOLOR Object Detection on GPU and CPU - Images and Webcam Tutorial(https://www.youtube.com/watch?v=vttJxYF-2gw)
- [x] 看YT How to Run YOLOR Object Detection in COLAB | FREE CLOUD GPU(https://www.youtube.com/watch?v=AxHJaFF7eKs)
- [ ] 照著在server上run一遍
- [x] 照著在colab上run一遍(「YOLOR Object Detection - Images & Video_Base」的副本)**Noe:最後display `video 的ffmpeg -i {save_path} -vcodec libx264 {compressed_path}`打成`-vofec` Orz
- YOLO3在COLab的實作:https://towardsdatascience.com/yolov3-pytorch-on-google-colab-c4a79eeecdea
- 流程:執行YOLOR官方github的Installation的Colab environment和Prepare pretrained weight,再執行Inference(改--source [path];加--output [path])
- [ ] read paper review(https://medium.com/augmented-startups/is-yolor-better-and-faster-than-yolov4-54812da66cc1)
## Train YOLOR by Waymo Open Dataset
- 困境:Waymo Open Dataset是TFRecord,但YOLOR是用PYTorch(YOLOR沒法讀資料)
- [x] 看YT 【扫盲】YOLOR训练:https://www.youtube.com/watch?v=EAP4dqIkhIUhttps://hackmd.io/l9vc8BU0SZKLH7r6IyxWug?both#
- [ ] 看2nd Place Solution for Waymo Open Dataset Challenge -- Real-time 2D Object Detection:https://drive.google.com/file/d/1ZwaTVlVqymBU71Q-1RiFm9HaxErBEH89/view
# 02/11(五)
## Train
- [x] 直接試試看(roboflow)(「Training YOLOR on a Custom Dataset.ipynb」的副本)用Rovoflow裡面的Hard Hat Sample Dataset,結果:可以train
照這個colab執行:https://colab.research.google.com/drive/1e1Uk9SjxBaagu7aoGZ4oTcqePhnMLM23?usp=sharing#scrollTo=cy8NlkoKg9lC
流程:
git clone yolor跟相關套件(mish cuda、pytorch-wavelets,yolor官網的installation有寫
->
下載dataset放到yolor資料夾裡,如果是用Roboflow就繼續照著執行(要先到Roboflow網站下載)


如果不是用Roboflow就直接上傳放到yolor的資料夾裡(記得要有.yaml檔,可以用[https://codebeautify.org/yaml-validator](https://)確認格式對不對)
->
prepare pre-trained weights(也是照官網的Installation裡有寫)
->
改.cfg配置檔裡面的head裡面四個[yolo]下的`classes=`和neck後面、head前面的`files=`的數量:

要加`/`
其他照著執行就能讀取.yaml檔知道classes數、算files數(`(classes數+5)*3)`)然後改.cfg檔
->
train
也是照官網,這個colab是執行一個GPU的版本

->
train完的結果會在`/yolor/runs/train/yolor_p6`之類的資料夾裡面,會有`results.png`檔(train的效果圖表)和`train_batch0.jpg`檔(train完框的結果?)可以看
->
可以用`runs/train/yolor_p6/weights`裡的`best_overall.pt`當新的權重Run YOLOR
顯示執行結果
->
可以把train完產生的權重存下來,以便之後使用
(完)(流程打於2/14)
# 02/14(一)
- [x] 跟大家講解如何train
- [ ] 搞懂train完吐出的資料->半懂不懂,要去熟悉混淆矩陣、AP相關資料
- [x] 重新再繼續train的方式
- [x] 確定YOLO v5 Pytorch寫法,把Waymo database的資料準備好(寫yaml檔)->還不確定YOLO v5 Pytorch寫法,但用現在的yaml檔可以train(友網站可以判斷有沒有寫好[https://codebeautify.org/yaml-validator](https://))
- [ ] 在國網上train看看
# 02/15(二)
- [ ] 搞懂train完吐出的資料->半懂不懂,要去熟悉混淆矩陣、AP相關資料
- [ ] 確定YOLO v5 Pytorch寫法
- [x] 讀處理waymo dataset 的.py檔->6成懂
- [x] 在國網上train看看->創了新環境(tzu_yolor)
1.出現error,解法:
```
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install -U cython
pip install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"
```
2.git clone了yolor跟mish-cuda,卡在mish-cuda的setup.py(CUDA_HOME environment variable)、`pip install -qr requirements.txt`可能有error也可能沒事


(02/16(三)請假)
# 02/17(四)
- [ ] 搞懂train完吐出的資料->半懂不懂,要去熟悉混淆矩陣、AP相關資料
- [ ] 確定YOLO v5 Pytorch寫法
- [x] 讀處理waymo dataset 的.py檔->學姊講解,9成懂
- [x] 提交job跑處理資料的.py檔->有成功,但不確定全部跑完要花多久,怕timeout,新設的是設15小時,RUNNING
- [x] 努力更新自己的電腦(因為很卡,而且之前一直有錯誤碼)->從1909手動更新到2021年11月更新
- [x] 在國網上train看看->Pytorch_wavelet可以了,但mish_cuda還是不行,可能得試試看下載其他cuda;有嘗試直接RUN YOLOR,但沒辦法(注意要get pre-trained weight)


# 02/18(五)
- [x] 昨天提交的job TimeOut了,跑到valid的108_184_SIDE_LEFT.txt,所以今天繼續(學姊有改data_create.py檔,讓我們可以看print出來的訊息)
- [x] 在國網上train看看->get pretrained weight出問題,應該是整體的問題,不是國網的問題,因為在之前可以執行的colab上跑也出事
```shell=
cd /yolor
bash scripts/get_pretrain.sh
```

```shell=
#scripts/get_pretrain.sh
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=1Tdn3yqpZ79X7R1Ql0zNlNScB1Dv9Fp76" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=1Tdn3yqpZ79X7R1Ql0zNlNScB1Dv9Fp76" -o yolor_p6.pt
rm ./cookie
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=1UflcHlN5ERPdhahMivQYCbWWw7d2wY7U" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=1UflcHlN5ERPdhahMivQYCbWWw7d2wY7U" -o yolor_w6.pt
rm ./cookie
```
*現在策略:直接train(因為train不用weight;據資工組所說,也不用install mish-cuda和pytorch_wavelets,因為用不到)
先train epochs數一次,看要跑多久,再train epochs數多的
train完把runs資料夾下載下來上傳到雲端用colab跑tesorboard看圖表,因為我們試著在國網上用tensorboard,可以產生網址,但應該只能在國網上開來看,不過國往沒法開網路,所以:)
- [x] 研究要上傳什麼到waymo的網站([Challenge 4 Real-time 2D Detection](https://waymo.com/open/challenges/2021/real-time-2d-prediction/))->剛開始看,一成懂
# 02/19(六)
- [x] 在國網上train看看
train job 1:

修正1

Importerror

/usr/lib64/libstdc++.so.6.0.19

/usr/lib64/libstdc++.so.6*

try 1:
嘗試將`/home/nckuhpclab11/.conda/envs/data_env/lib`裡的`libstdc++.so.6`刪掉,用軟連結`ln -s libstdc++.so.6.0.28 libstdc++.so.6`
->結果沒用(可能要在`/usr/lib64/`用軟連結?可是`/usr/lib64/`無法寫入`rm: cannot remove ‘libstdc++.so.6’: Permission denied`
)
try 2:
在`/home/nckuhpclab11/jocelin/env.sh`裡加`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nckuhpclab11/.conda/envs/yolor/lib/`
有進展~

- [ ] 研究要怎麼上傳到waymo的網站([Challenge 4 Real-time 2D Detection](https://waymo.com/open/challenges/2021/real-time-2d-prediction/))
- [ ] 有機會的話研究`scripts/get_pretrain.sh`跟`curl`指令
# 02/21(一)
- [x] 在國網上train看看
(15hr沒能跑完,所以改時長跟gpu數、ntasks-per-node、--nproc_per_node)
因為train的時候會改到yolor裡面的檔案,所以重新在tzuyu裡git clone yolor來train

gtest(後來截的,TIME應該是30min):


應該有在準備要train了
gp2d 40hr PD中:

- [x] 研究要怎麼上傳到waymo的網站([Challenge 4 Real-time 2D Detection](https://waymo.com/open/challenges/2021/real-time-2d-prediction/))
應該有用的、關於waymo challenge3,4的docker image的網站:https://github.com/waymo-research/waymo-open-dataset/blob/master/waymo_open_dataset/latency/README.md
Official challenge rule:https://waymo.com/open/terms
- [ ] 有機會的話研究`scripts/get_pretrain.sh`跟`curl`指令
- [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要)
- [ ] 研究yolor train指令的參數
# 02/23(三)
- [x] 在國網上train看看
result檔開頭:

(中間在scaning images和scaning labels,恕略)
result檔結尾:

=> 時間:3:22:43
做完前置,真正開始train時出現error:


single gpu job(想試會不會一樣執行不了、出現同個error):

=>應該差不多是同個原因,再看看

資工:可以把batch-size改大一點(32 or 64)
batch-size:例如有1000張圖片,設batch-size=10,則會一次train 1000/10=100張圖;會出現error可能是因為batch-size設太小,cuda memory塞不下。
--nproc_per_node呼應gpu數,可以改到最大值8,--device要記得跟著改成=0,1,2,3,4,5,6,7
#SBATCH --ntasks-per-node=1(可以只設1)
解tfrecord檔時,存檔檔名可以用uuid避免檔名重複到
batch-size=32

```shell=
#!/bin/bash
#SBATCH -p gp2d
#SBATCH -A ACD110038
#SBATCH --nodes=1
#SBATCH -J jocelin
#SBATCH --time=0-40:00:00
#SBATCH --nodelist=gn1215
#SBATCH --gres=gpu:8
#SBATCH --ntasks-per-node=1
#SBATCH --output=/home/nckuhpclab11/tzuyu/yolor/best_result/job_train_result_32
echo "Test start"
date
hostname
free -h
source /home/nckuhpclab11/jocelin/env.sh
cd /home/nckuhpclab11/tzuyu/yolor/
echo "gpu run"
echo "=============================="
python -m torch.distributed.launch --nproc_per_node 8 --master_port 9527 train.py --batch-size 32 --img 1920 1920 --data /home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/data.yaml --cfg cfg/yolor_p6_waymo.cfg --weights '' --device 0,1,2,3,4,5,6,7 --sync-bn --name yolor_p6_32 --hyp /home/nckuhpclab11/tzuyu/yolor/data/hyp.scratch.1280.yaml --epochs 1
echo "=============================="
date
echo "Test end"
```
batch-size=64:

(`env.sh`:

module load intel/2018是因為本來想要試mpirun,但後來沒有要用此方法,所以可以不用)
- [ ] 研究要怎麼上傳到waymo的網站
- [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要)
- [ ] 研究yolor train指令的參數
- [ ] 研究hackmd
# 02/24(四)
- [x] 在國網上train看看
還在pending
試gp1d

batch-suze大好像比較耗記憶體(還在研究)
https://www.itread01.com/content/1545969487.html
大概是:假設有1600筆資料,1600筆資料train完就是一個epochs跑完。如果batch-size設16,他一次會抓16筆資料來train,所以會抓100次才是跑完(完成一次epochs)。
- [ ] 研究要怎麼上傳到waymo的網站
- [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要)
- [ ] 研究yolor train指令的參數
- [x] 研究hackmd:https://hackmd.io/features-tw?both
# 03/01(二)
- [x] 在國網上train看看
gpu=8
batch-size=4, 20hr => 不是gpu數的倍數,所以沒法跑
batch-size=8, 20hr => 跑到training的7%,running time out
batch-size=16, 20hr=> 跑到training的9%,running time out
batch-size=32, => 1-09:44:13時跑到training的26%,還在跑
batch-size=64, => 做完前置後RuntimeError: CUDA out of memory.(04:02:31~05:25:08,共01:22:37,猜測前置差不多一個半到三小時=>batch-size=32的可能大概32小時train26%=>1小時14分鐘跑1%、130hr才能train完,但這樣會超過台灣山二號的時間限制)
所以猜測適合的batch-size大小應該也是大概呈微笑曲線
03/17更新:
batch-size=24, 20hr=> 跑到training的12%,running time out
batch-size=32, 20hr=> 跑到training的15% ,running time
03/19更新:
40=>17%
48=>20%
56=>22%
策略:試gpu=8, batch-size=16跟batch-size=32的96hr


策略2:試gpu=8, batch-size=16跟batch-size=32的96hr加上pretrained weight `yolor_p6.pt`


- [ ] 研究要怎麼上傳到waymo的網站
- [ ] 研究Link to the latency submission Docker image stored in Google Storage bucket or pushed to Google Container/Artifact Registry.(Waymo challenge submit需要)
- [x] 研究yolor train指令的參數
weight
(03/02自動控制補課,請假)
# 03/03(四)
- [x] 在國網上train看看=>RUNNING,應該沒受停電影響(?
# 03/04(五)
- [x] 在國網上train看看=>RUNNING
batch-size=32, 不管有無pre-trained權重都跑到54%(時間 無權重:2-22:08:27;有權重:2-21:39:56 左右),有無權重不太有差
batch-size=16,無權重跑到32%(時間:2-22:57:49),有權重跑到56%(時間:2-22:22:23),有無權重差異頗大
好神奇OAO
因為應該train不完,所以想先train一部份(train:100 tfrecord;valid:25 tfrecord),得到weight後再加更多資料去train
=>寫複製檔案的python檔
- [x] propsal=>寫了一點點
# 03/05(六)
- [x] 在國網上train看看
寫好python檔,可以直接大量複製images和labels檔了
```python=
import shutil
tfnum=100 #想要跑幾個tfrecord檔
for i in range(0,tfnum+1):
tf_num="%03d" % i #產生最前面的那三位數字,不足補零
for j in range(0,198):
image_num="%03d"%j #產生第二組三位數字(每個tfrecord檔裡的幀數),不足補零
#第一個相機(FRONT)
file_name1=tf_num+'_'+image_num+'_FRONT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name1
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name1
shutil.copy(src, des) #複製.jpg檔
file_name1=tf_num+'_'+image_num+'_FRONT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name1
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name1
shutil.copy(src, des) #複製.txt檔
#第二個相機(FRONT_LEFT)
file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name2
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name2
shutil.copy(src, des) #複製.jpg檔
file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name2
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name2
shutil.copy(src, des) #複製.txt檔
#第三個相機(FRONT_RIGHT)
file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name3
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name3
shutil.copy(src, des) #複製.jpg檔
file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name3
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name3
shutil.copy(src, des) #複製.txt檔
#第四個相機(SIDE_LEFT)
file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name4
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name4
shutil.copy(src, des) #複製.jpg檔
file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name4
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name4
shutil.copy(src, des) #複製.txt檔
#第五個相機(SIDE_RIGHT)
file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name5
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name5
shut il.copy(src, des) #複製.jpg檔
file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name5
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name5
shutil.copy(src, des) #複製.txt檔
```
*要再寫可以偵測哪些檔案沒有就跳過之類的部分(for FileNotFoundError)
比較少data的job script(gpu=8, batch-size=16 + pre-trained weight)

比較少data的job script(gpu=8, batch-size=32 + pre-trained weight)

=>大概50分鐘左右開始traing
補個開始train的畫面

目前最後面(時間:3-19:50:59)=>應該跑不完

# 03/06(日)
終於有東西train完了(撒花花

(結果32 batch-size的比16 batch-size的在少資料的時候快(16的還沒train完
(32的:Test start
Sat Mar 5 16:08:31 CST 2022
...
1 epochs completed in 15.900 hours.
...
Sun Mar 6 08:43:06 CST 2022
Test end)
result.png(應該是因為epochs=1所以只有一個點)

96/15.9=6.0372多=>設個epochs=6(有點太緊繃,希望可以)

# 03/08(二)
light 16 batch-size:27.337 hours

拿batch-size=32, epochs=1 train完的`best_overall.pt`

# 03/10(四)
- [x] 在國網上train看看
結果epochs=6(weight=yolor_p6.pt)的train不完
- [ ] 研究.cfg檔
- [x] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
隨機抽training input去train?
# 03/11(五)
- [x] 在國網上train看看
結果epochs=6(weight=yolor_p6.pt)的train不完
- [ ] 研究.cfg檔
momentum讓他有足夠的慣性繼續往loss比較少的weight找
learning_rate要夠小避免忽略掉loss最低的點,但會比較慢
- [x] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [x] 研究yolor的`train.py`
待查:
不同神經層差異?
`optimizer='adam'`
損失函數(LOSS)
效能衡量指標(metrics) `metrics=['accuracy']`
凸集合
Hyperparameter(超參數):在模型訓練前可調的參數
# 03/12(六)
- [x] 在國網上train看看
- batch-size=32+W(batch-size=32+W light epoch1) light epoch6
result.png:

- batch-size=32+W(batch-size=32+W light epoch1) epoch1=>error:

sol.
epoch數設錯,因為原本的weight已經train了1次,所以這次是從第二次開始train,epochs數要設(1+想train的epoch次數)
參考資料:https://github.com/ultralytics/yolov5/issues/249
- batch-size=32+W(batch-size=32+W light epoch6) epoch1
試試看這次能不能train完=>error


=>(昨天加的)再把它註解調試試看

- batch-size=32+W(batch-size=32+W light epoch6) light epoch6

- [ ] 研究`.cfg`檔
- [x] 研究deep learning 基礎理論&yolor演算法
- [x] 研究yolor的`train.py`
pytorch的神經層 指令:`torch.nn`
https://pytorch.org/docs/stable/nn.html
yolor `train.py`:

pytorch官網:

- [ ] 研究output
- [ ] 做偵測waymo照片的demo(run yolor)


- 之後:
1.先試用我們train出來的module來run
2.創大概一半大小(train:400 trfecord;valid:101 tfrecord)的dataset,繼續train
3.繼續補基礎理論
# 03/15(二)
- [ ] 研究`.cfg`檔
- [x] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究yolor的`train.py`
- [ ] 研究output
- [x] 做偵測waymo照片的demo(run yolor)


淒淒慘慘戚戚
- [x] 在國網上train看看
- batch-size=32+W(batch-size=32+W light epoch6) light epoch6
因為改資料改到資料夾名稱,所以它出現error,重提交一次job

研究跨機(gpu=32)
繼續創dataset(train的)
繼續補理論、看cfg檔
# 03/16(三)
- [ ] 在國網上train看看
gp4d 96hr gn1206 batch-size=32+W(352932)=>timeout,一樣只到75%
- [x] 研究跨機
試gpu=16的job

之後看到資料(https://blog.csdn.net/baidu_19518247/article/details/89635181)應該不行
- [ ] 研究`.cfg`檔、yolor的`train.py`
- [x] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- 複製waymo資料的程式(可以知道有幾幀,不用等notfound後重新執行):
```python=
import shutil
import glob
exe_result=[]
tfnum=400
for i in range(236,tfnum+1):
tf_num="%03d" % i
#找這個trfecord檔有幾幀,或是說第一組數字相同的檔案有幾個
file_glob=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+tf_num+'*'
file_glob_list=glob.glob(file_glob)
file_num_all=len(file_glob_list)
#輸出成result.txt,單純debug時用
exe_result.append(('file number of this tfrecord:' + str(file_num_all) + '\n'))
exe_result.append((str(file_glob_list) + '\n'))
# create result.txt
with open('result.txt', 'w') as f:
f.writelines(exe_result)
#因為有五台相機名稱不同,在這個迴圈內有分別寫,所以迴圈執行次數要除以五
for j in range(0,int(file_num_all/5)):
image_num="%03d"%j
#分別複製五台相機的jpg檔跟txt檔 (跟之前的一樣)
file_name1=tf_num+'_'+image_num+'_FRONT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name1
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name1
shutil.copy(src, des)
file_name1=tf_num+'_'+image_num+'_FRONT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name1
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name1
shutil.copy(src, des)
file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name2
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name2
shutil.copy(src, des)
file_name2=tf_num+'_'+image_num+'_FRONT_LEFT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name2
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name2
shutil.copy(src, des)
file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name3
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name3
shutil.copy(src, des)
file_name3=tf_num+'_'+image_num+'_FRONT_RIGHT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name3
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name3
shutil.copy(src, des)
file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name4
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name4
shutil.copy(src, des)
file_name4=tf_num+'_'+image_num+'_SIDE_LEFT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name4
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name4
shutil.copy(src, des)
file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.jpg'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/images/'+file_name5
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/images/'+file_name5
shutil.copy(src, des)
file_name5=tf_num+'_'+image_num+'_SIDE_RIGHT.txt'
src=r'/home/nckuhpclab11/waymo_data/waymo_pytorch/pytorch_dataset/train/labels/'+file_name5
des=r'/home/nckuhpclab11/tzuyu/waymo_partof/train/labels/'+file_name5
shutil.copy(src, des)
```
(之前的會卡住:

# 03/17(四)
- [x] 在國網上train看看
傳了batch-size=40, 48, 56(gpu=8, time=20hr, all data)的試batch-size大小趨勢
- [x] 研究跨機
error


- [ ] 研究`.cfg`檔、yolor的`train.py`
- [ ] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [ ] 寫train的教學
# 03/19(六)
- [x] 在國網上train看看
創了每十幀取一次的dataset(程品奕說他們的是40幀取一次)
發現waymo_partof_small的data.yaml裡的路徑沒改到,還是waymo_partof Orz
試waymo_partof
- [x] 研究跨機=>問了資工的程品奕,PD
- [ ] 研究`.cfg`檔、yolor的`train.py`
- [X] 研究deep learning 基礎理論&yolor演算法
- [X] 研究output
- [ ] 寫train的教學
# 03/22
- [x] 在國網上train看看
356615 gp4d 96hr gn1209 batch-size=56+W(352932) light ep6的在RUNNING,其他在PENDING
- [x] 研究跨機=>PD
但交了其他JOB試,還是不行
- RuntimeError: NCCL error in: /pytorch/torch/lib/c10d/ProcessGroupNCCL.cpp:784, unhandled system error, NCCL version 2.7.8




最後想試的,PD

(加NCCL_DEBUG=INFO
結果還是error(3/24)

- [ ] 研究`.cfg`檔、yolor的`train.py`
- [X] 研究deep learning 基礎理論&yolor演算法
- [X] 研究output
- [ ] 寫train的教學
# 03/24(四)

- [x] 在國網上train看看
- [x] 研究跨機=>`job_multi.sh`跟`a_multi.sh`的可以,之後繼續研究`job.sh`和`a.sh`的為什麼不行
- [ ] 研究`.cfg`檔、yolor的`train.py`
- [ ] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [ ] 寫train的教學
# 03/25(五)
- [x] 在國網上train看看=>試檔案大小跟train的時間的關係
waymo_partof

waymo_jump_40(每四十幀取一次的dataset)

- [ ] 研究跨機`job_multi.sh`跟`a_multi.sh`的可以,之後繼續研究`job.sh`和`a.sh`的為什麼不行
`job_multi.sh`跟`a_multi.sh`的(/home/nckuhpclab11/tzuyu/yolor/best_result/output_train_yolor_3_nodes.txt):
5 epochs completed in 8.091 hours.
- [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml`
- [x] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [x] 寫train的教學
=>發現之前有寫過colab的(哭笑
但還是重新整理了一下,並加上在國網上train的細節([yolor操作手冊](https://hackmd.io/@smiley-guava/H1VOyQiM9))
# 03/26(六)
- [ ] 在國網上train看看=>試檔案大小跟train的時間的關係
waymo_jump_40(每四十幀取一次的dataset)
batch-size32, gpu=8:3.157 hours
交job:waymo_jump(每十幀取一次的dataset)

- [x] 研究跨機`job_multi.sh`跟`a_multi.sh`的可以,之後繼續研究`job.sh`和`a.sh`的為什麼不行
`job_multi.sh`
#SBATCH --wait-all-nodes=1
#SBATCH --nodelist=gn1225(還是可以#SBATCH --nodelist=gn1225,gn1226?)=>可以
#SBATCH --cpus-per-task=32為什麼設32?
沒有#SBATCH --ntasks-per-node=1=>加了也可
`a_multi.sh`
有多設OMP_NUM_THREADS=1=>註解掉後可以RUN
在train之前又conda activate yolor了一次=>下面的註解掉後可以RUN,可以只source env.sh(activate環境和export參數)(不要在activate環境後把他丟到null,顯示出來的會有點怪但還是可以train
`--nproc_per_node=$NPROC_PER_NODE`=>`--nproc_per_node=8`=>可以
`--nnodes=$SLURM_JOB_NUM_NODES`=>`--nodes=2`
目前卡住=>改錯了!改到`--node_rank=$SLURM_PROCID`成`--node_rank=2`,難怪卡住

所以`--nnodes=$SLURM_JOB_NUM_NODES`=>`--nodes=2`可以
`--master_addr=gn1221`(還是可以`--master_addr=gn1221.twcc.ai`?)=>可以
不是用設變數的方式,而是直接打在參數設定指令那
`MASTER=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1)`
結論:結果是batch-size要是總gpu的倍數!!!從56改成128就可以了

*以後可以用變數去設,比較好改東西,或是改節點他就能自動偵測,不用一一手動改;長的指令可以分行,比較好修改東西跟比較好讀
- [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml`
- [ ] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [ ] 研究平行化運算
- [ ] 看GPCNet(新主題)相關資料
# 03/29(二)
- [ ] 在國網上train看看=>試檔案大小跟train的時間的關係
- train/imags和labels裡的檔案數量分別是:**78736**
(waymo_jump;每十幀取一次的dataset)
batch-size32, gpu=8:**12.594 hours**
- [x] 準備報告
- [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml`
- [ ] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [ ] 研究平行化運算
- [ ] 看GPCNet(新主題)相關資料
- [ ] yoloX
# 03/30(三)
- [ ] 在國網上train看看=>train 多一些epochs,看有沒有偵測起來比較好的
- [ ] 研究`.cfg`檔、yolor的`train.py`、`yolor/data/hyp.scratch.1280.yaml`
- [ ] 研究deep learning 基礎理論&yolor演算法
- [ ] 研究output
- [ ] 研究平行化運算
- [ ] yoloX
- [ ] Pytorch跟Tensorflow