diff --git a/CHANGELOG.md b/CHANGELOG.md index 91350ede7..f69975946 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,12 +9,12 @@ For each Pull Request, the affected code parts should be briefly described and a Once a release is done, the "Upcoming" section becomes the release changelog, and a new empty "Upcoming" should be created. - ## Upcoming ### Added - ([#671](https://github.com/microsoft/InnerEye-DeepLearning/pull/671)) Remove sequence models and unused variables. Simplify README. +- ([#693](https://github.com/microsoft/InnerEye-DeepLearning/pull/693)) Improve instructions for HelloWorld model in AzureML. - ([#678](https://github.com/microsoft/InnerEye-DeepLearning/pull/678)) Add function to get log level name and use it for logging. - ([#666](https://github.com/microsoft/InnerEye-DeepLearning/pull/666)) Replace RadIO with TorchIO for patch-based inference. - ([#643](https://github.com/microsoft/InnerEye-DeepLearning/pull/643)) Test for recovery of SSL job. Tracks learning rate and train @@ -160,7 +160,6 @@ in inference-only runs when using lightning containers. - ([#633](https://github.com/microsoft/InnerEye-DeepLearning/pull/633)) Model fields `recovery_checkpoint_save_interval` and `recovery_checkpoints_save_last_k` have been retired. Recovery checkpoint handling is now controlled by `autosave_every_n_val_epochs`. - ## 0.3 (2021-06-01) ### Added @@ -291,6 +290,7 @@ console for easier diagnostics. container models on machines with >1 GPU ### Removed + - ([#439](https://github.com/microsoft/InnerEye-DeepLearning/pull/439)) Deprecated `start_epoch` config argument. - ([#450](https://github.com/microsoft/InnerEye-DeepLearning/pull/450)) Delete unused `classification_report.ipynb`. - ([#455](https://github.com/microsoft/InnerEye-DeepLearning/pull/455)) Removed the AzureRunner conda environment. @@ -307,11 +307,11 @@ console for easier diagnostics. - ([#323](https://github.com/microsoft/InnerEye-DeepLearning/pull/323)) There are new model configuration fields (and hence, commandline options), in particular for controlling PyTorch Lightning (PL) training: - - `max_num_gpus` controls how many GPUs are used at most for training (default: all GPUs, value -1). - - `pl_num_sanity_val_steps` controls the PL trainer flag `num_sanity_val_steps` - - `pl_deterministic` controls the PL trainer flags `benchmark` and `deterministic` - - `generate_report` controls if a HTML report will be written (default: True) - - `recovery_checkpoint_save_interval` determines how often a checkpoint for training recovery is saved. + - `max_num_gpus` controls how many GPUs are used at most for training (default: all GPUs, value -1). + - `pl_num_sanity_val_steps` controls the PL trainer flag `num_sanity_val_steps` + - `pl_deterministic` controls the PL trainer flags `benchmark` and `deterministic` + - `generate_report` controls if a HTML report will be written (default: True) + - `recovery_checkpoint_save_interval` determines how often a checkpoint for training recovery is saved. - ([#336](https://github.com/microsoft/InnerEye-DeepLearning/pull/336)) New extensions of SegmentationModelBases `HeadAndNeckBase` and `ProstateBase`. Use these classes to build your own Head&Neck or Prostate models, by just providing a list of foreground classes. @@ -326,17 +326,17 @@ console for easier diagnostics. - ([#323](https://github.com/microsoft/InnerEye-DeepLearning/pull/323)) The codebase has undergone a massive refactoring, to use PyTorch Lightning as the foundation for all training. As a consequence of that: - - Training is now using Distributed Data Parallel with synchronized `batchnorm`. The number of GPUs to use can be + - Training is now using Distributed Data Parallel with synchronized `batchnorm`. The number of GPUs to use can be controlled by a new commandline argument `max_num_gpus`. - - Several classes, like `ModelTrainingSteps*`, have been removed completely. - - The final model is now always the one that is written at the end of all training epochs. - - The old code that options to run full image inference at multiple epochs (i.e., multiple checkpoints), this has + - Several classes, like `ModelTrainingSteps*`, have been removed completely. + - The final model is now always the one that is written at the end of all training epochs. + - The old code that options to run full image inference at multiple epochs (i.e., multiple checkpoints), this has been removed, alongside the respective commandline options `save_start_epoch`, `save_step_epochs`, `epochs_to_test`, `test_diff_epochs`, `test_step_epochs`, `test_start_epoch` - - The commandline option `register_model_only_for_epoch` is now called `only_register_model`, and is boolean. - - All metrics are written to AzureML and Tensorboard in a unified format. A training Dice score for 'bladder' would + - The commandline option `register_model_only_for_epoch` is now called `only_register_model`, and is boolean. + - All metrics are written to AzureML and Tensorboard in a unified format. A training Dice score for 'bladder' would previously be called Train_Dice/bladder, now it is train/Dice/bladder. - - Due to a different checkpoint format, it is no longer possible to use checkpoints written by the previous version + - Due to a different checkpoint format, it is no longer possible to use checkpoints written by the previous version of the code. - The arguments of the `score.py` script changed: `data_root` -> `data_folder`, it no longer assumes a fixed `data` subfolder. `project_root` -> `model_root`, `test_image_channels` -> `image_files`. diff --git a/InnerEye/ML/configs/segmentation/HelloWorld.py b/InnerEye/ML/configs/segmentation/HelloWorld.py index ee568483f..a90eaf50a 100644 --- a/InnerEye/ML/configs/segmentation/HelloWorld.py +++ b/InnerEye/ML/configs/segmentation/HelloWorld.py @@ -28,11 +28,8 @@ class HelloWorld(SegmentationModelBase): * This model can be trained from the commandline: python InnerEye/runner.py --model=HelloWorld - * If you want to test that your AzureML workspace is working: - - Upload to datasets storage account for your AzureML workspace: Test/ML/test_data/dataset.csv and - Test/ML/test_data/train_and_test_data and name the folder "hello_world" - - If you have set up AzureML then parameter search can be performed for this model by running: - python InnerEye/ML/ runner.py --model=HelloWorld --azureml=True --hyperdrive=True + * If you want to test that your AzureML workspace is working, please follow the instructions in + /docs/hello_world_model.md. In this example, the model is trained on 2 input image channels channel1 and channel2, and predicts 2 foreground classes region, region_1. diff --git a/docs/hello_world_model.md b/docs/hello_world_model.md index 5074555a1..d2e812345 100644 --- a/docs/hello_world_model.md +++ b/docs/hello_world_model.md @@ -1,17 +1,81 @@ # Training a Hello World segmentation model -In the configs folder, you will find a config file called [HelloWorld.py](../InnerEye/ML/configs/segmentation/HelloWorld.py) +In the configs folder, you will find a config file called [HelloWorld.py](../InnerEye/ML/configs/segmentation/HelloWorld.py) We have created this file to demonstrate how to: 1. Subclass SegmentationModelBase which is the base config for all segmentation model configs 1. Configure the UNet3D implemented in this package 1. Configure Azure HyperDrive based parameter search -* This model can be trained from the commandline, from the root of the repo: `python InnerEye/ML/runner.py --model=HelloWorld` -* If you want to test your AzureML workspace with the HelloWorld model: - * Make sure your AzureML workspace has been set up. You should have inside the folder InnerEye a settings.yml file - that specifies the datastore, the resource group, and the workspace on which to run - * Upload to datasets storage account for your AzureML workspace: `Tests/ML/test_data/dataset.csv` and - `Test/ML/test_data/train_and_test_data` and name the folder "hello_world" - * If you have set up AzureML then parameter search can be performed for this model by running: - `python InnerEye/ML/runner.py --model=HelloWorld --azureml --hyperdrive` +This model can be trained from the commandline from the root of the repo: `python InnerEye/ML/runner.py --model=HelloWorld`. +When used like this, it will use dummy 3D scans as the training data, that are included in this repository. Training will run +on your local dev machine. + +In order to get this model to train in AzureML, you need to upload the data to blob storage. This can be done via +[Azure Storage Explorer](https://azure.microsoft.com/en-gb/features/storage-explorer/) or via the +[Azure commandline tools](https://docs.microsoft.com/en-us/cli/azure/). Please find the detailed instructions for both +options below. + +Before uploading, you need to know what storage account you have set up to hold the data for your AzureML workspace, see +[Step 4 in the Azure setup](setting_up_aml.md): For the upload you need to know the name of that storage account. + +## Option 1: Upload via Azure Storage explorer + +First install [Azure Storage Explorer](https://azure.microsoft.com/en-gb/features/storage-explorer/). + +When starting Storage Explorer, you need to [log in to Azure](https://docs.microsoft.com/en-gb/azure/vs-azure-tools-storage-manage-with-storage-explorer?tabs=windows). + +* Select your subscription in the left-hand navigation, and then the storage account that you set up earlier. +* There should be a section "Blob Containers" for that account. +* Right-click on "Blob Containers", and choose "Create Blob Container". Give that container the name "datasets" +* Click on the newly created container "datasets". You should see no files present. +* Press "Upload" / "Upload folder" +* As the folder to upload, select `/Tests/ML/test_data/train_and_test_data` +* As the destination directory, select `/hello_world`. +* Start the upload. Press the "Refresh" button after a couple of seconds, you should now see a folder `hello_world`, and inside of it, a subfolder `train_and_test_data`. +* Press "Upload" / "Upload files". +* Choose `/Tests/ML/test_data/dataset.csv`, and `/hello_world` as the destination directory. +* Start the upload and refresh. +* Verify that you now have files `/hello_world/dataset.csv` and `/hello_world/train_and_test_data/id1_channel1.nii.gz` + +## Option 2: Upload via the Azure CLI + +First, install the [Azure commandline tools](https://docs.microsoft.com/en-us/cli/azure/). + +Run the following in the command prompt: + +```shell +az login +az account list +``` + +If the `az account list` command returns more than one subscription, run `az account set --name "your subscription name"` + +The code below assumes that you are uploading to a storage account that has the name +`stor_acct`, please replace with your actual storage account name. + +```shell +cd +az storage container create --account-name stor_acct --name datasets +az storage blob upload --account-name stor_acct --container-name datasets --file ./Tests/ML/test_data/dataset.csv --name hello_world/dataset.csv +az storage blob upload-batch --account-name stor_acct --destination datasets --source ./Tests/ML/test_data/train_and_test_data --destination-path hello_world/train_and_test_data +``` + +## Create an AzureML datastore + +A "datastore" in AzureML lingo is an abstraction for the ML systems to access files that can come from different places. In our case, the datastore points to a storage container to which we have just uploaded the data. + +Instructions to create the datastore are given +[in the AML setup instructions](setting_up_aml.md) in step 5. + +## Run the HelloWorld model in AzureML + +Double-check that you have copied your Azure settings into the settings file, as described +[in the AML setup instructions](setting_up_aml.md) in step 6. + +Then execute: + +```shell +conda activate InnerEye +python InnerEye/ML/runner.py --model=HelloWorld +``` diff --git a/docs/setting_up_aml.md b/docs/setting_up_aml.md index a88947b38..c5b5e58bb 100644 --- a/docs/setting_up_aml.md +++ b/docs/setting_up_aml.md @@ -2,10 +2,11 @@ Our preferred way to use AzureML is using the [AzureTRE](https://microsoft.github.io/AzureTRE/) -In order to be able to train models on Azure Machine Learning (AML) you will need to setup your environment in the +In order to be able to train models on Azure Machine Learning (AML) you will need to setup your environment in the Azure Portal first. In this document we will walk you through this process step-by-step. In short, you will need to: + * Set up an Azure Machine Learning (AzureML) Workspace * Create a compute cluster to run your experiments. * Optional: Register your application to create a Service Principal Object. @@ -13,11 +14,11 @@ In short, you will need to: want to re-use the storage account that is created with the AzureML workspace - in both cases, you can skip this step. * Update your [settings.yml](/InnerEye/settings.yml) file and KeyVault with your own credentials. -Once you're done with these steps, you will be ready for the next steps described in [Creating a dataset](https://github.com/microsoft/InnerEye-createdataset), -[Building models in Azure ML](building_models.md) and +Once you're done with these steps, you will be ready for the next steps described in [Creating a dataset](https://github.com/microsoft/InnerEye-createdataset), +[Building models in Azure ML](building_models.md) and [Sample segmentation and classification tasks](sample_tasks.md). -**Prerequisite**: an Azure account and a corresponding Azure subscription. See the +**Prerequisite**: an Azure account and a corresponding Azure subscription. See the [Get started with Azure](https://azure.microsoft.com/en-us/get-started/) page for more information on how to set up your account and your subscription. Here are more detailed instructions on how to [manage accounts and subscriptions with Azure](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/). @@ -25,22 +26,23 @@ for more information on how to set up your account and your subscription. Here a ## Automatic Deployment Click on the button below to automatically create -- an AzureML workspace -- an associated storage account that will hold all training results -- and a computer cluster for training. + +* an AzureML workspace +* an associated storage account that will hold all training results +* and a computer cluster for training. This replaces steps 1 and 2 below. -- You will be asked to create a new `Resource Group`, a logical grouping that will hold all the Azure resources that +* You will be asked to create a new `Resource Group`, a logical grouping that will hold all the Azure resources that the script will create. In doing that, you will need to choose a location where all your Azure resources live - here, pick a location that is compliant with the legal requirements that your own datasets have (for example, your data may need to be kept inside of the UK) -- Then choose a name for your AzureML workspace. **Use letters and numbers only**, because other resources will be +* Then choose a name for your AzureML workspace. **Use letters and numbers only**, because other resources will be created using the workspace name as a prefix! [![Deploy To Azure](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazure.svg?sanitize=true)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2FInnerEye-DeepLearning%2Fmain%2Fazure-pipelines%2Fazure_deployment_template.json) -You can invoke the deployment also by going to [Azure](https://ms.portal.azure.com/#create/Microsoft.Template), -selecting "Build your own template", and in the editor upload the +You can invoke the deployment also by going to [Azure](https://ms.portal.azure.com/#create/Microsoft.Template), +selecting "Build your own template", and in the editor upload the [json template file](/azure-pipelines/azure_deployment_template.json) included in the repository. ### Step 1: Create an AzureML workspace @@ -48,14 +50,15 @@ selecting "Build your own template", and in the editor upload the You can skip this if you have chosen automatic deployment above. Assuming you have an Azure account and an Azure subscription, to create an AzureML workspace you will need to: + 1. Connect to the [Azure portal](https://aka.ms/portal) with your account. 2. At the top of the home page, you will see a list of Azure services (alternatively you can also use the search bar). -You will need to select "Machine Learning" and click `+ Create`. You will then have to select your subscription, +You will need to select "Machine Learning" and click `+ Create`. You will then have to select your subscription, and create a new `Resource Group`. Then, give your workspace a name, such as -`MyInnerEye-Workspace`, and choose the correct Region suitable for your location as well as the -desired `Workspace Edition`. Finish by clicking on `Review + Create` and then `Create`. +`MyInnerEye-Workspace`, and choose the correct Region suitable for your location as well as the +desired `Workspace Edition`. Finish by clicking on `Review + Create` and then `Create`. -You can find more details about how to set up an AzureML workspace in +You can find more details about how to set up an AzureML workspace in the Azure documentation [here](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-manage-workspace). ### Step 2: Create a compute cluster for your experiments @@ -63,9 +66,10 @@ the Azure documentation [here](https://docs.microsoft.com/en-us/azure/machine-le In order to be able to run experiments you will need to create a compute cluster attached to your AzureML workspace. You can skip this if you have chosen automatic deployment above. -We recommend using [low priority](https://docs.microsoft.com/en-us/azure/batch/batch-low-pri-vms) clusters, since +We recommend using [low priority](https://docs.microsoft.com/en-us/azure/batch/batch-low-pri-vms) clusters, since they only cost a fraction of the dedicated VMs. As a reference: + * The Prostate, HeadAndNeck, and the Lung model require VMs with 4 GPUs with at least 24GB of memory per GPU, for example `Standard_ND24s` (4 GPUs, 24GB per GPU). * It is possible to train all of these models on machines with fewer GPUs, or GPUs with less memory. If using GPUs with @@ -79,20 +83,19 @@ top. Then choose "Usage and Quotas" in the left hand navigation. You should see like "0/100" meaning that you are using 0 nodes out of a quota of 100. If you don't see a quota for both dedicated AND low priority nodes, click on the "Request Quota" button at the bottom of the page to create a ticket with Azure support. -Details about creating compute clusters can be found +Details about creating compute clusters can be found [here](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-set-up-training-targets#set-up-in-azure-machine-learning-studio). Note down the name of your compute cluster - this will later go into the `cluster` entry of your settings file `settings.yml`. - -### Step 3 (Optional): Create a Service Principal Authentication object. +### Step 3 (Optional): Create a Service Principal Authentication object Training runs in AzureML can be submitted either under the name of user who started it, or as a generic identity called "Service Principal". Using the generic identity is essential if you would like to submit training runs from code, for example from within an Azure pipeline. But even if you are not planning to submit training runs from code, you may choose to use a Service Principal because it can make access management easier. -If you would like the training runs to have the identity of the user who started it, there's nothing special to do - +If you would like the training runs to have the identity of the user who started it, there's nothing special to do - when you first try to submit a job, you will be prompted to authenticate in the browser. If you would like to use Service Principal, you will need to create it in Azure first, and then store its password @@ -107,23 +110,24 @@ To create the Service Principal: 1. Navigate to `App registrations` (use the top search bar to find it). 1. Click on `+ New registration` on the top left of the page. 1. Choose a name for your application e.g. `MyInnerEye-ServicePrincipal` and click `Register`. - 1. Once it is created you will see your application in the list appearing under `App registrations`. This step might take - a few minutes. Click on the resource to access its properties. In particular, you will need the application ID. - You can find this ID in the `Overview` tab (accessible from the list on the left of the page). + 1. Once it is created you will see your application in the list appearing under `App registrations`. This step might take + a few minutes. Click on the resource to access its properties. In particular, you will need the application ID. + You can find this ID in the `Overview` tab (accessible from the list on the left of the page). Note it down for later - this will go into the `application_id` entry of your settings file `settings.yml`. - 1. You need to create an application secret to access the resources managed by this service principal. - On the pane on the left find `Certificates & Secrets`. Click on `+ New client secret` (bottom of the page), note down your token. - Warning: this token will only appear once at the creation of the token, you will not be able to re-display it again later. + 1. You need to create an application secret to access the resources managed by this service principal. + On the pane on the left find `Certificates & Secrets`. Click on `+ New client secret` (bottom of the page), note down your token. + Warning: this token will only appear once at the creation of the token, you will not be able to re-display it again later. 1. Save your application secret in your local machine: 1. You can either set the environment variable `APPLICATION_KEY` to the application secret you just generated. - 1. Or you can create a file called `InnerEyeTestVariables.txt` in the root directory of your git repository. + 1. Or you can create a file called `InnerEyeTestVariables.txt` in the root directory of your git repository. That file should contain a single line of the form `APPLICATION_KEY=TheApplicationSecretYouJustCreated` 1. You will need to share this application secret with your colleagues if they also want to use Service Principal authentication. They will also either need to set the environment variable, or create the text file with the secret. - -Now that your service principal is created, you need to give permission for it to access and manage your AzureML workspace. + +Now that your service principal is created, you need to give permission for it to access and manage your AzureML workspace. To do so: + 1. Go to your AzureML workspace. To find it you can type the name of your workspace in the search bar above. 1. On the `Overview` page, there is a link to the Resource Group that contains the workspace. Click on that. 1. When on the Resource Group, navigate to `Access control`. Then click on `+ Add` > `Add role assignment`. A pane will appear on the @@ -132,11 +136,12 @@ of your Service Principal and select it. Finish by clicking `Save` at the bottom Your Service Principal is now all set! +### Step 4: Create a storage account for your datasets -### Step 4: Create a storage account for your datasets. In order to train your model in the cloud, you will need to upload your datasets to Azure. For this, you will have two options: - * Store your datasets in the storage account linked to your AzureML workspace (see Step 1 above). - * Create a new storage account whom you will only use for dataset storage purposes. + +* Store your datasets in the storage account linked to your AzureML workspace (see Step 1 above). +* Create a new storage account whom you will only use for dataset storage purposes. If you want to create a new storage account: @@ -145,53 +150,57 @@ If you want to create a new storage account: 2. On the top of the page click on `+ Add`. 3. Select your subscription and the resource group that you created earlier. 4. Specify a name for your storage account, and a location suitable for your data. -6. Click create. -7. Once your resource is created you can access it by typing its name in the top search bar. +5. Click create. +6. Once your resource is created you can access it by typing its name in the top search bar. Once your datasets storage account is ready, find it in the Azure portal, and choose "Containers" in the left hand navigation. Create a new container called "datasets". Inside of this container, each dataset will later occupy one folder. ### Step 5: Create a datastore -You will now need to create a datastore in AzureML. - -- For that, you need to know the account key for the storage account -that holds your datasets - this can be the name of the storage account created in Step 4, or the storage account that came with the -AzureML workspace in Step 1. -- Find the storage account in the Azure. -- In the left hand pane, choose "Access keys", and copy one of the keys to the clipboard. -- Now go to your AzureML workspace and launch Azure Machine Learning Studio (blue button in the main pane marked "Launch Studio") -- In the left hand navigation pane of Azure Machine Learning Studio, choose "Datastores".- Click `+ New datastore`. -- Create a datastore called `innereyedatasets`. -- In the fields for storage account, type in your dataset storage account -name (newly created or the AzureML one). -- In blob containers, choose "datasets" from the dropdown. If the dropdown is empty, go back to Step 4 and + +You will now need to create a datastore in AzureML. + +* For that, you need to know the account key for the storage account +that holds your datasets - this can be the name of the storage account created in Step 4, or the storage account that came with the +AzureML workspace in Step 1. +* Find the storage account in the Azure. +* In the left hand pane, choose "Access keys", and copy one of the keys to the clipboard. +* Now go to your AzureML workspace and launch Azure Machine Learning Studio (blue button in the main pane marked "Launch Studio") +* In the left hand navigation pane of Azure Machine Learning Studio, choose "Datastores".- Click `+ New datastore`. +* Create a datastore called `innereyedatasets`. +* In the fields for storage account, type in your dataset storage account +name (newly created or the AzureML one). +* In blob containers, choose "datasets" from the dropdown. If the dropdown is empty, go back to Step 4 and create a container called "datasets". -- Choose "Authentication Type: Account Key" and paste the storage account key from the clipboard into the +* Choose "Authentication Type: Account Key" and paste the storage account key from the clipboard into the "Account Key" field. -- Done! +* Done! ### Step 6: Update the variables in `settings.yml` + The [settings.yml](../InnerEye/settings.yml) file is used to store your Azure setup. In order to be able to train your model you will need to update this file using the settings for your Azure subscription. + 1. You will first need to retrieve your `tenant_id`. You can find your tenant id by navigating to -`Azure Active Directory > Properties > Tenant ID` (use the search bar above to access the `Azure Active Directory` -resource. Copy and paste the GUID to the `tenant_id` field of the `.yml` file. More information about Azure tenants can be found +`Azure Active Directory > Properties > Tenant ID` (use the search bar above to access the `Azure Active Directory` +resource. Copy and paste the GUID to the `tenant_id` field of the `.yml` file. More information about Azure tenants can be found [here](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant). -2. You then need to retrieve your subscription id. In the search bar look for `Subscriptions`. Then in the subscriptions list, -look for the subscription you are using for your workspace. Copy the value of the `Subscription ID` in the corresponding +1. You then need to retrieve your subscription id. In the search bar look for `Subscriptions`. Then in the subscriptions list, +look for the subscription you are using for your workspace. Copy the value of the `Subscription ID` in the corresponding field of [settings.yml](../InnerEye/settings.yml). -3. Copy the application ID of your Service Principal that you retrieved earlier (cf. Step 3) to the `application_id` field. +1. Copy the application ID of your Service Principal that you retrieved earlier (cf. Step 3) to the `application_id` field. If you did not set up a Service Principal, fill that with an empty string or leave out altogether. -6. Update the `resource_group:` field with your resource group name (created in Step 1). -7. Update the `workspace_name:` field with the name of the AzureML workspace created in Step 1. -8. Update the `cluster:` field with the name of your own compute cluster (Step 2). If you chose automatic +1. Update the `resource_group:` field with your resource group name (created in Step 1). +1. Update the `workspace_name:` field with the name of the AzureML workspace created in Step 1. +1. Update the `cluster:` field with the name of your own compute cluster (Step 2). If you chose automatic deployment, this cluster will be called "NC24-LowPrio" Leave all other fields as they are for now. Summarizing, here is how the file should look like: -``` + +```yml variables: tenant_id: '' subscription_id: '' ``` -## Done! +## Done + You should be all set now. You can now go to the next step, [creating a dataset](creating_dataset.md), to learn how segmentation