Skip to content
Back to skills

Experiment Tracking

ASecurity

"Instrument Python ML and data scripts with ClearML Task experiment

  • 247 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
toolspythonbashfastapidockerapibackend

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill experiment-tracking --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Experiment Tracking?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Experiment Tracking
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-experiment-tracking/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-experiment-tracking)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: experiment-tracking
description: "Instrument Python ML and data scripts with ClearML Task experiment
  tracking, Logger reports, artifacts, configs, models, offline mode, and
  tracking validation."
disable-model-invocation: true
metadata:
  disco-role: operating
license: Apache 2.0
---

# ClearML Experiment Tracking

Use this sub-skill when a user asks to add, review, or troubleshoot ClearML experiment tracking in a Python script. It covers `Task.init`, `TaskTypes`, connected hyperparameters/configuration, `Logger` reports, artifacts, model metadata, framework auto-logging, offline mode, task reuse, `output_uri`, and static validation.

## When To Use

- Retrofit a training/evaluation script with ClearML tracking while preserving existing `argparse`, config files, framework logging, and model save paths.
- Add explicit reports for scalars, text, images, tables, Plotly, Matplotlib, artifacts, or model metadata.
- Make a script work without credentials by using offline mode and later import the offline session.
- Diagnose missing metrics, duplicate task reuse, upload failures, bad `output_uri`, or logger calls made before `Task.init`.
- Validate a candidate script without importing the user code or contacting a ClearML server.

## Route Elsewhere

- Use `../data-storage/SKILL.md` for `Dataset`, `StorageManager`, `clearml-data`, dataset versioning, cache/download, and object-storage data movement.
- Use `../remote-execution-cli/SKILL.md` for `clearml-task`, `Task.create`, `Task.enqueue`, agents, queues, Docker execution, and remote execution packaging.
- Use `../automation-pipelines/SKILL.md` for `PipelineController`, `PipelineDecorator`, HPO, schedulers, triggers, and pipeline orchestration.
- Use `../routers-services/SKILL.md` for `Task.get_http_router()`, service endpoints, FastAPI/router integration, and the `clearml[router]` extra.

## Essential References

- Read `references/api-reference.md` for verified tracking/reporting signatures, parameter notes, and method-selection guidance.
- Read `references/workflows.md` for concrete instrumentation recipes, logging examples, offline fallback, and validation flow.
- Read `references/troubleshooting.md` for symptoms, likely causes, and fixes across credentials, config, uploads, reuse, offline mode, framework auto-connect, and logger misuse.
- Run `scripts/validate_tracking_script.py --help` to inspect a Python file statically for likely ClearML tracking issues.

## Minimal Instrumentation Pattern

Place `Task.init` near the start of executable code, before training starts and before framework writers, plots, or model checkpoints are created.

```python
from clearml import Task, TaskTypes

task = Task.init(
    project_name="my-project",
    task_name="train-model",
    task_type=TaskTypes.training,
    reuse_last_task_id=False,
    output_uri=True,
)
```

Use `reuse_last_task_id=False` for most repeatable local training runs so previous outputs are not overwritten. Use `continue_last_task=True` only when intentionally appending to an existing task, and prefer an explicit `reuse_last_task_id="<task-id>"` when continuing a known task.

## Connect Inputs

- Let `Task.init(auto_connect_arg_parser=True)` capture common CLI parsers automatically, or pass a dictionary to include/exclude specific arguments.
- Use `task.connect(params, name="General")` for dictionaries, `argparse.Namespace`, `TaskParameters`, model objects, or simple config classes.
- Use `task.connect_configuration(config_path_or_dict, name="train_config")` before reading a JSON/YAML/config file so remote overrides can replace the file or dictionary.
- Use `ignore_remote_overrides=True` on `connect` or `connect_configuration` only when the script must not accept UI/backend overrides.

## Report Outputs

- Get a logger with `logger = task.get_logger()` or, inside helper functions after initialization, `Task.current_task().get_logger()`.
- Report scalar curves with `logger.report_scalar(title="train", series="loss", value=loss, iteration=step)`.
- Report text with `logger.report_text("message")`; stdout, stderr, and Python logging are also captured when `auto_connect_streams=True`.
- Report images/plots/tables with `report_image`, `report_matplotlib_figure`, `report_plotly`, and `report_table`.
- Upload one-time artifacts with `task.upload_artifact(name="metrics", artifact_object=metrics, wait_on_upload=True)` when later code depends on upload success.
- Register a live pandas DataFrame with `task.register_artifact(...)` only when dynamic synchronization is intended; otherwise prefer `upload_artifact`.

## Model Tracking

- Let framework auto-connect track supported model files when possible through `auto_connect_frameworks=True` or a framework-specific mapping such as `{"pytorch": ["*.pt", "*.pth"]}`.
- Use `OutputModel(task=task, name="model")` when manually registering or uploading model weights.
- Call `output_model.update_labels(labels)` for class mappings and `output_model.update_weights(weights_filename="model.pt")` for local weights; use `register_uri="..."` for an existing remote model URL.
- Use `InputModel(model_id=...)` or `InputModel(name=..., project=...)` for existing model inputs, then connect it with `task.connect(input_model, name="pretrained")` if the task should record it.

## Offline And Credentials Pattern

Use offline mode when the script must run without credentials or network access:

```python
from clearml import Task

Task.set_offline(True)
task = Task.init(project_name="offline", task_name="train")
# training and reporting here
task.close()
Task.set_offline(False)
Task.import_offline_session(task.get_offline_mode_folder())
```

Set offline mode before `Task.init`. Close the task before switching back online. Do not use `Task.create` for offline experiment capture.

## Validation Checklist

- `from clearml import Task` exists and `Task.init(...)` is called exactly once for the main process.
- `Task.init` has stable `project_name`, `task_name`, and a suitable `task_type` from `TaskTypes`.
- `Task.init` happens before parser parsing, framework logger/writer creation, Matplotlib plotting, model checkpoint setup, and `Logger` reporting.
- Repeated local runs use `reuse_last_task_id=False`, unless intentional reuse/continue behavior is documented.
- Artifact/model uploads have `output_uri=True` or a configured storage URI when server file storage is not enough.
- Offline fallback sets `Task.set_offline(True)` before `Task.init` and closes/imports the session when appropriate.
- Manual reports use `task.get_logger()` or `Task.current_task().get_logger()` after initialization, not `Logger()` construction.
- The script still runs without optional ML frameworks if the requested change is limited to ClearML instrumentation.

## Static Helper

Run the bundled validator against a candidate script:

```bash
python scripts/validate_tracking_script.py path/to/train.py
```

The helper parses the file with `ast`, never imports the script, never imports ClearML, and never contacts a server. Treat warnings as review prompts; it cannot prove runtime server connectivity, storage credentials, optional framework installation, or remote override behavior.

Files in this skill

  • SKILL.md7 KB
  • references/api-reference.md12.4 KB
  • references/troubleshooting.md10.3 KB
  • references/workflows.md9.5 KB
  • scripts/validate_tracking_script.py35.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.