Kaggle | 如何解決提交錯(cuò)誤
Code Competition,測(cè)試數(shù)據(jù)并不可見(jiàn),我們需要將notebook代碼在線提交進(jìn)行推理,而因?yàn)闇y(cè)試集不可以見(jiàn)經(jīng)常會(huì)遇到提交Error,同時(shí)報(bào)錯(cuò)完整的日志并不返回,只返回錯(cuò)誤大類(lèi)類(lèi)型,在Debug時(shí)有一定程度上的困難。今天我便將之前遇到過(guò)的一些報(bào)錯(cuò)以及如何排查來(lái)做一個(gè)簡(jiǎn)單的總結(jié)回顧,使得自己在今后的提交盡量避免出錯(cuò)。1. Notebook Threw Exception
因?yàn)楸荣愃o出的sample_test文件僅包含極少量數(shù)據(jù),最后線上用來(lái)預(yù)測(cè)的測(cè)試集可能和公開(kāi)的數(shù)據(jù)集有差異的情況,這便是導(dǎo)致異常的罪魁禍?zhǔn)住?/span>舉個(gè)曾經(jīng)遇到過(guò)的例子,當(dāng)我們使用Label Encoder對(duì)類(lèi)別變量進(jìn)行編碼時(shí),測(cè)試集中可能存在未曾出現(xiàn)過(guò)的類(lèi)別,導(dǎo)致異常拋出。我們需要提高代碼的健壯性,以應(yīng)對(duì)未知測(cè)試集可能帶來(lái)的異常情況。
2. Notebook Timeout
根據(jù)不同比賽的時(shí)間限制不同,我們需要在指定的時(shí)間內(nèi)完成推理。為了避免超時(shí)錯(cuò)誤,我們需要合理估計(jì)模型的推理時(shí)間,根據(jù)測(cè)試集的長(zhǎng)度使用訓(xùn)練集來(lái)模擬推理(可以采用1/5、1/10的測(cè)試集數(shù)量的訓(xùn)練集以節(jié)約GPU時(shí)長(zhǎng))。超時(shí)錯(cuò)誤經(jīng)常發(fā)生在比賽后期多個(gè)模型進(jìn)行融合時(shí),我們應(yīng)該控制整個(gè)推理時(shí)長(zhǎng)在指定的時(shí)間內(nèi)。除此之外,我們可以對(duì)代碼進(jìn)行優(yōu)化,提升模型推理的速度,例如在Feedback比賽中,根據(jù)@hengck23在討論區(qū)所提到的,我們可以對(duì)text的長(zhǎng)度進(jìn)行排序,將長(zhǎng)度相仿的數(shù)據(jù)放入同個(gè)batch中,在batch中取最長(zhǎng)的token來(lái)進(jìn)行padding的方法以減少不必要的時(shí)間消耗(此方法提升推理速度約為6倍)。
3. ?Notebook Exceeded Allowed Compute
16G爆掉,二是內(nèi)存在推理時(shí)超出13G。def?memory_used_to_str():
????#?https://stackoverflow.com/questions/61366458/how-to-find-memory-usage-of-kaggle-notebook
????pid?=?os.getpid()
????processs?=?psutil.Process(pid)
????memory_use?=?processs.memory_info()[0]?/?2.?**?30
????return?'ram?memory?gb?:'?+?str(np.round(memory_use,?2))
對(duì)于顯存超過(guò)容量的問(wèn)題,我們可以使用較小的batch_size, 并且在加載完前一個(gè)模型并且完成推理保存結(jié)果后,及時(shí)清除顯存,然后加載下一個(gè)模型。對(duì)于huggingface中預(yù)訓(xùn)練模型的加載,我們可以通過(guò)使用from_config而不是from_pretrained,后者可能會(huì)有異常的顯存泄露導(dǎo)致OOM(來(lái)自@閣老師的discuss)。
4. Submission CSV Not Found
該錯(cuò)誤是指比賽所指定的submission.csv文件未能找到。一種情況是我們生成的文件名不符合要求,注意生成的提交文件一定需要命名為submission.csv而不是其他;另外一種情況是notebook在運(yùn)行時(shí),遇到錯(cuò)誤停止運(yùn)行,未能生成提交文件。
5. Submission Scoring Error
我們需要按照比賽要求生成對(duì)應(yīng)的提交文件,保證該提交文件的行數(shù)以及列數(shù)滿足要求,保證輸出的內(nèi)容符合規(guī)范,以避免提交值無(wú)效,造成得分異常。
6. Kaggle Error
——END——
