Spec-Zone.ru › TensorFlow

tf.distribute.experimental.rpc.Client

Класс Client для вызова RPC на сервере.

Методы

call

Посмотреть исходный код

call(
    method_name: str,
    args: Optional[Sequence[core_tf_types.Tensor]] = None,
    output_specs=None,
    timeout_in_ms=0
)

Метод для выполнения вызовов RPC на удалённом сервере.

Этот метод вызывает RPC на сервере и удалённо выполняет зарегистрированный метод method_name. Аргументы: method_name: зарегистрированный удалённый метод для вызова args: список аргументов для зарегистрированного метода. output_specs: спецификации выходных данных метода. Например, если tf.function имеет вид: @tf.function(input_signature=[ tf.TensorSpec([], tf.int32), tf.TensorSpec([], tf.int32) ]) def multiply_fn(a, b): return tf.math.multiply(a, b) output_spec имеет вид: tf.TensorSpec((), tf.int32) Если у вас есть доступ к TF Function, спецификации выходных данных можно получить из tf.function с помощью вызова: output_specs = tf.nest.map_structure(tf.type_spec_from_value, tf_function.get_concrete_function().structured_outputs Если output_specs не указаны, в ответе будет возвращён уплощённый список тензоров. timeout_in_ms: время ожидания для этого вызова. Если значение равно 0, будет использоваться время ожидания клиента по умолчанию.

Возвращает
Экземпляр класса StatusOrResult со следующими доступными методами.
  • is_ok(): Возвращает True, если вызов RPC выполнен успешно.
  • get_error(): Возвращает error_code и сообщение об ошибке TF для вызова RPC.
  • get_value(): Возвращает значение, полученное в результате удалённого выполнения функции TF при успешном вызове RPC.

Вызов любого из перечисленных выше методов блокирует выполнение до завершения RPC и получения результата.

create

Посмотреть исходный код

@staticmethod
create(
    rpc_layer, address, name='', timeout_in_ms=0
)

Создаёт клиент TF RPC для подключения к указанному адресу.

Аргументы
rpc_layer Уровень взаимодействия между клиентом и сервером. В настоящее время поддерживается только уровень RPC "grpc".
address Адрес сервера, к которому подключается клиент RPC.
name Имя клиента RPC. Можно создать несколько клиентов, подключённых к одному серверу, и различать их по разным именам.
timeout_in_ms Время ожидания по умолчанию для исходящих вызовов RPC от клиента. Значение 0 означает отсутствие времени ожидания. Превышение времени ожидания во время вызова RPC приведёт к ошибке DeadlineExceeded.
Возвращает
Экземпляр tf.distribute.experimental.rpc.Client со следующими динамически добавляемыми методами для клиентов, созданных в режиме eager:
  • Registered methods например, multiply(**args): если Client создан при выполнении в режиме eager, клиент запросит у сервера список зарегистрированных методов во время создания. В созданный экземпляр Client будут динамически добавлены вспомогательные методы для вызовов RPC.

    Например, если на сервере зарегистрирован метод "multiply", у объекта клиента, созданного в режиме eager, будет доступен метод 'multiply'. Пользователи могут вызывать client.multiply(..) для выполнения RPC вместо client.call("multiply", ...)

    Методы "call" и "multiply" являются неблокирующими, то есть возвращают объект StatusOrResult, который следует использовать для ожидания получения значения или ошибки.

    Кроме того, в экземпляр клиента динамически добавляются блокирующие версии зарегистрированных методов, например multiply_blocking(**args). Эти методы блокируют выполнение до завершения RPC и возвращают ответ в случае успешного вызова RPC. В противном случае они вызывают исключение.

    Эти методы недоступны, если Client создан внутри tf.function.

Вызывает исключения
ValueError, если используется rpc_layer, отличный от "grpc". В настоящее время поддерживается только GRPC. В режиме eager возникает исключение DeadlineExceeded, если при создании клиента и получении списка его методов превышено время ожидания.
Пример использования
>>> # Have server already started.
>>> import portpicker
>>> @tf.function(input_signature=[
...      tf.TensorSpec([], tf.int32),
...      tf.TensorSpec([], tf.int32)])
... def remote_fn(a, b):
...   return tf.add(a, b)
port = portpicker.pick_unused_port()
address = "localhost:{}".format(port)
server = tf.distribute.experimental.rpc.Server.create("grpc", address)
server.register("addition", remote_fn)
server.start()
# Start client
client = tf.distribute.experimental.rpc.Client.create("grpc",
     address=address, name="test_client")
a = tf.constant(2, dtype=tf.int32)
b = tf.constant(3, dtype=tf.int32)
result = client.call(
   args=[a, b],
   method_name="addition",
   output_specs=tf.TensorSpec((), tf.int32))
if result.is_ok():
  result.get_value()
result = client.addition(a, b)
if result.is_ok():
  result.get_value()
value = client.addition_blocking(a, b)

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/distribute/experimental/rpc/Client

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API