mirror of
https://github.com/clearml/clearml
synced 2025-06-23 01:55:38 +00:00
Add ClearmlJob support for Task parameters override (issue #214)
This commit is contained in:
parent
6415722798
commit
bf9ec770c6
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user