Ajuste de hiperparâmetros com DVC

CI/CD para Machine Learning

Ravi Bhadauria

Machine Learning Engineer

Fluxo de trabalho de ajuste de hiperparâmetros

  • Ajuste de hiperparâmetros

    • Entrada: intervalos do sweep de parâmetros
    • Saída: melhores parâmetros
  • Treinamento

    • Entrada: melhores parâmetros
    • Saída: métricas e gráficos (já vistos)
  • Acoplamento frouxo para treinamentos independentes

    • Ajuste de hiperparâmetros é suficiente, mas não obrigatório
  • Ambos os jobs dependem do conjunto de dados

# Conteúdo da configuração de hp
{
    "n_estimators": [2, 4, 5],
    "max_depth": [10, 20, 50],
    "random_state": [1993]
}
# Conteúdo dos melhores parâmetros
{
    "n_estimators": 5,
    "max_depth": 20,
    "random_state": 1993
}
CI/CD para Machine Learning

Mudanças no código de treinamento

Mudanças no script Python de ajuste de hiperparâmetros
# Carregar hiperparâmetros do arquivo JSON
with open("rfc_best_params.json", "r") as params_file:
  rfc_params = json.load(params_file)

# Definir e treinar o modelo model = RandomForestClassifier(**rfc_params) model.fit(X_train, y_train)
CI/CD para Machine Learning

Ajuste de hiperparâmetros com GridSearch

# Definir o modelo e o espaço de busca de hiperparâmetros
model = RandomForestClassifier()
param_grid = json.load(open("hp_config.json", "r"))

# Executar GridSearch com CV de cinco dobras grid_search = GridSearchCV(model, param_grid, cv=5) grid_search.fit(X_train, y_train)
# Obter os melhores hiperparâmetros best_params = grid_search.best_params_ with open("rfc_best_params.json", "w") as outfile: json.dump(best_params, outfile)
CI/CD para Machine Learning

Mudanças no YAML do DVC

Ajuste de hiperparâmetros
stages:
  preprocess: ...
  train: ...
  hp_tune:
    cmd: python hp_tuning.py
    deps:
    - processed_dataset/weather.csv
    - hp_config.json
    - hp_tuning.py
    outs: # Sem rastrear os melhores parâmetros
      - hp_tuning_results.md:
          cache: false
Treinamento
stages:
  preprocess: ...
  hp_tune: ...
  train:
    cmd: python train.py
    deps:
    - processed_dataset/weather.csv
    - rfc_best_params.json # Melhores parâmetros
    - train.py
    metrics:
      - metrics.json:
          cache: false
CI/CD para Machine Learning

Acionando estágios individuais

  • Estágios podem ser acionados de forma independente dvc repro <stage_name>

  • Forçar a execução do estágio de ajuste dvc repro -f hp_tune

    • Garante que o arquivo de melhores parâmetros será atualizado
  • O treinamento pode ser executado com dvc repro train

  • Ambos os estágios acionam o passo de pré-processamento como dependência

CI/CD para Machine Learning

Saída da execução do ajuste de hiperparâmetros

mean_test_score std_test_score max_depth n_estimators random_state
0.999733 0.000413118 20 5 1993
0.999307 0.000574418 50 5 1993
0.99888 0.000617378 10 5 1993
0.997813 0.00117333 10 4 1993

Mudanças no script Python de ajuste de hiperparâmetros

# Salvar os resultados do ajuste de hiperparâmetros
cv_results = pd.DataFrame(grid_search.cv_results_)
markdown_table = cv_results.to_markdown(index=False)
with open("hp_tuning_results.md", "w") as markdown_file:
  markdown_file.write(markdown_table)
CI/CD para Machine Learning

Resumo

  • Rota de ajuste de hiperparâmetros

    • Nome da branch hp_tune/<some-string>
    • Fazer mudanças na configuração de busca
    • Abrir um PR manualmente
      • Força a execução do pipeline DVC dvc repro -f hp_tune
      • Usa cml pr create para criar um novo PR de treinamento com os melhores parâmetros
    • Dar um force push em um commit no PR de treinamento para iniciar o job de treino do modelo
  • Rota manual

    • Nome da branch train/<some-string>
    • Editar o arquivo de melhores parâmetros e fazer commit
    • Abrir um PR manualmente para iniciar o job de treino do modelo
CI/CD para Machine Learning

Vamos praticar!

CI/CD para Machine Learning

Preparing Video For Download...