From 72686983c8970f89034da7614425880bf521d553 Mon Sep 17 00:00:00 2001 From: pollfly <75068813+pollfly@users.noreply.github.com> Date: Wed, 25 Aug 2021 09:42:40 +0300 Subject: [PATCH] Add advanced examples docs (#50) --- docs/fundamentals/task.md | 2 +- docs/guides/advanced/execute_remotely.md | 76 ++++++++++++++++++ .../advanced/multiple_tasks_single_process.md | 25 ++++++ .../examples_remote_execution_artifacts.png | Bin 0 -> 40943 bytes sidebars.js | 1 + 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 docs/guides/advanced/execute_remotely.md create mode 100644 docs/guides/advanced/multiple_tasks_single_process.md create mode 100644 docs/img/examples_remote_execution_artifacts.png diff --git a/docs/fundamentals/task.md b/docs/fundamentals/task.md index 47ed2b3f..db795fba 100644 --- a/docs/fundamentals/task.md +++ b/docs/fundamentals/task.md @@ -157,7 +157,7 @@ Once a Task is created, the Task object can be accessed from anywhere in the cod If multiple Tasks need to be created in the same process (for example, for logging multiple manual runs), make sure to close a Task, before initializing a new one. To close a task simply call `task.close` -(see example [here](https://github.com/allegroai/clearml/blob/master/examples/advanced/multiple_tasks_single_process.py)). +(see example [here](../guides/advanced/multiple_tasks_single_process.md)). When initializing a Task, its project needs to be specified. If the project entered does not exist, it will be created. Projects can be divided into sub-projects, just like folders are broken into sub-folders. diff --git a/docs/guides/advanced/execute_remotely.md b/docs/guides/advanced/execute_remotely.md new file mode 100644 index 00000000..d9051461 --- /dev/null +++ b/docs/guides/advanced/execute_remotely.md @@ -0,0 +1,76 @@ +--- +title: Remote Execution +--- + +The [execute_remotely_example](https://github.com/allegroai/clearml/blob/master/examples/advanced/execute_remotely_example.py) +script demonstrates the use of the [`Task.execute_remotely`](../../references/sdk/task.md#execute_remotely/) method. + +:::note +Make sure to have at least one [ClearML Agent](../../clearml_agent.md) running and assigned to listen to the `default` queue +``` +clearml-agent daemon --queue default +``` +::: + +## Execution Flow + +The script trains a simple deep neural network on the PyTorch built-in MNIST dataset. The following describes the code's +execution flow: +1. The training runs for one epoch. +1. The code passes the `execute_remotely` method which terminates the local execution of the code and enqueues the task + to the `default` queue, as specified in the `queue_name` parameter. +1. An agent listening to the queue fetches the task and restarts task execution remotely. When the agent executes the task, + the `execute_remotely` is considered no-op. + +An execution flow that uses `execute_remotely` method is especially helpful when running code on a development machine for a few iterations +to debug and to make sure the code doesn't crash, or to set up an environment. After that, the training can be +moved to be executed by a stronger machine. + +During the execution of the example script, the code does the following: +* Uses ClearML's automatic and explicit logging. +* Creates an experiment named `remote_execution pytorch mnist train`, which is associated with the `examples` project. + + +## Scalars + +In the example script's `train` function, the following code explicitly reports scalars to **ClearML**: + +```python +Logger.current_logger().report_scalar( + "train", "loss", iteration=(epoch * len(train_loader) + batch_idx), value=loss.item()) +``` + +In the `test` method, the code explicitly reports `loss` and `accuracy` scalars. + +```python +Logger.current_logger().report_scalar( + "test", "loss", iteration=epoch, value=test_loss) +Logger.current_logger().report_scalar( + "test", "accuracy", iteration=epoch, value=(correct / len(test_loader.dataset))) +``` + +These scalars can be visualized in plots, which appear in the ClearML web UI, in the experiment's +page **>** **RESULTS** **>** **SCALARS**. + +![image](../../img/examples_pytorch_mnist_07.png) + +## Hyperparameters + +ClearML automatically logs command line options defined with `argparse`. They appear in **CONFIGURATIONS** **>** **HYPER PARAMETERS** **>** **Args**. + +![image](../../img/examples_pytorch_mnist_01.png) + +## Console + +Text printed to the console for training progress, as well as all other console output, appear in **RESULTS** **>** **CONSOLE**. + +![image](../../img/examples_pytorch_mnist_06.png) + +## Artifacts + +Model artifacts associated with the experiment appear in the info panel of the **EXPERIMENTS** tab and in +the info panel of the **MODELS** tab. + + +![image](../../img/examples_remote_execution_artifacts.png) + diff --git a/docs/guides/advanced/multiple_tasks_single_process.md b/docs/guides/advanced/multiple_tasks_single_process.md new file mode 100644 index 00000000..744b4b75 --- /dev/null +++ b/docs/guides/advanced/multiple_tasks_single_process.md @@ -0,0 +1,25 @@ +--- +title: Multiple Tasks in Single Process +--- + +The [multiple_tasks_single_process](https://github.com/allegroai/clearml/blob/master/examples/advanced/multiple_tasks_single_process.py) +script demonstrates the capability to log a single script in multiple ClearML tasks. + +In order to log a script in multiple tasks, each task needs to be initialized using the [`Task.init`](../../references/sdk/task.md#taskinit) +method with the `task_name` and `project_name` parameters input. Before initializing an additional task in the same script, the +previous task must be manually shut down with the [`close`](../../references/sdk/task.md#close) method. + +When the script is executed, it should return something like this: + +```text +ClearML Task: created new task id=5c4d2d3674a94e35b10f04d9d2180l62 +ClearML results page: https://app.community.clear.ml/projects/6835eb7316554c2b933b69638470fe02/experiments/5c4d2d3674a94e35b10f04d9d2180l62/output/log +... +ClearML Task: created new task id=28a84c17a6204b438e1e7a094a234a7f +ClearML results page: https://app.community.clear.ml/projects/7894eb7316554c4b933a79638473fe02/experiments/28a84c17a6204b438e1e7a094a234a7f/output/log +... +ClearML Task: created new task id=6d1e253ba0234d32a38sg85013185g46 +ClearML results page: https://app.community.clear.ml/projects/7895eb7316554c4b933a69638470fe02/experiments/6d1e253ba0234d32a38sg85013185g46/output/log +``` + +Notice that three separate tasks with distinct IDs are created, and a link is provided to view the results of each one. \ No newline at end of file diff --git a/docs/img/examples_remote_execution_artifacts.png b/docs/img/examples_remote_execution_artifacts.png new file mode 100644 index 0000000000000000000000000000000000000000..fd73512f2cce1b8073c86dc0b043e6f2414f3605 GIT binary patch literal 40943 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