快速入门DVC(七):机器学习实验管理

简介: 在上一篇文章快速入门DVC(六):指标跟踪、更新训练参数以及可视化模型表现中,我们讲述了如何进行指标跟踪、更新训练参数以及可视化模型表现。本文,我们将通过 example-dvc-experiments 项目来探索 DVC 实验管理的基本功能。

环境准备

克隆项目、创建虚拟环境并安装依赖库

我们强烈建议创建一个虚拟环境,以使我们使用的库与系统的其余部分隔离,这可以有效防止版本冲突。

$ git clone https://github.com/iterative/example-dvc-experiments -b get-started
$ cd example-dvc-experiments
$ virtualenv .venv
$ . .venv/bin/activate
$ python -m pip install -r requirements.txt
复制代码


下载数据集

我们克隆的 Git 远程仓库不包含数据集。因为,我们没有将数据存储在 Git 存储仓库中,而是使用 DVC 从共享数据存储中检索。 在这种情况下,我们使用 dvc pull 来下载缺失的数据文件。

$ dvc pull
复制代码

数据集下载完成之后,存储库已经包含了运行实验所需的所有配置。

运行实验

使用默认的项目设置运行实验只需要执行以下命令:

$ dvc exp run
...
Reproduced experiment(s): exp-b28f0
Experiment results have been applied to your workspace.
...
复制代码


它在 dvc.yaml 中运行指定的命令(python train.py)。 该命令将指标值写入metrics.json 文件。

然后将该实验与在参数文件 (params.yaml) 中找到的值以及具有这些生成的指标的其他依赖项 (data/images/) 相关联。

dvc exp 命令的目的是让您在迭代项目时立即运行、捕获和比较机器学习实验。每个实验产生的模型和指标等制品都由 DVC 跟踪,相关的参数和指标可以作为文本文件提交到 Git。

您可以使用 dvc exp show 来查看实验结果,并在格式良好的表格中查看这些指标和结果:

$ dvc exp show
 ─────────────────────────────────────────────────────────────────────────────────────────────
  Experiment                Created           loss      acc   train.epochs   model.conv_units
 ─────────────────────────────────────────────────────────────────────────────────────────────
  workspace                 -              0.23282   0.9152   10             16
  7317bc6                   Jul 18, 2021         -        -   10             16
  └── 1a1d858 [exp-6dccf]   03:21 PM       0.23282   0.9152   10             16
 ─────────────────────────────────────────────────────────────────────────────────────────────
复制代码


其中,表中的工作空间行显示工作空间中可用的最新实验的结果。

除此之外,该表还在单独的行中显示了每个实验,以及它们提交到的 Git 的 Commit ID。 我们可以看到我们运行的实验名称为 exp-6dccf,并且是从 Commit ID7317bc6 运行的。

现在,我们来做更多的实验。DVC 允许更新流水线中定义的参数,并且无需手动修改文件。 我们使用此功能在 train.py 中设置卷积单元。

$ dvc exp run --set-param model.conv_units=24
...
Reproduced experiment(s): exp-7b56f
Experiment results have been applied to your workspace.
...
复制代码


有关(超)参数的更多信息说明:

数据科学项目包含定义可以调整的参数(以训练模型、调整模型架构、进行预处理等)的配置文件是很常见的。DVC 为实验提供了一种机制,以依赖文件中的特定变量。

默认情况下,DVC 假定您的项目中有一个名为 params.yaml 的参数文件。 DVC 解析此文件并创建对其中找到的变量的依赖关系:model.conv_unitstrain.epochs 。 例如:

train:
  epochs: 10
model:
  conv_units: 16
复制代码


当您使用 dvc exp run --set-param 时,DVC 会使用您在运行实验之前在命令行中设置的值更新 params.yaml 中的参数。

并行运行多个实验

我们可以将它们定义为批量运行,而不是一个一个地运行实验。 当您进行长时间运行的实验时,这尤其方便。

我们使用 dvc exp run--queue 参数将实验添加到队列中。 我们还可以使用 -S (--set-param) 来设置参数的值。

$ dvc exp run --queue -S model.conv_units=32
 Queued experiment '3cac8c6' for future execution.
 $ dvc exp run --queue -S model.conv_units=64
 Queued experiment '23660b6' for future execution.
 $ dvc exp run --queue -S model.conv_units=128
 Queued experiment '6591a57' for future execution.
 $ dvc exp run --queue -S model.conv_units=256
 Queued experiment '9109ea9' for future execution.
复制代码


接下来,使用 --run-all 参数并行运行所有排队的实验。 您可以使用 --jobs 指定并行进程的数量:

dvc exp run --run-all --jobs 2
复制代码


比较并且持久化实验

实验以不同的参数运行数次之后。 我们使用 dvc exp show 命令来比较所有的这些实验。

$ dvc exp show
┏━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ Experiment              ┃ Created      ┃ loss    ┃ acc    ┃ train.epochs ┃ model.conv_units ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ workspace               │ -            │ 0.23508 │ 0.9151 │ 10           │ 24               │
│ 7317bc6                 │ Jul 18, 2021 │       - │      - │ 10           │ 16               │
│ ├── e2647ef [exp-ee8a4] │ 05:14 PM     │ 0.23146 │ 0.9145 │ 10           │ 64               │
│ ├── 15c9451 [exp-a9be6] │ 05:14 PM     │ 0.25231 │ 0.9102 │ 10           │ 32               │
│ ├── 9c32227 [exp-17dd9] │ 04:46 PM     │ 0.23687 │ 0.9167 │ 10           │ 256              │
│ ├── 8a9cb15 [exp-29d93] │ 04:46 PM     │ 0.24459 │ 0.9134 │ 10           │ 128              │
│ ├── dfc536f [exp-a1bd9] │ 03:35 PM     │ 0.23508 │ 0.9151 │ 10           │ 24               │
│ └── 1a1d858 [exp-6dccf] │ 03:21 PM     │ 0.23282 │ 0.9152 │ 10           │ 16               │
└─────────────────────────┴──────────────┴─────────┴────────┴──────────────┴──────────────────┘
复制代码


默认情况下,它显示所有的参数和带有时间戳的指标。 如果您有大量参数、指标或实验,这可能会导致视图混乱。 您可以使用命令的 --drop 参数将表限制为查看特定的指标或参数,或隐藏时间戳列(Created 列)。

$ dvc exp show --drop 'Created|train|loss'
 ─────────────────────────────────────────────────────
  Experiment                   acc   model.conv_units
 ─────────────────────────────────────────────────────
  workspace                 0.9151   24
  7317bc6                        -   16
  ├── e2647ef [exp-ee8a4]   0.9145   64
  ├── 15c9451 [exp-a9be6]   0.9102   32
  ├── 9c32227 [exp-17dd9]   0.9167   256
  ├── 8a9cb15 [exp-29d93]   0.9134   128
  ├── dfc536f [exp-a1bd9]   0.9151   24
  └── 1a1d858 [exp-6dccf]   0.9152   16
 ─────────────────────────────────────────────────────
复制代码


从表中选择其中一个实验,然后创建一个 Git 分支,其中包含该实验及其所有相关文件。

$ dvc exp branch exp-17dd9 "cnn-256"
Git branch 'cnn-256' has been created from experiment 'exp-17dd9'.
To switch to the new branch run:
        git checkout cnn-256
复制代码


然后,您可以切换分支 git checkout 并从该分支继续工作,或者使用常用的 Git 命令将该分支合并到您的主分支(main)中。


实验管理的其他操作

dvc exp 还有许多其他功能,例如,清理未使用的实验、在不提交到 Git 的情况下共享它们或获取两个实验之间的差异。

请参考用户指南中的实验管理部分或参考命令说明中的 dvc exp 命令及其子命令。


相关文章
|
7月前
|
机器学习/深度学习 数据采集 运维
智能运维:利用机器学习优化IT基础设施管理
在数字化浪潮的推动下,企业对IT系统的依赖程度日益加深。传统的运维模式已经难以满足现代业务的需求,尤其是在处理海量数据和复杂系统时显得力不从心。本文将探讨如何通过机器学习技术,实现智能化的运维管理,从而提升效率、减少故障时间,并预测潜在问题,保障业务的连续性和稳定性。 【7月更文挑战第27天】
81 10
|
7月前
|
机器学习/深度学习 弹性计算 运维
智能化运维的浪潮之巅:机器学习在IT管理中的应用与挑战
本文将深入探讨机器学习技术如何革新传统的IT运维模式,通过实际案例分析其在故障预测、自动化处理以及安全防护等方面的应用成效,并讨论实施过程中可能遇到的技术与管理挑战。
|
7月前
|
机器学习/深度学习 人工智能 运维
智能运维:利用机器学习优化IT基础设施管理
【7月更文挑战第7天】在数字化浪潮不断推进的今天,企业对IT基础设施的管理要求越来越高。传统的运维模式已难以满足现代企业的需求,智能运维(AIOps)应运而生。本文将探讨如何通过机器学习技术来优化IT基础设施的管理,提高故障预测的准确性,自动化日常任务,并实现个性化的报警系统,从而提升运维效率和服务质量。
|
7月前
|
机器学习/深度学习 运维 监控
智能化运维的崛起:机器学习在IT管理中的实践与挑战
本文深入探讨了智能化运维领域,特别是机器学习技术在IT管理中的应用。文章首先介绍了智能化运维的概念及其重要性,随后详细阐述了机器学习在故障预测、自动化响应和系统优化中的作用。同时,文章也指出了实施智能化运维时可能遇到的技术挑战和数据治理问题,并提出了相应的解决策略。最后,通过具体案例分析,展示了机器学习技术如何在实际运维中提高系统稳定性和效率。
|
7月前
|
机器学习/深度学习 边缘计算 运维
智能化运维的崛起:机器学习在IT基础设施管理中的应用
随着企业对IT基础设施的依赖日益加深,传统的运维模式已难以满足现代业务的需求。本文将探讨智能化运维的概念,分析机器学习技术如何革新IT基础设施的管理方式,提升运维效率,并预测其在未来运维领域的发展趋势。通过具体案例,本文旨在展示智能化运维的实践价值及其对企业数字化转型的推动作用。
79 0
|
7月前
|
机器学习/深度学习 运维 监控
智能化运维:利用机器学习优化IT基础设施管理
【7月更文挑战第28天】在数字化时代,智能化运维成为企业提升效率、降低成本的关键。本文将探讨如何通过机器学习技术,实现对IT基础设施的智能监控与自动化管理,包括预测性维护、异常检测和性能优化等策略,旨在为读者提供一套实用的智能化运维解决方案。
|
6月前
|
存储 机器学习/深度学习 PyTorch
深入理解GPU内存分配:机器学习工程师的实用指南与实验
给定一个模型架构、数据类型、输入形状和优化器,你能否计算出前向传播和反向传播所需的GPU内存量?
72 0
|
7月前
|
机器学习/深度学习 人工智能 运维
智能化运维:如何利用AI和机器学习优化IT基础设施管理
随着技术的快速发展,传统的运维方法已无法满足现代企业的需求。本文将深入探讨如何通过人工智能(AI)和机器学习(ML)来革新IT基础设施的管理方式,提升效率并降低成本。我们将从实际案例出发,分析AI与ML在智能监控、故障预测、自动化修复等方面的应用,并讨论实施这些技术时面临的挑战与解决策略。
102 1
|
7月前
|
机器学习/深度学习 存储 运维
智能化运维:利用机器学习优化IT基础设施管理
随着企业对高效、自动化IT基础设施管理的需求日益增长,智能化运维已成为技术发展的前沿。本文将探讨如何通过机器学习算法预测系统故障、优化资源分配并实现自动化的故障恢复,从而提升运维效率和系统稳定性。我们将分析机器学习在智能运维中的应用案例,并讨论实施过程中的挑战与策略。 【7月更文挑战第15天】
77 8
|
7月前
|
机器学习/深度学习 运维 监控
智能化运维:利用机器学习优化IT基础设施管理
【7月更文挑战第23天】在数字化时代的浪潮中,IT基础设施的复杂性日益增加,传统的运维方法已难以满足现代企业的需求。本文将探讨如何通过机器学习技术,实现智能化运维,提升IT基础设施的管理效率和响应速度。我们将从智能监控、自动化故障处理、预测性维护三个方面展开讨论,并结合实际案例,展示智能化运维在实际应用中的巨大潜力。

热门文章

最新文章