def test_host_hash(self): hash = host_hash() salted = host_hash('salt') empty_salted = host_hash('') self.assertNotEqual(salted, hash) self.assertEqual(empty_salted, hash)
def _task_fn(index, num_hosts, driver_addresses, settings): print("Instantiating HorovodRunTaskService: " + str(settings.nics)) task = task_service.HorovodRunTaskService(index, settings.key, settings.nics) try: driver = driver_service.HorovodRunDriverClient(driver_addresses, settings.key, settings.verbose) driver.register_task(index, task.addresses(), host_hash.host_hash()) task.wait_for_initial_registration(settings.start_timeout) # Tasks ping each other in a circular fashion to determine interfaces # reachable within the cluster. next_task_index = (index + 1) % num_hosts next_task_addresses = driver.all_task_addresses(next_task_index) # We request interface matching to weed out all the NAT'ed interfaces. next_task = task_service.HorovodRunTaskClient(next_task_index, next_task_addresses, settings.key, settings.verbose, match_intf=True, attempts=10) driver.register_task_to_task_addresses(next_task_index, next_task.addresses()) # Notify the next task that the address checks are completed. next_task.task_to_task_address_check_completed() # Wait to get a notification from previous task that its address checks # are completed as well. task.wait_for_task_to_task_address_check_finish_signal( settings.start_timeout) finally: task.shutdown()
def host_hash(salt=None): """ Computes this host's host hash by invoking horovod.runner.common.util.host_hash.host_hash. Consider environment variable CONTAINER_ID which is present when running Spark via YARN. A YARN container does not share memory with other containers on the same host, so it must be considered a `host` in the sense of the `host_hash`. :param salt: extra information to include in the hash, ignores Falsy values :return: host hash """ # turn salt into an array of a single string if given salt = [str(salt)] if salt else [] # We would violate resource allocation if we run all tasks of a host in one container. # See [issues 1497](https://github.com/horovod/horovod/issues/1497) for details. container = os.environ.get("CONTAINER_ID") if container is not None: salt.append(container) return hh.host_hash(salt='-'.join(salt))