comdoleger commited on
Commit
038609d
·
verified ·
1 Parent(s): 3413526

Upload jobs/process/BaseTrainProcess.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. jobs/process/BaseTrainProcess.py +79 -0
jobs/process/BaseTrainProcess.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import random
2
+ from datetime import datetime
3
+ import os
4
+ from collections import OrderedDict
5
+ from typing import TYPE_CHECKING, Union
6
+
7
+ import torch
8
+ import yaml
9
+
10
+ from jobs.process.BaseProcess import BaseProcess
11
+
12
+ if TYPE_CHECKING:
13
+ from jobs import TrainJob, BaseJob, ExtensionJob
14
+ from torch.utils.tensorboard import SummaryWriter
15
+ from tqdm import tqdm
16
+
17
+
18
+ class BaseTrainProcess(BaseProcess):
19
+
20
+ def __init__(
21
+ self,
22
+ process_id: int,
23
+ job,
24
+ config: OrderedDict
25
+ ):
26
+ super().__init__(process_id, job, config)
27
+ self.process_id: int
28
+ self.config: OrderedDict
29
+ self.writer: 'SummaryWriter'
30
+ self.job: Union['TrainJob', 'BaseJob', 'ExtensionJob']
31
+ self.progress_bar: 'tqdm' = None
32
+
33
+ self.training_seed = self.get_conf('training_seed', self.job.training_seed if hasattr(self.job, 'training_seed') else None)
34
+ # if training seed is set, use it
35
+ if self.training_seed is not None:
36
+ torch.manual_seed(self.training_seed)
37
+ if torch.cuda.is_available():
38
+ torch.cuda.manual_seed(self.training_seed)
39
+ random.seed(self.training_seed)
40
+
41
+ self.progress_bar = None
42
+ self.writer = None
43
+ self.training_folder = self.get_conf('training_folder',
44
+ self.job.training_folder if hasattr(self.job, 'training_folder') else None)
45
+ self.save_root = os.path.join(self.training_folder, self.name)
46
+ self.step = 0
47
+ self.first_step = 0
48
+ self.log_dir = self.get_conf('log_dir', self.job.log_dir if hasattr(self.job, 'log_dir') else None)
49
+ self.setup_tensorboard()
50
+ self.save_training_config()
51
+
52
+ def run(self):
53
+ super().run()
54
+ # implement in child class
55
+ # be sure to call super().run() first
56
+ pass
57
+
58
+ # def print(self, message, **kwargs):
59
+ def print(self, *args):
60
+ if self.progress_bar is not None:
61
+ self.progress_bar.write(' '.join(map(str, args)))
62
+ self.progress_bar.update()
63
+ else:
64
+ print(*args)
65
+
66
+ def setup_tensorboard(self):
67
+ if self.log_dir:
68
+ from torch.utils.tensorboard import SummaryWriter
69
+ now = datetime.now()
70
+ time_str = now.strftime('%Y%m%d-%H%M%S')
71
+ summary_name = f"{self.name}_{time_str}"
72
+ summary_dir = os.path.join(self.log_dir, summary_name)
73
+ self.writer = SummaryWriter(summary_dir)
74
+
75
+ def save_training_config(self):
76
+ os.makedirs(self.save_root, exist_ok=True)
77
+ save_dif = os.path.join(self.save_root, f'config.yaml')
78
+ with open(save_dif, 'w') as f:
79
+ yaml.dump(self.job.raw_config, f)