Domain 2 of 5 · Chapter 1 of 4

Orchestrate Model Training

Track and compare runs with MLflow

Log one line, mlflow.log_metric("accuracy", 0.94), inside a job that runs on Azure Machine Learning, and that value is already saved to your workspace and plotted on the job's Metrics tab. That works because Azure Machine Learning uses MLflow[1] as its native experiment-tracking framework, and the workspace itself is the tracking backend. MLflow calls a tracked execution a run; Azure Machine Learning calls the same thing a job, and the two words name the same record.

There is no separate MLflow tracking server to install or point at. A job that runs on Azure ML managed compute has its MLflow tracking URI (the address MLflow logs to) set to the workspace automatically, so jobs that use MLflow and run on Azure Machine Learning log their tracking information to the workspace[2] with no configuration. The common trap is assuming you must stand up and configure your own MLflow server first; the workspace already is that backend.

Log automatically with autolog

You can hand-log each value, or let MLflow capture the standard ones. Insert a single call before your training code and MLflow logs the parameters, metrics, and the trained model artifact for supported frameworks such as scikit-learn, PyTorch, TensorFlow, and XGBoost.

Turn on automatic logging (place before training):

import mlflow
mlflow.autolog()   # capture params, metrics, and the model automatically

# ... your existing training code, unchanged ...
model.fit(X_train, y_train)

The mlflow.autolog() call decides what to track per framework[2], so you do not write a log_metric line for every value.

Tracking from outside Azure ML compute

Code that runs off Azure ML managed compute, such as a script or notebook on your own laptop, does not inherit the workspace tracking URI. Point MLflow at the workspace once and the same logging calls flow to the same place.

Point MLflow at the workspace from a local run:

import mlflow
mlflow.set_tracking_uri(azureml_mlflow_uri)   # the azureml-mlflow URI of your workspace

For how to obtain that azureml_mlflow_uri, see Configure MLflow for Azure Machine Learning[3]. On managed compute you skip this step; off it, the run is not recorded until you set it.

Compare runs to pick a model

Because every job logs to the workspace, comparing models is comparing runs. Select several runs in an experiment and view their logged metrics side by side[4] in the studio, or query them with the MLflow API[5]. Compare on the agreed validation metric, not on training loss: a model can post the lowest training loss and still generalize worse. This shared metric history is what later lets a sweep or AutoML job hand you a single best trial instead of a pile of runs to sort by hand.

Training script mlflow.autolog() MLflow tracking params, metrics, model Workspace Metrics tab, compare logs records to
A job logs through MLflow to the workspace, where runs are viewed on the Metrics tab and compared.

Where training runs: notebooks vs jobs

Two kinds of work need two kinds of compute. Interactive exploration in a notebook wants a machine that stays up while you think; a submitted training job wants machines that appear for the run and disappear after. Azure Machine Learning splits these across a compute instance and a compute cluster. This page covers the two you train on; the full catalog of compute targets, including serverless and inference endpoints, lives in Machine Learning Workspace Resources.

Compute instance: your notebook workstation

A compute instance is a single-node managed cloud workstation, personal to one user, with Jupyter, JupyterLab, and VS Code[6] preinstalled. It is where you author code and run notebooks interactively. Because it is one dedicated VM that keeps billing compute hours the whole time it runs, and it does not scale to zero the way a cluster does, its cost control is different: you enable idle shutdown and attach start/stop schedules.

  • Idle shutdown: set idle_time_before_shutdown_minutes and the instance stops itself after that much inactivity. The window must be at least 15 minutes and at most 3 days (configure idle shutdown[7]). It counts as inactive only when there are no running kernels, terminals, jobs, VS Code connections, or custom apps, so an idle-looking browser tab with a live kernel still bills.
  • Schedules: attach up to four start/stop schedules per instance to bring it up before work hours and shut it down after (schedule automatic start and stop[7]).

Compute cluster: where jobs run

A compute cluster, whose resource type is AmlCompute, is multi-node and job-oriented. It autoscales dedicated nodes for each submitted job[8] and can scale back to zero nodes when idle, so between runs it can cost nothing while each job still gets its own isolated nodes. Training jobs, sweeps, and distributed jobs run here.

The distinction the exam tests sits right at the reconciliation of those two facts: a compute instance bills while running and does not scale to zero, whereas a compute cluster runs submitted jobs and does. Trying to open notebooks directly on a cluster is the mismatch, because clusters run jobs, not the interactive notebook environment. Picking a single-node compute instance for a distributed multi-node training job is the opposite mismatch.

Author interactively Compute instance Single node, notebooks Idle shutdown, no scale-to-0 Run submitted jobs Compute cluster (AmlCompute) Multi-node, per-job nodes Scales to 0 when idle submit a job
Author interactively on a single-node compute instance, then submit jobs to a compute cluster that scales dedicated nodes per job and back to zero.

Command jobs: run a training script

The workhorse of Azure ML training is the command job: it runs one training script on a compute target and records the result as a tracked run whose outputs and MLflow-logged metrics land in the workspace (the same tracking described in Track and compare runs with MLflow above). You describe four things and submit, and Azure ML does the rest. A command job binds together:

  • code — the folder holding your training script.
  • command — what to run, for example python train.py --epochs 20.
  • environment — the dependencies, as a curated or custom Docker/conda image. An environment is the software stack, not the hardware.
  • compute — the compute target (the hardware) the job runs on.

The last two are the pair people conflate. The environment supplies libraries; the compute supplies CPUs or GPUs. A job needs both, and you set them independently (train models with Azure Machine Learning[9]).

Submit with the CLI

A command job defined in YAML (job.yml):

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: ./src
command: python train.py --data ${{inputs.training_data}}
environment: azureml:AzureML-sklearn-1.5@latest   # curated environment
compute: azureml:cpu-cluster
inputs:
  training_data:
    type: uri_folder
    path: azureml://datastores/workspaceblobstore/paths/data/
# ...

Submit it:

az ml job create -f job.yml

Bind data with typed inputs and outputs

Notice the ${{inputs.training_data}} token in the command above. A command job's inputs mount or download data assets and URIs into the script, and its outputs write results back to workspace-managed storage. You reference them in the command with ${{inputs.<name>}} and ${{outputs.<name>}} placeholders instead of hardcoding a blob or datastore path (access data in a job[10]). Hardcoding a storage path in the script breaks portability and severs the lineage Azure ML would otherwise record between the data asset and the job. Data assets and environments are workspace assets in their own right; see Machine Learning Workspace Assets.

code: training script folder command: python train.py environment: dependencies compute: the hardware Command job one training run Tracked run outputs + MLflow log submit
A command job assembles code, command, environment, and compute into one run you submit; it produces a tracked run with outputs.

Scale out with distributed training

When a model is too large or too slow to train on one machine, a command job can spread it across several. The lever is a distribution config added to the command job, and one rule governs it: the distribution type must match the framework your script uses (distributed GPU training guide[11]).

Match the distribution type to the framework

  • pytorch — for scripts using torch.distributed and DistributedDataParallel.
  • tensorflow — for tf.distribute scripts; add worker_count, plus parameter_server_count for the parameter-server strategy.
  • mpi — for MPI or Horovod[11] launchers.

DeepSpeed is not a fourth type. You launch it through either the pytorch or the mpi distribution (DeepSpeed on Azure ML[11]). Selecting mpi for a plain PyTorch DistributedDataParallel script, which needs the pytorch type, is the classic mismatch.

Size the job: nodes and processes

Two numbers size a distributed job:

So a two-node job with four GPUs per node sets instance_count to 2 and process_count_per_instance to 4, for eight worker processes in total, and it requires a compute cluster whose VM SKU actually provides those GPUs.

A PyTorch distribution on a command job:

command: python train.py
environment: azureml:AzureML-acpt-pytorch@latest
compute: azureml:gpu-cluster
resources:
  instance_count: 2              # 2 nodes
distribution:
  type: pytorch
  process_count_per_instance: 4  # 4 GPUs per node -> 8 processes total
# ...

The trap to avoid: setting instance_count above one with no distribution block at all. The extra nodes then run the script independently, each training its own copy, instead of coordinating a single distributed run.

Distribution config type=pytorch, instance_count=2 Node 1 GPU GPU GPU GPU process_count_per_instance = 4 Node 2 GPU GPU GPU GPU one process per GPU sync
A distribution config (type pytorch, instance_count 2) coordinates two nodes of four GPUs each, one process per GPU, synchronizing gradients.

Automate hyperparameter tuning with sweep jobs

Your training script already works, but you want the best learning rate and batch size. Wrap it in a sweep job: it runs your command job many times over a range of hyperparameter values and reports the best. Three choices define a sweep, namely how it samples, what it optimizes, and when it gives up on weak trials.

Sample the search space

A search space is the set of values each hyperparameter can take. A sweep explores it with one of three sampling algorithms[12]:

  • Grid — every combination; only sensible for small, discrete spaces.
  • Random — values drawn from the space; a strong default for large or continuous spaces.
  • Bayesian — each new trial is chosen from the results of prior trials, converging toward good regions.

Reaching for grid on a large or continuous space is the wrong reflex; random or bayesian is far more efficient there.

Optimize a primary metric

You set a primary_metric (the exact metric name your script logs) and a goal of Maximize or Minimize (specify the objective of the sweep[12]). Every trial is scored on that one metric, and the sweep ranks its trials by it.

Terminate weak trials early, except under bayesian

To cut cost, an early-termination policy cancels trials that are clearly losing before they finish (early termination policies[12]):

  • Bandit — ends a trial whose metric falls outside a slack_factor (a ratio) or slack_amount (an absolute value) of the best trial so far.
  • Median stopping — stops a trial doing worse than the median of running averages across trials.
  • Truncation selection — cancels a fixed percentage of the lowest performers at each interval.

evaluation_interval and delay_evaluation control how often the policy runs and how long to wait before it starts acting. Two criteria are easy to confuse: bandit measures distance from the best run (slack), while truncation selection cuts a fixed percentage of the worst.

Here is the exception the exam loves: bayesian sampling does not support early termination. Because each bayesian trial is chosen from earlier results, there is no partial-trial signal to prune on, so the policy is set to None. Random and grid sampling do support early termination.

Search space defined ranges Sampling grid / random / bayesian Trials scored by primary_metric Best trial by primary_metric Early-termination policy cancels weak trials prunes
A sweep samples a search space, scores each trial by the primary metric, prunes weak trials with an early-termination policy, and surfaces the best trial.

Let AutoML find the model

When you would rather not choose the algorithm at all, an automated ML (AutoML) job does it for you. You supply labeled data, name the task type and a metric to optimize, and AutoML tries many algorithm-and-hyperparameter combinations in parallel, returning the best (what is automated ML?[13]).

Five task types

AutoML covers five task types: classification, regression, time-series forecasting, computer vision, and natural language processing (NLP) (AutoML task types[13]). Assuming it only does classification is a common underestimate. You pick the task type and a primary_metric, for example accuracy, AUC_weighted, or normalized_root_mean_squared_error, and AutoML optimizes that metric when ranking models.

Featurization runs by default

Featurization is the preparation that turns raw columns into model-ready features: scaling and normalization, missing-value handling, and text-to-numeric encoding. In an AutoML job this runs automatically by default[13], and those steps become part of the produced model, so the same transformations are reapplied automatically at inference. You can set featurization to custom to override the defaults, but you do not have to engineer every feature by hand first.

Exit criteria and ensembles

An AutoML job does not run forever; it stops on the exit criteria you configure[14], such as an experiment timeout, a maximum number of trials, or a metric score threshold. Toward the end, AutoML builds voting and stacking ensemble models[13], which are enabled by default, and these combined models often appear as the final, best-scoring iterations. Because AutoML already ranks trials by your primary_metric, choosing a production candidate means taking that best trial rather than re-ranking by a different metric, which could pick a worse model.

Dataset + task type primary_metric AutoML explores algorithms + hyperparameters auto featurization Ranked trials by primary_metric Best model + ensembles Exit criteria timeout / max_trials / score stops
AutoML explores algorithms and hyperparameters with automatic featurization, stops on the exit criteria, and returns the best model, often an ensemble.

Assemble training pipelines from components

A single command job trains one script, but real MLOps workflows have several stages, such as prepare data, train, and evaluate, that should run as one repeatable, versioned unit. That unit is a pipeline job, built from components (what are Azure Machine Learning pipelines?[15]).

Components are the reusable building block

A component is a self-contained pipeline step with typed inputs and outputs, its own environment, and its own code (Azure ML component[16]). Unlike a one-off command job, a component is a registered, versioned asset that can be shared and reused across pipelines, and each step can run on its own compute target. The shift the exam checks: the reusable, shareable unit is the component, not a standalone command job.

A pipeline chains components into steps

A pipeline job wires components into an ordered workflow and lets Azure ML manage the dependencies between steps (build a pipeline with the Python SDK[17]). Different people can own different steps, a data engineer the prep component and a scientist the training component, then integrate them into one graph.

Reuse skips unchanged work

Pipelines improve efficiency partly by reusing outputs from unchanged steps[15]. When a component's code and inputs have not changed since a prior run, Azure ML can reuse that step's cached output and skip recomputation, so re-running a pipeline after editing only the training step need not repeat data preparation. Components and environments are workspace assets; the deeper treatment lives in Machine Learning Workspace Assets.

Prepare data component Train model component Evaluate component Best model registered data model metrics
A training pipeline chains reusable components, passing typed outputs between steps; unchanged steps reuse cached output.

Exam-pattern recognition

Orchestrate-training questions are mostly "pick the right mechanism for this described requirement." Map the trigger phrase to the answer:

  • Track metrics without running your own tracking server points to the workspace as the MLflow backend; on managed compute the tracking URI is already set, so just log, or call mlflow.autolog().
  • Record runs from a script on my laptop points to mlflow.set_tracking_uri with the workspace azureml-mlflow URI, because off-compute code does not inherit it.
  • Interactive notebook development is a compute instance (single node, idle shutdown). A compute cluster is wrong: it runs jobs, not the notebook environment.
  • Stop paying for an idle notebook workstation is idle shutdown (15 minutes to 3 days) or a start/stop schedule; a compute instance does not scale to zero like a cluster.
  • Tune hyperparameters efficiently over a large or continuous space is a sweep job with random or bayesian sampling, not grid.
  • Cut sweep cost by stopping weak trials is an early-termination policy (bandit, median stopping, or truncation selection). If the sampling is bayesian, early termination is not supported, so the answer is random or grid, or no policy.
  • Get a good model with minimal code is an AutoML job: set the task type and primary_metric; featurization is automatic.
  • Train a deep-learning model across multiple GPUs or nodes is a command job with a distribution config matching the framework (pytorch, tensorflow, or mpi), instance_count nodes, and process_count_per_instance GPUs per node.
  • Reusable, versioned multi-step workflow is a pipeline of components; the component is the reusable unit, and unchanged steps reuse cached output.
  • Choose the production model from many runs means comparing on the primary_metric in MLflow; a sweep or AutoML job already surfaces the best trial. Never select on training loss.

The meta-pattern is to move up the automation ladder only as far as the requirement asks: write a command job when you own the script, wrap it in a sweep to tune it, reach for AutoML when you want the model chosen for you, and compose a pipeline when the workflow has reusable stages.

Choosing a training job type

Decision criterionCommand jobSweep jobAutoML jobPipeline job
What you provideA training script, environment, and computeA command job plus a search spaceA dataset, task type, and primary_metricComponents wired into ordered steps
What Azure ML decidesNothing; it runs your codeWhich hyperparameter values to tryThe algorithm and the hyperparametersStep scheduling and output reuse
Best forRunning a single training scriptTuning an existing script's hyperparametersFinding a good model with little codeRepeatable multi-step workflows
Reusable unitThe job itself (not reusable)The wrapped command jobThe job itselfEach registered, versioned component
Typical submissionaz ml job create -f job.ymlsweep() over a command jobAutoML job in SDK, CLI, or studioPipeline job of components

Decision tree

Want Azure ML to pick the algorithm? Tuning your own script's hyperparameters? Reusable multi-step training workflow? AutoML job least code Sweep job tune hyperparameters Command job your own script Pipeline job reusable components Yes No Yes No Yes No

Sharp facts the exam loves — give these one last read before exam day.

Cheat sheet

Sharp facts the exam loves — scan these before test day.

MLflow is Azure ML's native experiment-tracking framework

Azure Machine Learning uses MLflow as its native tracking framework. A job run on Azure ML compute automatically has its MLflow tracking URI set to the workspace, so parameters, metrics, and artifacts logged with mlflow.log_param / mlflow.log_metric are stored in the workspace and shown on the job's Metrics tab.

Trap Assuming you must stand up and configure a separate MLflow tracking server; the Azure ML workspace already IS the tracking backend.

7 questions test this
mlflow.autolog() auto-captures params, metrics, and the model

Calling mlflow.autolog() before training enables automatic logging of parameters, metrics, and the trained model artifact for supported frameworks (scikit-learn, PyTorch, TensorFlow, XGBoost) without writing explicit log calls for each value.

Trap Believing you must hand-log every metric; autolog captures the standard framework metrics automatically.

6 questions test this
Interactive runs off Azure ML compute need the tracking URI set

Code running outside Azure ML managed compute (for example on a local machine) does not inherit the workspace tracking URI. You point MLflow at the workspace with mlflow.set_tracking_uri() so those runs are also recorded in the workspace.

AutoML supports five task types and optimizes a primary metric

Automated ML explores algorithms and hyperparameters in parallel for classification, regression, time-series forecasting, computer vision, and NLP tasks. You set the task type and a primary_metric (for example accuracy, AUC_weighted, or normalized_root_mean_squared_error) that AutoML optimizes to pick the best model.

Trap Thinking AutoML only handles classification; it also covers regression, forecasting, vision, and NLP.

5 questions test this
AutoML runs featurization automatically by default

In an AutoML job, featurization (scaling and normalization, missing-value handling, text-to-numeric encoding) runs automatically by default, and those steps become part of the produced model so they are reapplied at inference. You can set featurization to custom to override the defaults.

Trap Assuming you must manually engineer and encode all features first; AutoML featurizes automatically unless you customize it.

3 questions test this
AutoML stops on configurable exit criteria

An AutoML job ends when it meets the exit criteria you configure, such as experiment_timeout_minutes, max_trials (iterations), or a metric score threshold. Voting and stacking ensemble models are enabled by default and usually appear as the final trials.

Trap Expecting AutoML to run indefinitely; it halts at the timeout, trial cap, or score threshold you set.

4 questions test this
Notebooks run on a compute instance

Interactive experimentation and notebooks run on an Azure Machine Learning compute instance, a managed single-node cloud workstation (personal to one user) with Jupyter, JupyterLab, and VS Code. You start and stop it, and you can configure idle shutdown to avoid paying while it sits unused.

Trap Trying to open notebooks directly on a compute cluster; clusters run submitted jobs, not the interactive notebook environment.

8 questions test this
Compute instance vs compute cluster

A compute instance is single-node and stays running while started, for interactive authoring; a compute cluster (AmlCompute) is multi-node, autoscales dedicated nodes per submitted job, and can scale to 0 nodes when idle. Use the instance for notebooks and the cluster for training jobs and sweeps.

Trap Picking a cluster for interactive dev, or an instance for a distributed multi-node training job.

8 questions test this
Idle shutdown and start/stop schedules are how you stop paying for an idle compute instance

A compute instance is a single dedicated VM that keeps billing compute hours the whole time it is running and does not scale to zero like a compute cluster, so its main cost control is enabling idle shutdown (set idle_time_before_shutdown_minutes; the inactivity window must be at least 15 minutes and at most 3 days) and attaching start/stop schedules (up to four per instance). It only counts as inactive when there are no running kernels, terminals, jobs, VS Code connections, or custom apps.

Trap Expecting a compute instance to auto-scale to zero when idle like a compute cluster; it keeps billing until idle shutdown or a schedule stops it.

7 questions test this
Sweep jobs sample a search space with grid, random, or bayesian

A sweep job automates hyperparameter tuning by exploring a defined search space with a sampling algorithm: random, grid, or bayesian sampling. You also set a primary_metric plus its goal (maximize or minimize) that the sweep optimizes across trials.

Trap Choosing grid sampling for a large or continuous search space, where random or bayesian sampling is far more efficient.

6 questions test this
Early-termination policies cancel poorly performing trials

To cut cost, a sweep job can apply an early-termination policy that cancels underperforming trials early: bandit (slack_factor or slack_amount off the best run), median_stopping, or truncation_selection. Policies use evaluation_interval and delay_evaluation to control when they start acting.

Trap Confusing bandit's slack (distance from the best run) with truncation selection's fixed percentage of worst trials.

8 questions test this
Bayesian sampling does not support early termination

Bayesian sampling chooses each new set of hyperparameter values from the results of prior trials and does NOT support early-termination policies (set the policy to None). Random and grid sampling do support early termination.

Trap Pairing bayesian sampling with a bandit or median-stopping policy; only random and grid sampling allow early termination.

4 questions test this
A command job runs a training script on a compute target

You run a training script as a command job that specifies the command (for example python train.py), the code folder, an environment (a curated or custom Docker/conda image), and a compute target. Submit it with az ml job create -f job.yml.

Trap Confusing environment with compute; a command job needs both an environment (dependencies) and a compute target (hardware).

7 questions test this
Typed inputs/outputs bind data to the job

A command job's inputs mount or download data assets and URIs into the script, and its outputs write results back to workspace-managed storage. You reference them in the command with ${{inputs.}} and ${{outputs.}} placeholders instead of hardcoding storage paths.

Trap Hardcoding blob/datastore paths in the script rather than using typed inputs/outputs, which breaks portability and lineage.

9 questions test this
Distribution config scales training across nodes

To train large or deep-learning models across multiple nodes, a command job sets a distribution with type pytorch, tensorflow, or mpi (for example Horovod), together with instance_count (number of nodes) and process_count_per_instance (processes or GPUs per node).

Trap Setting instance_count greater than 1 without a distribution config; the workers then run independently instead of coordinating.

9 questions test this
process_count_per_instance usually equals GPUs per node

process_count_per_instance is typically set to the number of GPUs on each node, and scaling out with a larger instance_count requires a compute cluster whose VM SKU provides those GPUs.

Distribution type must match the training framework

Set distribution.type (or use the typed PyTorchDistribution, TensorFlowDistribution, or MpiDistribution object) to match the framework the script uses: PyTorch for torch.distributed/DistributedDataParallel scripts, TensorFlow for tf.distribute (using worker_count, plus parameter_server_count for the parameter-server strategy), and mpi for MPI or Horovod. DeepSpeed is not a separate distribution type; you launch it through either the PyTorch or the MPI distribution.

Trap Selecting mpi for a plain PyTorch DistributedDataParallel script, which needs the PyTorch type, or treating DeepSpeed as its own distribution.type instead of launching it through the PyTorch or MPI distribution.

7 questions test this
A training pipeline chains reusable components

A training pipeline is a pipeline job made of components, where each component is a self-contained step with typed inputs/outputs, an environment, and code. Components are registered, versioned assets that can be reused across pipelines and shared, and each step can run on its own compute.

Trap Treating a standalone command job as reusable; the component is the registerable, shareable unit that pipeline steps consume.

11 questions test this
Pipeline steps can reuse unchanged outputs

Azure ML can reuse a prior step's cached output when that component's code and inputs are unchanged, skipping recomputation to save time and cost on subsequent pipeline runs.

Compare metrics across runs to choose the best model

Because each run logs metrics to the workspace via MLflow, you compare model performance across jobs by selecting multiple runs in an experiment and viewing their logged metrics side by side in the studio (or querying them with the MLflow API) to identify the best model.

Trap Comparing on training loss instead of the agreed primary/validation metric used to select the production candidate.

9 questions test this
Sweep and AutoML surface the best trial by primary_metric

AutoML and sweep jobs already rank trials by the configured primary_metric and surface the single best trial, so choosing a production candidate means taking that best trial's model rather than manually re-ranking every run.

Trap Re-picking a model by a different metric than the primary_metric the job optimized, which can select a worse model.

8 questions test this

Also tested in

References

  1. MLflow and Azure Machine Learning - Azure Machine Learning
  2. Track Experiments and Models by Using MLflow - Azure Machine Learning
  3. Configure MLflow for Azure Machine Learning - Azure Machine Learning
  4. Log metrics, parameters, and files with MLflow - Azure Machine Learning
  5. Query & compare experiments and runs with MLflow - Azure Machine Learning
  6. What is an Azure Machine Learning compute instance? - Azure Machine Learning
  7. Create a compute instance - Azure Machine Learning
  8. Create compute clusters - Azure Machine Learning
  9. Train ML models - Azure Machine Learning
  10. Access data in a job - Azure Machine Learning
  11. Distributed GPU training guide (SDK v2) - Azure Machine Learning
  12. Hyperparameter tuning a model (v2) - Azure Machine Learning
  13. What is automated ML? AutoML - Azure Machine Learning
  14. Set up AutoML with Python (v2) - Azure Machine Learning
  15. What are machine learning pipelines? - Azure Machine Learning
  16. What is a component - Azure Machine Learning
  17. Create and run machine learning pipelines using components with the Machine Learning SDK v2 - Azure Machine Learning