[PYTHON] Portierung von Argparse zu Hydra

Dies ist eine Erinnerung an das, was ich beim Konvertieren von Pythons Argparse-Einstellungen in Hydra nachgeschlagen habe. Schließlich schreibe ich eine praktische Funktion, die nur für Hydra gilt.

Einführung

Beim Schreiben eines Expertenskripts für maschinelles Lernen in Python habe ich argparse als Einstellungsmethode für Hyperparameter verwendet. Als das Experiment jedoch komplizierter wurde, bestand der Wunsch, eine beträchtliche Anzahl von Zeilen zu haben und die Einstellungen nur mit der Datei zu strukturieren, die die Argparse-Einstellungen beschreibt. .. .. Lesen Sie also ymyms "Empfehlung für ein hohes Para-Management - Verwalten Sie Hyperparameter mit Hydra + MLflow-" und lesen Sie "This Es war! “, Also entschied ich mich, es zu benutzen. Dann habe ich verschiedene Dinge untersucht, als ich die in Argparse geschriebenen experimentellen Einstellungen auf Hydra migriert habe, also habe ich sie zusammengefasst.

Was ist Hydra?

image.png

"A framework for elegantly configuring complex applications" Es scheint ein "Rahmen für die elegante Verwaltung der Einstellungen komplexer Anwendungen" zu sein. Die Entwicklung konzentriert sich auf die Facebook-Forschung.

Github/OfficialDocument

Wie benutzt man Hydra?

Detaillierte Einstellungen finden Sie im obigen Artikel von ymym und Official Tutorial. Die erste Funktion ist, dass Sie, wenn Sie die Einstellungen in der yaml-Datei strukturell beschreiben und den Inhalt überschreiben möchten, diese zur Laufzeit in der Befehlszeile überschreiben können.

Verschiedene Schreibstile

Optionsdefinition und Laden

--hydra beschreibt die Einstellungen in der yaml-Datei und gibt sie als Dekorator für die Funktion, die sie ausführt.

argparse

# main.py
def main():
    parser = parser.ArgumentParser(...)
    parser.add_argument('--hoge', type=int, default=1)
    cfg = parser.parse_args()
    print(cfg.hoge) # 1

hydra

# config.yaml
hoge: 1

# main.py
@hydra.main(config_path='config.yaml')
def main(cfg):
    print(cfg.hoge) # 1

Standard überschreiben

argparse

# shell
python main.py --hoge 2

hydra

# shell
python main.py hoge=1

nargs

argparse

# main.py
parser.add_argument('--hoge', type=int, nargs=3, default=[1, 2, 3])

# shell
python main.py --hoge 4 5 6

hydra

# config.yaml
hoge:
  - 1
  - 2
  - 3

# shell
python main.py hoge=[1,2,3]

required=True

argparse

# main.py
parser.add_argument('--hoge', type=int, required=True)

hydra

# config.yaml
hoge: ???

choices

argparse

# main.py
parser.add_argument('--hoge', type=int, default=1, choices=[1, 2])
print(cfg.hoge)

# shell
python main.py --hoge 2
# 2

hydra

├── config
|   ├── config.yaml
│   └── choice
│       ├── a.yaml
│       └── b.yaml
└── main.py

# config.yaml
choice: a

# choice/a.yaml
hoge: 1

# choice/b.yaml
hoge: 2

# main.py
print(cfg.hoge)

# shell
python main.py choice=b
# 2

--help

argparse

# shell
python main.py --help

hydra

# shell
python main.py --cfg job

Bequeme Funktion nur in Hydra

Da es sich fast um eine Einführung in das Lernprogramm handelt, binden Sie einen Link zum Ziel-Lernprogramm in den Abschnittsnamen ein. Bitte beachten Sie dies für Details.

Multi-run Versuchen Sie, gleichzeitig mehrere Einstellungen vorzunehmen, wobei die Konfiguration in den obigen Optionen festgelegt ist.

# shell
python main.py hoge=a,b

Tab Completion

Wenn Sie den folgenden Befehl einmal ausführen, bevor Sie das Skript ausführen, können Sie die Tab-Vervollständigung verwenden, wenn Sie Optionen über die Befehlszeile angeben.

eval "$(python main.py -sc install=bash)"

Protokollverzeichnis erstellen

hydra erstellt automatisch ein strukturiertes Protokollverzeichnis basierend auf Datum und Uhrzeit ohne Einstellungen und verwendet dieses zur Laufzeit als Arbeitsverzeichnis und die zur Laufzeit generierten und gespeicherten Dateien. Dateien speichern etc.

import os

@hydra.main()
def main(_cfg):
    print("Working directory : {}".format(os.getcwd()))

$ python main.py
Working directory : /home/omry/dev/hydra/outputs/2019-09-25/15-16-17

$ python main.py
Working directory : /home/omry/dev/hydra/outputs/2019-09-25/15-16-19

Geben Sie das Arbeitsverzeichnis jedoch nicht ohne Erlaubnis an! Ich denke, es gibt Leute, die das sagen (ich selbst), also lasst uns das Verzeichnis für Hydra selbst angeben.

Zusammenfassung

Ich habe gerade angefangen, es zu verwenden. Wenn der Artikel also Fehler enthält oder jemand, der einen besseren Weg kennt, würde ich es begrüßen, wenn Sie mich unterrichten könnten. Wenn Sie Hydra verwenden, wird der Code aktualisiert, versuchen Sie es also bitte! (Besonders für großen Code)

Wenn Sie mehr über die Verwendung erfahren möchten, wenden Sie sich bitte an Offizielles Dokument und ymyms Blog. Bitte beziehen Sie sich auf / 09 034644).

Recommended Posts

Portierung von Argparse zu Hydra
Summe von 1 bis 10
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Änderungen von Python 2 zu Python 3.0
Übergang von WSL1 zu WSL2
Ergänzen Sie argparse aus docstrings
Von der Bearbeitung bis zur Ausführung
Flirte von PHP nach Python
Übergang von Chainer v1 zu Chainer v2
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Von Flask-RESTPlus nach Flask-RESTX migriert
Wie benutzt man Python Argparse?
Aktualisieren Sie python-social-auth von 0.1.x auf 0.2.x.
Migrieren Sie von require.txt zu pipenv
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Rufen Sie Matlab von Python zur Optimierung auf
Von der Installation von Elasticsearch bis zur Dateneingabe
vtkXMLUnstructuredGridReader Zusammenfassung (von Zeit zu Zeit aktualisiert)
vtkOpenFOAMReader-Zusammenfassung (von Zeit zu Zeit aktualisiert)
Wie man SWIG von waf benutzt
Migration von direct_to_template zu TemplateView nicht möglich
Ingenieur-Wortbuch (von Zeit zu Zeit aktualisiert)
Konvertierung von pdf nach txt 1 [pdfminer]
Programmierung aus Büchern gelernt 10. Mai
Post von Python auf Facebook Timeline
[Lambda] [Python] Von Lambda auf Twitter posten!
Ausgabe von Raspberry Pi an Line
[Einführung] Von der Installation von Kibana bis zum Start
Konvertierung von pdf nach txt 2 [pyocr]
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
OpenMPI-Installation Vom Download bis zum Bestehen
Tensorflow-Memo [von Zeit zu Zeit aktualisiert]
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
Senden Sie Befehle von Atom an Maya
So starten Sie den Explorer über die WSL
Programmierung aus Büchern gelernt 7. Mai
Ab Ubuntu 20.04 Einführung in die Umgebungskonstruktion
Fügen Sie "%" in die Argparse-Hilfe ein, um zu sterben
SSH-Verbindung von Windows zu GCP
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
So konvertieren Sie von .mgz nach .nii.gz
Migrieren Sie von VS Code zu PyCharm
pynq-z1 Vom Kauf bis zur Funktionsprüfung
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3