pyrit/auxiliary_attacks/gcg/experiments/log.py (33 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT license. import subprocess as sp import time import mlflow def log_params(params, param_keys=["model_name", "transfer", "n_train_data", "n_test_data", "n_steps", "batch_size"]): mlflow_params = {key: params.to_dict()[key] for key in param_keys} mlflow.log_params(mlflow_params) def log_train_goals(train_goals): timestamp = time.strftime("%Y%m%d-%H%M%S") train_goals_str = "\n".join(train_goals) mlflow.log_text(train_goals_str, f"train_goals_{timestamp}.txt") def get_gpu_memory(): command = "nvidia-smi --query-gpu=memory.free --format=csv" memory_free_info = sp.check_output(command.split()).decode("ascii").split("\n")[:-1][1:] memory_free_values = {f"gpu{i+1}_free_memory": int(val.split()[0]) for i, val in enumerate(memory_free_info)} memory_free_string = ", ".join(f"{val} MiB" for val in memory_free_values.values()) print(f"Free GPU memory:\n{memory_free_string}") return memory_free_values def log_gpu_memory(step, synchronous=False): memory_values = get_gpu_memory() for gpu, val in memory_values.items(): mlflow.log_metric(gpu, val, step=step, synchronous=synchronous) def log_loss(step, loss, synchronous=False): mlflow.log_metric("loss", loss, step=step, synchronous=synchronous) def log_table_summary(losses, controls, n_steps): timestamp = time.strftime("%Y%m%d-%H%M%S") mlflow.log_table( { "step": [i + 1 for i in range(n_steps)], "loss": losses, "control": controls, }, artifact_file=f"gcg_results_{timestamp}.json", )