輕松配置深度學(xué)習(xí)模型 ?
由于所有模塊都需要大量參數(shù)和設(shè)置,因此管理深度學(xué)習(xí)模型可能很困難。訓(xùn)練模塊可能需要諸如 batch_size 或 num_epochs 之類的參數(shù)或?qū)W習(xí)率調(diào)度程序的參數(shù)。同樣,數(shù)據(jù)預(yù)處理模塊可能需要 train_test_split 或圖像增強(qiáng)參數(shù)。
管理這些參數(shù)或?qū)⑦@些參數(shù)引入管道的一種簡單方法是在運(yùn)行腳本時將它們用作 CLI 參數(shù)。命令行參數(shù)可能難以輸入,并且可能無法在單個文件中管理所有參數(shù)。 TOML 文件提供了一種更簡潔的配置管理方式,腳本可以以 Python 字典的形式加載配置的必要部分,而無需樣板代碼來讀取/解析命令行參數(shù)。
在這篇博客中,我們將探討 TOML 在配置文件中的使用,以及我們?nèi)绾卧谟?xùn)練/部署腳本中有效地使用它們。
什么是 TOML 文件?
TOML,代表 Tom's Obvious Minimal Language,是專門為配置文件設(shè)計的文件格式。 TOML 文件的概念與 YAML/YML 文件非常相似,后者能夠在樹狀層次結(jié)構(gòu)中存儲鍵值對。 TOML 優(yōu)于 YAML 的一個優(yōu)點(diǎn)是它的可讀性,這在有多個嵌套級別時變得很重要。

為什么我們需要在 TOML 中進(jìn)行配置?
使用 TOML 存儲 ML 模型的模型/數(shù)據(jù)/部署配置有兩個優(yōu)點(diǎn):
在單個文件中管理所有配置:使用 TOML 文件,我們可以創(chuàng)建不同模塊所需的多組設(shè)置。例如,在圖 1 中,與模型訓(xùn)練過程相關(guān)的設(shè)置嵌套在 [train] 屬性下,類似地,部署模型所需的端口和主機(jī)存儲在 deploy 下。我們不需要在 train.py 或 deploy.py 之間跳轉(zhuǎn)來更改它們的參數(shù),相反,我們可以從單個 TOML 配置文件中全局化所有設(shè)置。
我們?nèi)绾螐?TOML 讀取配置?
要從 TOML 文件中讀取配置,可以使用兩個 Python 包,toml 和 munch。 toml 將幫助我們讀取 TOML 文件并將文件的內(nèi)容作為 Python dict 返回。 munch 將轉(zhuǎn)換 dict 的內(nèi)容以啟用元素的屬性樣式訪問。例如,我們可以不寫 config[ "training" ][ "num_epochs" ] ,而是寫 config.training.num_epochs 以提高可讀性。
考慮以下文件結(jié)構(gòu),
project_config.toml 包含我們 ML 項(xiàng)目的配置,例如,
在 config.py 中,我們使用 toml 和 munch 創(chuàng)建了一個返回此配置的 munchified 版本的函數(shù),
現(xiàn)在,現(xiàn)在在我們的任何項(xiàng)目文件中,比如 train.py 或 predict.py ,我們可以加載這個配置,
print( toml.load( filepath ) ) ) 的輸出是,
如果您正在使用 W&B Tracking 或 MLFlow 等 MLOps 工具,將配置維護(hù)為字典可能會有所幫助,因?yàn)槲覀兛梢灾苯訉⑵渥鳛閰?shù)傳遞。
總結(jié)
希望您會考慮在下一個 ML 項(xiàng)目中使用 TOML 配置!這是一種管理訓(xùn)練/部署或推理腳本全局或本地設(shè)置的簡潔方法。
腳本可以直接從 TOML 文件加載配置,而不是編寫長 CLI 參數(shù)。如果我們希望訓(xùn)練具有不同超參數(shù)的模型的兩個版本,我們只需要更改 config.py 中的 TOML 文件。我已經(jīng)開始在我最近的項(xiàng)目中使用 TOML 文件并且實(shí)驗(yàn)變得更快。 MLOps 工具還可以管理模型的版本及其配置,但上述方法的簡單性是獨(dú)一無二的,并且需要對現(xiàn)有項(xiàng)目進(jìn)行最少的更改。