Add ClearmlJob support for Task parameters override (issue #214)

This commit is contained in:
allegroai 2021-04-10 22:21:17 +03:00
parent 6415722798
commit bf9ec770c6
2 changed files with 35 additions and 8 deletions

View File

@ -1,4 +1,5 @@
import hashlib import hashlib
import warnings
from datetime import datetime from datetime import datetime
from logging import getLogger from logging import getLogger
from time import time, sleep from time import time, sleep
@ -11,7 +12,7 @@ from ..backend_api.services import tasks as tasks_service
logger = getLogger('clearml.automation.job') logger = getLogger('clearml.automation.job')
class TrainsJob(object): class ClearmlJob(object):
def __init__( def __init__(
self, self,
base_task_id, # type: str base_task_id, # type: str
@ -58,10 +59,19 @@ class TrainsJob(object):
params.update(parameter_override) params.update(parameter_override)
self.task.set_parameters(params) self.task.set_parameters(params)
self.task_parameter_override = dict(**parameter_override) self.task_parameter_override = dict(**parameter_override)
if task_overrides: if task_overrides:
# todo: make sure it works sections = {}
# set values inside the Task
for k, v in task_overrides.items():
# noinspection PyProtectedMember # noinspection PyProtectedMember
self.task._edit(**task_overrides) self.task._set_task_property(k, v, raise_on_error=False, log_on_error=True)
section = k.split('.')[0]
sections[section] = getattr(self.task.data, section, None)
# store back Task parameters into backend
# noinspection PyProtectedMember
self.task._edit(**sections)
self.task_started = False self.task_started = False
self._worker = None self._worker = None
@ -298,6 +308,15 @@ class TrainsJob(object):
return False return False
class TrainsJob(ClearmlJob):
def __init__(self, **kwargs):
super(TrainsJob, self).__init__(**kwargs)
warnings.warn(
"Use clearml.automation.ClearmlJob",
DeprecationWarning,
)
# noinspection PyMethodMayBeStatic, PyUnusedLocal # noinspection PyMethodMayBeStatic, PyUnusedLocal
class _JobStub(object): class _JobStub(object):
""" """

View File

@ -18,23 +18,31 @@ class AccessMixin(object):
obj = self.data obj = self.data
props = prop_path.split('.') props = prop_path.split('.')
for i in range(len(props)): for i in range(len(props)):
if not hasattr(obj, props[i]): if not hasattr(obj, props[i]) and (not isinstance(obj, dict) or props[i] not in obj):
msg = 'Task has no %s section defined' % '.'.join(props[:i + 1]) msg = 'Task has no %s section defined' % '.'.join(props[:i + 1])
if log_on_error: if log_on_error:
self.log.info(msg) self.log.info(msg)
if raise_on_error: if raise_on_error:
raise ValueError(msg) raise ValueError(msg)
return default return default
if isinstance(obj, dict):
obj = obj.get(props[i])
else:
obj = getattr(obj, props[i], None) obj = getattr(obj, props[i], None)
return obj return obj
def _set_task_property(self, prop_path, value, raise_on_error=True, log_on_error=True): def _set_task_property(self, prop_path, value, raise_on_error=True, log_on_error=True):
props = prop_path.split('.') props = prop_path.split('.')
if len(props) > 1: if len(props) > 1:
obj = self._get_task_property('.'.join(props[:-1]), raise_on_error=raise_on_error, obj = self._get_task_property(
log_on_error=log_on_error) '.'.join(props[:-1]), raise_on_error=raise_on_error, log_on_error=log_on_error)
else: else:
obj = self.data obj = self.data
if not hasattr(obj, props[-1]) and isinstance(obj, dict):
obj[props[-1]] = value
else:
setattr(obj, props[-1], value) setattr(obj, props[-1], value)
def save_exec_model_design_file(self, filename='model_design.txt', use_cache=False): def save_exec_model_design_file(self, filename='model_design.txt', use_cache=False):