Einfaches Verwalten von Deep-Learning-Modellen mit TOML-Konfigurationen | von Shubham Panchal | Juni 2023

0
25


Möglicherweise benötigen Sie diese langen CLI-Argumente nie für Ihre prepare.py

Foto von Scott Graham An Unsplash

Die Verwaltung von Deep-Studying-Modellen kann aufgrund der großen Anzahl an Parametern und Einstellungen, die für alle Module erforderlich sind, schwierig sein. Das Trainingsmodul benötigt möglicherweise Parameter wie batch_size oder der num_epochs oder Parameter für den Lernratenplaner. Ebenso könnte das Datenvorverarbeitungsmodul erforderlich sein train_test_split oder Parameter zur Bildvergrößerung.

Ein naiver Ansatz zum Verwalten oder Einführen dieser Parameter in die Pipeline besteht darin, sie beim Ausführen der Skripts als CLI-Argumente zu verwenden. Die Eingabe von Befehlszeilenargumenten kann schwierig sein und die Verwaltung aller Parameter in einer einzigen Datei ist möglicherweise nicht möglich. TOML-Dateien bieten eine sauberere Möglichkeit, Konfigurationen zu verwalten, und Skripte können notwendige Teile der Konfiguration in Type eines Python laden dict ohne dass Boilerplate-Code zum Lesen/Parsen von Befehlszeilenargumenten erforderlich ist.

In diesem Weblog untersuchen wir die Verwendung von TOML in Konfigurationsdateien und wie wir sie effizient in Trainings-/Bereitstellungsskripten verwenden können.

TOML steht für Toms offensichtliche Minimalspracheist ein Dateiformat, das speziell für Konfigurationsdateien entwickelt wurde. Das Konzept einer TOML-Datei ist ziemlich ähnlich YAML/YML-Dateien die die Fähigkeit haben, Schlüssel-Wert-Paare in einer baumartigen Hierarchie zu speichern. Ein Vorteil von TOML gegenüber YAML ist seine Lesbarkeit Dies wird wichtig, wenn mehrere verschachtelte Ebenen vorhanden sind.

Abb.1. Dieselben Modellkonfigurationen geschrieben in TOML (hyperlinks) und YAML (rechts). TOML ermöglicht es uns, Schlüssel-Wert-Paare unabhängig von der Hierarchie auf derselben Einrückungsebene zu schreiben.

Persönlich sehe ich, abgesehen von der verbesserten Lesbarkeit, keinen praktischen Grund, TOML gegenüber YAML vorzuziehen. Die Verwendung von YAML ist absolut in Ordnung, hier a Python-Paket zum Parsen von YAML.

Die Verwendung von TOML zum Speichern von Modell-/Daten-/Bereitstellungskonfigurationen für ML-Modelle bietet zwei Vorteile:

Alle Konfigurationen in einer einzigen Datei verwalten: Mit TOML-Dateien können wir mehrere Gruppen von Einstellungen erstellen, die für verschiedene Module erforderlich sind. In Abbildung 1 sind beispielsweise die Einstellungen im Zusammenhang mit dem Trainingsverfahren des Modells unter verschachtelt [train] Attribut, ähnlich dem port Und host Die für die Bereitstellung des Modells erforderlichen Dateien werden unter gespeichert deploy . Wir müssen nicht dazwischen springen prepare.py oder deploy.py Um ihre Parameter zu ändern, können wir stattdessen alle Einstellungen aus einer einzigen TOML-Konfigurationsdatei globalisieren.

Dies könnte sehr hilfreich sein, wenn wir das Modell auf einer virtuellen Maschine trainieren, wo keine Code-Editoren oder IDEs zum Bearbeiten von Dateien verfügbar sind. Eine einzelne Konfigurationsdatei lässt sich einfach bearbeiten vim oder nano auf den meisten VMs verfügbar.

Um die Konfiguration aus TOML-Dateien zu lesen, können zwei Python-Pakete verwendet werden: toml Und munch . toml wird uns helfen, die TOML-Datei zu lesen und den Inhalt der Datei als Python zurückzugeben dict . munch konvertiert den Inhalt der dict um den Attributstil-Zugriff auf Elemente zu ermöglichen. Anstatt zum Beispiel zu schreiben, config[ "training" ][ "num_epochs" ] wir können einfach schreiben config.coaching.num_epochs was die Lesbarkeit verbessert.

Betrachten Sie die folgende Dateistruktur:

- config.py
- prepare.py
- project_config.toml

project_config.toml enthält die Konfiguration für unser ML-Projekt, wie zum Beispiel:

[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"

In config.py erstellen wir eine Funktion, die das zurückgibt gekaut-Model dieser Konfiguration, mit toml Und munch ,

$> pip set up 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 )

Jetzt, jetzt in einer unserer Projektdateien, z prepare.py oder predict.py wir können diese Konfiguration laden,

from config import load_global_config

config = load_global_config()

batch_size = config.prepare.batch_size
lr = config.prepare.learning_rate

if config.prepare.checkpoint_path == "auto":
# Make a listing with identify as present timestamp
go

Die Ausgabe von print( toml.load( filepath ) ) ) Ist,

{'information': {'data_path': 'dataset/',
'data_tensors_path': 'data_tensors/',
'seq_length': 10,
'test_split': 0.3,
'vocab_size': 5589},
'mannequin': {'embedding_dim': 256, 'num_blocks': 5, 'num_heads_in_block': 3},
'prepare': {'batch_size': 32,
'checkpoint_path': 'auto',
'learning_rate': 0.001,
'num_epochs': 10}}

Wenn Sie MLOps-Instruments wie W&B Monitoring oder MLFlow verwenden, müssen Sie die Konfiguration beibehalten dict könnte hilfreich sein, da wir es direkt als Argument übergeben können.

Ich hoffe, Sie werden die Verwendung von TOML-Konfigurationen in Ihrem nächsten ML-Projekt in Betracht ziehen! Dies ist eine saubere Möglichkeit, Einstellungen zu verwalten, die sowohl world als auch lokal für Ihre Trainings-/Bereitstellungs- oder Inferenzskripte sind.

Anstatt lange CLI-Argumente zu schreiben, könnten die Skripte die Konfiguration direkt aus der TOML-Datei laden. Wenn wir zwei Versionen eines Modells mit unterschiedlichen Hyperparametern trainieren möchten, müssen wir nur die TOML-Datei ändern config.py . Ich habe in meinen letzten Projekten begonnen, TOML-Dateien zu verwenden, und das Experimentieren ist schneller geworden. MLOps-Instruments können auch Versionen eines Modells zusammen mit ihren Konfigurationen verwalten, aber die Einfachheit des oben diskutierten Ansatzes ist einzigartig und erfordert nur minimale Änderungen in bestehenden Projekten.

Ich hoffe, Ihnen hat die Lektüre gefallen. Hab einen schönen Tag!



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here