mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 00:21:07 +01:00
Summary: As pointed out in https://github.com/pytorch/pytorch/pull/107479, using a set prevents collisions like "a" => "a", "a" => "a_1", "a_1" => "a_1" (but should go to "a_1_1"). We can combine using counters and a set to avoid this problem. Still gets us the performance benefit in the case of collisions with a very minor penalty in a case with no collision. Test Plan: Extract this code and run: ``` # New version from typing import Dict, Set class Net: _net_names_used_counters: Dict[str, int] = {} _net_names_used: Set[str] = set() staticmethod def current_prefix(): return "test_prefix" staticmethod def _get_next_net_name(basename): basename = "/".join(x for x in [Net.current_prefix(), basename] if x) idx = Net._net_names_used_counters.get(basename, 0) while (name := basename if idx == 0 else f"{basename}_{idx}") in Net._net_names_used: idx += 1 Net._net_names_used_counters[basename] = idx + 1 Net._net_names_used.add(name) return name print(Net._get_next_net_name("basename")) print(Net._get_next_net_name("x_basename")) print(Net._get_next_net_name("basename")) print(Net._get_next_net_name("basename")) print(Net._get_next_net_name("x_basename")) print(Net._get_next_net_name("basename_1")) > test_prefix/basename > test_prefix/x_basename > test_prefix/basename_1 > test_prefix/basename_2 > test_prefix/x_basename_1 > test_prefix/basename_1_1 ``` Differential Revision: D48576516 Pull Request resolved: https://github.com/pytorch/pytorch/pull/107743 Approved by: https://github.com/zdevito |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| blob_deallocation_test.py | ||
| do_op_test.py | ||
| executor_test_util.py | ||
| executor_test.py | ||
| fakefp16_transform_test.py | ||
| gpu_context_test.py | ||
| inference_lstm_op_test.py | ||
| net_name_test.py | ||
| python_protobuf_test.py | ||