动动发财的小手,点个赞吧!
因为所有模块都须要大量参数和设置,因而治理深度学习模型可能很艰难。训练模块可能须要诸如 batch_size 或 num_epochs 之类的参数或学习率调度程序的参数。同样,数据预处理模块可能须要 train_test_split 或图像增强参数。
治理这些参数或将这些参数引入管道的一种简略办法是在运行脚本时将它们用作 CLI 参数。命令行参数可能难以输出,并且可能无奈在单个文件中治理所有参数。TOML 文件提供了一种更简洁的配置管理形式,脚本能够以 Python 字典的模式加载配置的必要局部,而无需样板代码来读取 / 解析命令行参数。
在这篇博客中,咱们将探讨 TOML 在配置文件中的应用,以及咱们如何在训练 / 部署脚本中无效地应用它们。
什么是 TOML 文件?
TOML,代表 Tom’s Obvious Minimal Language,是专门为配置文件设计的文件格式。TOML 文件的概念与 YAML/YML 文件十分类似,后者可能在树状层次结构中存储键值对。TOML 优于 YAML 的一个长处是它的可读性,这在有多个嵌套级别时变得很重要。
为什么咱们须要在 TOML 中进行配置?
应用 TOML 存储 ML 模型的模型 / 数据 / 部署配置有两个长处:
在单个文件中治理所有配置:应用 TOML 文件,咱们能够创立不同模块所需的多组设置。例如,在图 1 中,与模型训练过程相干的设置嵌套在 [train] 属性下,相似地,部署模型所需的端口和主机存储在 deploy 下。咱们不须要在 train.py 或 deploy.py 之间跳转来更改它们的参数,相同,咱们能够从单个 TOML 配置文件中全局化所有设置。
如果咱们在虚拟机上训练模型,而代码编辑器或 IDE 不可用于编辑文件,这可能会十分有用。应用大多数 VM 上可用的 vim 或 nano 能够轻松编辑单个配置文件。
咱们如何从 TOML 读取配置?
要从 TOML 文件中读取配置,能够应用两个 Python 包,toml 和 munch。toml 将帮忙咱们读取 TOML 文件并将文件的内容作为 Python dict 返回。munch 将转换 dict 的内容以启用元素的属性款式拜访。例如,咱们能够不写 config “training”,而是写 config.training.num_epochs 以进步可读性。
思考以下文件构造,
- config.py
- train.py
- project_config.toml
project_config.toml 蕴含咱们 ML 我的项目的配置,例如,
[data]
vocab_size = 5589
seq_length = 10
test_split = 0.3
data_path = "dataset/"
data_tensors_path = "data_tensors/"
[model]
embedding_dim = 256
num_blocks = 5
num_heads_in_block = 3
[train]
num_epochs = 10
batch_size = 32
learning_rate = 0.001
checkpoint_path = "auto"
在 config.py 中,咱们应用 toml 和 munch 创立了一个返回此配置的 munchified 版本的函数,
pip install toml munch
import toml
import munch
def load_global_config(filepath : str = "project_config.toml"):
return munch.munchify(toml.load( filepath) )
def save_global_config(new_config , filepath : str = "project_config.toml"):
with open(filepath , "w") as file:
toml.dump(new_config , file)
当初,当初在咱们的任何我的项目文件中,比方 train.py 或 predict.py,咱们能够加载这个配置,
from config import load_global_config
config = load_global_config()
batch_size = config.train.batch_size
lr = config.train.learning_rate
if config.train.checkpoint_path == "auto":
# Make a directory with name as current timestamp
pass
print(toml.load( filepath) ) ) 的输入是,
{'data': {'data_path': 'dataset/',
'data_tensors_path': 'data_tensors/',
'seq_length': 10,
'test_split': 0.3,
'vocab_size': 5589},
'model': {'embedding_dim': 256, 'num_blocks': 5, 'num_heads_in_block': 3},
'train': {'batch_size': 32,
'checkpoint_path': 'auto',
'learning_rate': 0.001,
'num_epochs': 10}}
如果您正在应用 W&B Tracking 或 MLFlow 等 MLOps 工具,将配置保护为字典可能会有所帮忙,因为咱们能够间接将其作为参数传递。
总结
心愿您会思考在下一个 ML 我的项目中应用 TOML 配置!这是一种治理训练 / 部署或推理脚本全局或本地设置的简洁办法。
脚本能够间接从 TOML 文件加载配置,而不是编写长 CLI 参数。如果咱们心愿训练具备不同超参数的模型的两个版本,咱们只须要更改 config.py 中的 TOML 文件。我曾经开始在我最近的我的项目中应用 TOML 文件并且试验变得更快。MLOps 工具还能够治理模型的版本及其配置,但上述办法的简略性是举世无双的,并且须要对现有我的项目进行起码的更改。
本文由 mdnice 多平台公布