¿Cómo podemos crear canales de experimentos de aprendizaje automático escalables y reproducibles utilizando Meta Research Hydra?

En este tutorial, exploramos Hydra, un marco de gestión de configuración avanzada desarrollado originalmente y de código abierto por Meta Research. Comenzamos definiendo configuraciones estructuradas utilizando clases de datos de Python, lo que nos permite administrar los parámetros del experimento de una manera limpia, modular y reproducible. A medida que avanzamos en el tutorial, componemos configuraciones, aplicamos anulaciones de tiempo de ejecución y simulamos experimentos de ejecución múltiple para barridos de hiperparámetros. Consulta los CÓDIGOS COMPLETOS aquí.

importar subproceso importar sys subproceso.check_call([sys.executable, “-m”, “pip”, “install”, “-q”, “hydra-core”]) importar hidra desde hidra importar componer, inicializar_config_dir desde omegaconf importar OmegaConf, DictConfig desde clases de datos importar clase de datos, campo desde escribir importar Lista, importar sistema operativo opcional desde ruta de ruta de importación

Comenzamos instalando Hydra e importando todos los módulos esenciales necesarios para configuraciones estructuradas, composición dinámica y manejo de archivos. Esta configuración garantiza que nuestro entorno esté listo para ejecutar el tutorial completo sin problemas en Google Colab. Consulta los CÓDIGOS COMPLETOS aquí.

@dataclass clase OptimizerConfig: _target_: str = “torch.optim.SGD” lr: float = 0.01 @dataclass clase AdamConfig(OptimizerConfig): _target_: str = “torch.optim.Adam” lr: float = 0.001 betas: tupla = (0.9, 0.999) Weight_decay: float = 0.0 @dataclass clase SGDConfig(OptimizerConfig): _target_: str = “torch.optim.SGD” lr: float = 0.01 impulso: float = 0.9 nesterov: bool = True @dataclass clase ModelConfig: nombre: str = “resnet” num_layers: int = 50 oculto_dim: int = 512 abandono: float = 0.1 @dataclass clase DataConfig: conjunto de datos: str = “cifar10” tamaño_lote: int = 32 num_workers: int = 4 aumento: bool = True @dataclass clase TrainingConfig: modelo: ModelConfig = campo(default_factory=ModelConfig) datos: DataConfig = campo(default_factory=DataConfig) optimizador: OptimizerConfig = campo(default_factory=AdamConfig) épocas: int = 100 semilla: int = 42 dispositivo: str = “cuda” experiment_name: str = “exp_001”

Definimos configuraciones limpias y de tipo seguro utilizando clases de datos de Python para el modelo, los datos y la configuración del optimizador. Esta estructura nos permite gestionar parámetros de experimentos complejos de forma modular y legible, al tiempo que garantiza la coherencia entre ejecuciones. Consulta los CÓDIGOS COMPLETOS aquí.

def setup_config_dir(): config_dir = Path(“./hydra_configs”) config_dir.mkdir(exist_ok=True) main_config = “”” valores predeterminados: – modelo: resnet – datos: cifar10 – optimizador: adam – _self_ épocas: 100 semilla: 42 dispositivo: cuda experiment_name: exp_001 “”” (config_dir / “config.yaml”).write_text(main_config) model_dir = config_dir / “model” model_dir.mkdir(exist_ok=True) (model_dir / “resnet.yaml”).write_text(“”” nombre: resnet num_layers: 50 oculto_dim: 512 abandono: 0.1 “””) (model_dir / “vit.yaml”).write_text(“”” nombre: vision_transformer num_layers: 12 oculto_dim: 768 abandono: 0.1 parche_tamaño: 16 “””) data_dir = config_dir / “data” data_dir.mkdir(exist_ok=True) (data_dir / “cifar10.yaml”).write_text(“”” conjunto de datos: cifar10 tamaño_lote: 32 num_workers: 4 aumento: verdadero “””) (data_dir / “imagenet.yaml”).write_text(“”” conjunto de datos: imagenet tamaño_lote: 128 num_workers: 8 aumento: verdadero “””) opt_dir = config_dir / “optimizer” opt_dir.mkdir(exist_ok=True) (opt_dir / “adam.yaml”).write_text(“”” _target_: torch.optim.Adam lr: 0,001 betas: [0.9, 0.999]
Weight_decay: 0.0 “””) (opt_dir / “sgd.yaml”).write_text(“”” _target_: torch.optim.SGD lr: 0.01 impulso: 0.9 nesterov: true “””) return str(config_dir.absolute())

Creamos mediante programación un directorio que contiene archivos de configuración YAML para modelos, conjuntos de datos y optimizadores. Este enfoque nos permite demostrar cómo Hydra compone automáticamente configuraciones a partir de diferentes archivos, manteniendo así la flexibilidad y claridad en los experimentos. Consulta los CÓDIGOS COMPLETOS aquí.

@hydra.main(version_base=None, config_path=”hydra_configs”, config_name=”config”) def train(cfg: DictConfig) -> float: print(“=” * 80) print(“CONFIGURACIÓN”) print(“=” * 80) print(OmegaConf.to_yaml(cfg)) print(“\n” + “=” * 80) print(“ACCEDIENDO A LA CONFIGURACIÓN VALORES”) print(“=” * 80) print(f”Modelo: {cfg.model.name}”) print(f”Conjunto de datos: {cfg.data.dataset}”) print(f”Tamaño de lote: {cfg.data.batch_size}”) print(f”Optimizador LR: {cfg.optimizer.lr}”) print(f”Épocas: {cfg.epochs}”) best_acc = 0.0 para época en rango(min(cfg.epochs, 3)): acc = 0.5 + (época * 0.1) + (cfg.optimizer.lr * 10) best_acc = max(best_acc, acc) print(f”Época {época+1}/{cfg.epochs}: Precisión = {acc:.4f}”) return best_acc

Implementamos una función de capacitación que aprovecha el sistema de configuración de Hydra para imprimir, acceder y usar valores de configuración anidados. Al simular un ciclo de entrenamiento simple, mostramos cómo Hydra integra limpiamente el control del experimento en flujos de trabajo reales. Consulta los CÓDIGOS COMPLETOS aquí.

def demo_basic_usage(): print(“\n” + “🚀 DEMO 1: Configuración básica\n”) config_dir = setup_config_dir() con inicialize_config_dir(version_base=None, config_dir=config_dir): cfg = compose(config_name=”config”) print(OmegaConf.to_yaml(cfg)) def demo_config_override(): print(“\n” + “🚀 DEMOSTRACIÓN 2: Anulaciones de configuración\n”) config_dir = setup_config_dir() con inicialize_config_dir(version_base=None, config_dir=config_dir): cfg = compose( config_name=”config”, overrides=[
“model=vit”,
“data=imagenet”,
“optimizer=sgd”,
“optimizer.lr=0.1”,
“epochs=50”
]
) print(OmegaConf.to_yaml(cfg)) def demo_structured_config(): print(“\n” + “🚀 DEMO 3: Validación de configuración estructurada\n”) from Hydra.core.config_store import ConfigStore cs = ConfigStore.instance() cs.store(name=”training_config”, node=TrainingConfig) with inicialize_config_dir(version_base=None, config_dir=setup_config_dir()): cfg = compose(config_name=”config”) print(f”Tipo de configuración: {type(cfg)}”) print(f”Épocas (validadas como int): {cfg.epochs}”) def demo_multirun_simulation(): print(“\n” + “🚀 DEMO 4: Simulación multiejecución\n”) config_dir = setup_config_dir() experimentos = [
[“model=resnet”, “optimizer=adam”, “optimizer.lr=0.001”],
[“model=resnet”, “optimizer=sgd”, “optimizer.lr=0.01”],
[“model=vit”, “optimizer=adam”, “optimizer.lr=0.0001”]]resultados = {} para i, anula en enumerar(experimentos): print(f”\n— Experimento {i+1} —“) con inicialize_config_dir(version_base=None, config_dir=config_dir): cfg = compose(config_name=”config”, overrides=overrides) print(f”Modelo: {cfg.model.name}, Optimizador: {cfg.optimizer._target_}”) imprimir(f”Tasa de aprendizaje: {cfg.optimizer.lr}”) resultados[f”exp_{i+1}”] = cfg devuelve resultados def demo_interpolation(): print(“\n” + “🚀 DEMO 5: Interpolación de variables\n”) cfg = OmegaConf.create({ “model”: {“name”: “resnet”, “layers”: 50}, “experiment”: “${model.name}_${model.layers}”, “output_dir”: “/outputs/${experiment}”, “checkpoint”: “${output_dir}/best.ckpt” }) print(OmegaConf.to_yaml(cfg)) print(f”\nNombre del experimento resuelto: {cfg.experiment}”) print(f”Ruta del punto de control resuelto: {cfg.checkpoint}”)

Demostramos las capacidades avanzadas de Hydra, incluidas anulaciones de configuración, validación de configuración estructurada, simulaciones de ejecución múltiple e interpolación de variables. Cada demostración muestra cómo Hydra acelera la velocidad de experimentación, agiliza la configuración manual y fomenta la reproducibilidad en la investigación. Consulta los CÓDIGOS COMPLETOS aquí.

if __name__ == “__main__”: demo_basic_usage() demo_config_override() demo_structured_config() demo_multirun_simulation() demo_interpolation() print(“\n” + “=” * 80) print(“¡Tutorial completo! Conclusiones clave:”) print(” ✓ Configuración de composición con valores predeterminados”) print(” ✓ Anulaciones de tiempo de ejecución mediante línea de comando”) print(” ✓ Configuraciones estructuradas con tipo seguridad”) print(” ✓ Ejecución múltiple para barridos de hiperparámetros”) print(” ✓ Interpolación variable”) print(“=” * 80)

Ejecutamos todas las demostraciones en secuencia para observar a Hydra en acción, desde cargar configuraciones hasta realizar ejecuciones múltiples. Al final, resumimos las conclusiones clave, reforzando cómo Hydra permite una gestión de experimentos elegante y escalable.

En conclusión, entendemos cómo Hydra, iniciada por Meta Research, simplifica y mejora la gestión de experimentos a través de su potente sistema de composición. Exploramos configuraciones estructuradas, interpolación y capacidades de ejecución múltiple que hacen que los flujos de trabajo de aprendizaje automático a gran escala sean más flexibles y fáciles de mantener. Con este conocimiento, ahora está equipado para integrar Hydra en sus propios procesos de investigación o desarrollo, garantizando reproducibilidad, eficiencia y claridad en cada experimento que ejecute.

Consulta los CÓDIGOS COMPLETOS aquí. No dude en consultar nuestra página de GitHub para tutoriales, códigos y cuadernos. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 100.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.

Asif Razzaq es el director ejecutivo de Marktechpost Media Inc.. Como empresario e ingeniero visionario, Asif está comprometido a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, Marktechpost, que se destaca por su cobertura en profundidad del aprendizaje automático y las noticias sobre aprendizaje profundo que es técnicamente sólida y fácilmente comprensible para una amplia audiencia. La plataforma cuenta con más de 2 millones de visitas mensuales, lo que ilustra su popularidad entre el público.

🙌 Siga MARKTECHPOST: agréguenos como fuente preferida en Google.