| |
| |
|
|
| |
|
|
| from .monitor import Monitor |
| import os |
|
|
| import deepspeed.comm as dist |
|
|
|
|
| class csvMonitor(Monitor): |
|
|
| def __init__(self, csv_config): |
| super().__init__(csv_config) |
| self.filenames = [] |
| self.enabled = csv_config.enabled |
| self.output_path = csv_config.output_path |
| self.job_name = csv_config.job_name |
| self.log_dir = self.setup_log_dir() |
|
|
| def setup_log_dir(self, base=os.path.join(os.path.expanduser("~"), "csv_monitor")): |
| if self.enabled and dist.get_rank() == 0: |
| if self.output_path is not None: |
| log_dir = os.path.join(self.output_path, self.job_name) |
| |
| else: |
| if "DLWS_JOB_ID" in os.environ: |
| infra_job_id = os.environ["DLWS_JOB_ID"] |
| elif "DLTS_JOB_ID" in os.environ: |
| infra_job_id = os.environ["DLTS_JOB_ID"] |
| else: |
| infra_job_id = "unknown-job-id" |
|
|
| csv_monitor_dir_name = os.path.join(infra_job_id, "logs") |
| log_dir = os.path.join(base, csv_monitor_dir_name, self.job_name) |
| os.makedirs(log_dir, exist_ok=True) |
| return log_dir |
|
|
| def write_events(self, event_list): |
| if self.enabled and dist.get_rank() == 0: |
| import csv |
| |
| for event in event_list: |
| log_name = event[0] |
| value = event[1] |
| step = event[2] |
|
|
| |
| |
| if '/' in log_name: |
| record_splits = log_name.split('/') |
| header = record_splits[len(record_splits) - 1] |
| else: |
| header = log_name |
|
|
| |
| filename = log_name.replace('/', '_').replace(' ', '_') |
| fname = self.log_dir + '/' + filename + '.csv' |
|
|
| |
| with open(fname, 'a+') as csv_monitor_file: |
| csv_monitor_writer = csv.writer(csv_monitor_file) |
| if filename not in self.filenames: |
| self.filenames.append(filename) |
| csv_monitor_writer.writerow(['step', header]) |
| csv_monitor_writer.writerow([step, value]) |
|
|