技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
experiment-tracking【数据与研究】Instrument Python ML and data scripts with ClearML Task experiment tracking, Logger reports, artifacts, configs, models, offline mode, and tracking validation.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
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.
argparse, config files, framework logging, and model save paths.output_uri, or logger calls made before Task.init.../data-storage/SKILL.md for Dataset, StorageManager, clearml-data, dataset versioning, cache/download, and object-storage data movement.../remote-execution-cli/SKILL.md for clearml-task, Task.create, Task.enqueue, agents, queues, Docker execution, and remote execution packaging.../automation-pipelines/SKILL.md for PipelineController, PipelineDecorator, HPO, schedulers, triggers, and pipeline orchestration.../routers-services/SKILL.md for Task.get_http_router(), service endpoints, FastAPI/router integration, and the clearml[router] extra.references/api-reference.md for verified tracking/reporting signatures, parameter notes, and method-selection guidance.references/workflows.md for concrete instrumentation recipes, logging examples, offline fallback, and validation flow.references/troubleshooting.md for symptoms, likely causes, and fixes across credentials, config, uploads, reuse, offline mode, framework auto-connect, and logger misuse.scripts/validate_tracking_script.py --help to inspect a Python file statically for likely ClearML tracking issues.Place Task.init near the start of executable code, before training starts and before framework writers, plots, or model checkpoints are created.
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.
Task.init(auto_connect_arg_parser=True) capture common CLI parsers automatically, or pass a dictionary to include/exclude specific arguments.task.connect(params, name="General") for dictionaries, argparse.Namespace, TaskParameters, model objects, or simple config classes.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.ignore_remote_overrides=True on connect or connect_configuration only when the script must not accept UI/backend overrides.logger = task.get_logger() or, inside helper functions after initialization, Task.current_task().get_logger().logger.report_scalar(title="train", series="loss", value=loss, iteration=step).logger.report_text("message"); stdout, stderr, and Python logging are also captured when auto_connect_streams=True.report_image, report_matplotlib_figure, report_plotly, and report_table.task.upload_artifact(name="metrics", artifact_object=metrics, wait_on_upload=True) when later code depends on upload success.task.register_artifact(...) only when dynamic synchronization is intended; otherwise prefer upload_artifact.auto_connect_frameworks=True or a framework-specific mapping such as {"pytorch": ["*.pt", "*.pth"]}.OutputModel(task=task, name="model") when manually registering or uploading model weights.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.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.Use offline mode when the script must run without credentials or network access:
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.
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.reuse_last_task_id=False, unless intentional reuse/continue behavior is documented.output_uri=True or a configured storage URI when server file storage is not enough.Task.set_offline(True) before Task.init and closes/imports the session when appropriate.task.get_logger() or Task.current_task().get_logger() after initialization, not Logger() construction.Run the bundled validator against a candidate script:
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.