Esempio n. 1
0
def test_uid_patterns():
    valid_experts = [
        "expert.1", "expert.0", "expert.0.0.1", "expert.1337",
        "ffn.12.34.56.78.90", "transformer.3.2.1.0", "transformer_encoder.2",
        "transformer::encoder.2", "T®@nsf0rmE®🤗.321", "🤗.321", "0.1.2",
        "00.1.2", "7070.3.2.1.0", "block2.1.23", "LAYER.1.0.1"
    ]
    valid_prefixes = [
        "expert.", "e.1.", "e.2.", "e.1.2.3.", "ololo.123.456.789.10."
    ]
    valid_prefixes.extend([f"{uid}." for uid in valid_experts])
    valid_prefixes.extend([split_uid(uid)[0] for uid in valid_experts])
    for uid in valid_experts:
        assert is_valid_uid(
            uid), f"UID {uid} is valid, but was perceived as invalid"
    for pfx in valid_prefixes:
        assert is_valid_prefix(
            pfx), f"Prefix {pfx} is valid, but was perceived as invalid"

    invalid = [
        "", ".", "expert.-1", "xxx.a", "expert.1x", "expert_ffn.1.abc1",
        "some.123.01", "expert.123.01", "e1", "e..1", "e", "e.1.2.3..4",
        "ffn.1..1", ".123", ".1.2.3.", ".expert", "transformer.encoder.2",
        "T®@nsf0rmE®.🤗.321", "layer::123", "expert.0.1.2.suffix",
        "0.1.2.suffix", "expert.1 something", "expert.1\n", "expert.1\n2",
        "expert.1 ", "expert.1\nexpert.2", "'expert.1'", '"expert.1"'
    ]
    invalid_experts = invalid + valid_prefixes + ["0", "123456"]
    invalid_prefixes = invalid + valid_experts + ["expert", ".🤗", ".expert"]
    for uid in invalid_experts:
        assert not is_valid_uid(
            uid), f"UID {uid} is not valid, but was perceived as valid"
    for pfx in invalid_prefixes:
        assert not is_valid_prefix(
            pfx), f"Prefix {pfx} is not valid, but was perceived as valid"
Esempio n. 2
0
 def get_active_successors(
     self,
     prefixes: List[ExpertPrefix],
     grid_size: Optional[int] = None,
     return_future: bool = False
 ) -> Dict[ExpertPrefix, Dict[Coordinate, UidEndpoint]]:
     """
     :param prefixes: a list of prefix for which to find active successor uids
     :param grid_size: if specified, only return successors if ther are in range [0, grid_size)
     :param return_future: if False (default), find and return successors. Otherwise return MPFuture and fill later.
     :returns: for every expert, return a dict{active_next_coordinate: (matching_expert_uid, matching_endpoint)}
     :note: if a prefix is not found, get_active_successors will return an empty dictionary for that prefix
     """
     assert not isinstance(
         prefixes, str), "Please send a list / tuple of expert prefixes."
     for prefix in prefixes:
         assert is_valid_prefix(
             prefix
         ), f"prefix '{prefix}' is invalid, it must follow {PREFIX_PATTERN.pattern}"
     return self.dht.run_coroutine(partial(
         self._get_active_successors,
         prefixes=list(prefixes),
         grid_size=grid_size,
         negative_caching=self.negative_caching,
         num_workers=self.num_workers),
                                   return_future=return_future)
Esempio n. 3
0
 def __init__(self,
              dht: DHT,
              uid_prefix: ExpertPrefix,
              grid_size: Optional[Tuple[int, ...]] = None,
              num_workers: Optional[int] = None,
              negative_caching: bool = True,
              **kwargs):
     if not uid_prefix.endswith(UID_DELIMITER):
         uid_prefix += UID_DELIMITER
         logger.info(
             f"Prefix must end with '{UID_DELIMITER}'. Changing to {uid_prefix}{UID_DELIMITER}"
         )
     assert is_valid_prefix(
         uid_prefix), f"Prefix '{uid_prefix}' is invalid."
     self.dht = dht
     self.uid_prefix, self.grid_size = uid_prefix, grid_size
     self.negative_caching, self.num_workers, self.dht_kwargs = negative_caching, num_workers, kwargs
Esempio n. 4
0
 def __init__(self,
              dht: DHT,
              uid_prefix: ExpertPrefix,
              grid_size: Sequence[int],
              num_workers: Optional[int] = None,
              negative_caching: bool = True,
              cache_expiration: DHTExpiration = 300,
              **kwargs):
     if not uid_prefix.endswith(UID_DELIMITER):
         uid_prefix += UID_DELIMITER
         logger.info(
             f"Prefix must end with '{UID_DELIMITER}'. Changing to {uid_prefix}{UID_DELIMITER}"
         )
     assert is_valid_prefix(
         uid_prefix), f"Prefix '{uid_prefix}' is invalid."
     self.dht = dht
     self.uid_prefix, self.grid_size = uid_prefix, grid_size
     self.total_grid_size = sum(grid_size)
     self.negative_caching, self.cache_expiration = negative_caching, cache_expiration
     self.num_workers, self.dht_kwargs = num_workers, kwargs