(self)
| 107 | results.close() |
| 108 | |
| 109 | def multi_process_evaluation(self): |
| 110 | start_eval_time = time.perf_counter() |
| 111 | nr_devices = len(self.devices) |
| 112 | stride = int(np.ceil(self.ndata / nr_devices)) |
| 113 | |
| 114 | # start multi-process on multi-gpu |
| 115 | procs = [] |
| 116 | for d in range(nr_devices): |
| 117 | e_record = min((d + 1) * stride, self.ndata) |
| 118 | shred_list = list(range(d * stride, e_record)) |
| 119 | device = self.devices[d] |
| 120 | logger.info("GPU %s handle %d data." % (device, len(shred_list))) |
| 121 | p = self.context.Process(target=self.worker, args=(shred_list, device)) |
| 122 | procs.append(p) |
| 123 | |
| 124 | for p in procs: |
| 125 | p.start() |
| 126 | |
| 127 | all_results = [] |
| 128 | for _ in tqdm(range(self.ndata)): |
| 129 | t = self.results_queue.get() |
| 130 | all_results.append(t) |
| 131 | if self.verbose: |
| 132 | self.compute_metric(all_results) |
| 133 | |
| 134 | for p in procs: |
| 135 | p.join() |
| 136 | |
| 137 | result_line = self.compute_metric(all_results) |
| 138 | logger.info("Evaluation Elapsed Time: %.2fs" % (time.perf_counter() - start_eval_time)) |
| 139 | return result_line |
| 140 | |
| 141 | def worker(self, shred_list, device): |
| 142 | start_load_time = time.time() |
no test coverage detected