> > here's a snippet. if it attack you put your hand in front of it and > > say "down!". it's just the intro it's not even the area i'm working on > > # ==> i think work ended up in the read_many function despite > the read_many_tensors function existing > # ==> basically, one outputs partial tensors unless there is a > region of all-cached or all-uncached > # ==> the special cases are for runs of 0s on the left and > right and can be ignored to start
updated this line to: # ==> the special cases are for disk exhaustion and runs of 0s on the left and right, and can be ignored to start > > def read_many(self, offset_lengths, progress, validate_sorted=True): > if validate_sorted: > sorted_offset_lengths = list(offset_lengths) > sorted_offset_lengths.sort() > assert sorted_offset_lengths == offset_lengths > OP_FETCH, OP_PLACE, OP_OUTPUT = 1, 2, 4 > offset_length_tail_idx_ops = > torch.zeros([offset_lengths.shape[0]*2, 5]) > OFFSET, LENGTH, TAIL, IDX, OP = > range(offset_length_tail_ops.shape[-1]) > op_ct = 0 > tails = (offset_lengths[:,0] + > offset_lengths[:,1]).clamp(max=len(self.mmap)) > aligned_offsets > = offset_lengths[:,0] // self.blksize; aligned_offsets *= self.blksize > aligned_tails = (tails - 1); aligned_tails //= > self.blksize; aligned_tails += 1; aligned_tails *= self.blksize; > torch.clamp(aligned_tails, max=self.size(), out=aligned_tails) > cls = type(self.fetchers) > avail_disk_space = (psutil.disk_usage(self.fn).free + > cls.sparse_usage) * self.fetchers.usage_frac - cls.sparse_usage > min_hole = 0 > pbar = range(len(offset_lengths)) > if progress: > pbar = tqdm.tqdm(pbar, total=len(offset_lengths), > desc=progress, leave=False, unit='rd') > idx = 0 > while idx < len(offset_lengths):