tf.DeviceSpec
Представляет (возможно, частичную) спецификацию устройства TensorFlow.
tf.DeviceSpec(
job=None, replica=None, task=None, device_type=None, device_index=None
)
DeviceSpec используются в TensorFlow для описания того, где хранится состояние и выполняются вычисления. С помощью DeviceSpec можно анализировать строки спецификаций устройств, проверять их корректность, объединять их или создавать программно.
Пример:
# Place the operations on device "GPU:0" in the "ps" job. device_spec = DeviceSpec(job="ps", device_type="GPU", device_index=0) with tf.device(device_spec.to_string()): # Both my_var and squared_var will be placed on /job:ps/device:GPU:0. my_var = tf.Variable(..., name="my_variable") squared_var = tf.square(my_var)
При отключенном eager execution (по умолчанию в TensorFlow 1.x и при вызове disable_eager_execution() в TensorFlow 2.x) можно использовать следующий синтаксис:
tf.compat.v1.disable_eager_execution() # Same as previous device_spec = DeviceSpec(job="ps", device_type="GPU", device_index=0) # No need of .to_string() method. with tf.device(device_spec): my_var = tf.Variable(..., name="my_variable") squared_var = tf.square(my_var)
Если DeviceSpec задана частично, она будет объединена с другими DeviceSpec в соответствии с областью видимости, в которой она определена. Компоненты DeviceSpec, определенные во внутренних областях видимости, имеют приоритет над компонентами, определенными во внешних областях.
gpu0_spec = DeviceSpec(job="ps", device_type="GPU", device_index=0)
with tf.device(DeviceSpec(job="train").to_string()):
with tf.device(gpu0_spec.to_string()):
# Nodes created here will be assigned to /job:ps/device:GPU:0.
with tf.device(DeviceSpec(device_type="GPU", device_index=1).to_string()):
# Nodes created here will be assigned to /job:train/device:GPU:1.
DeviceSpec состоит из 5 компонентов, каждый из которых указывается по желанию:
- Задание: имя задания.
- Реплика: индекс реплики.
- Задача: индекс задачи.
- Тип устройства: строка с типом устройства (например, "CPU" или "GPU").
- Индекс устройства: индекс устройства.
| Аргументы | |
|---|---|
job | строка. Необязательное имя задания. |
replica | int. Необязательный индекс реплики. |
task | int. Необязательный индекс задачи. |
device_type | Необязательная строка с типом устройства (например, "CPU" или "GPU") |
device_index | int. Необязательный индекс устройства. Если он не указан, устройство представляет собой «любое» устройство с индексом device_index. |
| Атрибуты | |
|---|---|
device_index | |
device_type | |
job | |
replica | |
task | |
Методы
from_string
@classmethod
from_string(
spec
)
Создает DeviceSpec из строки.
| Аргументы | |
|---|---|
spec | строка вида /job: |
| Возвращает | |
|---|---|
| Объект DeviceSpec. |
make_merged_spec
make_merged_spec(
dev
)
Возвращает новую спецификацию DeviceSpec, включающую dev.
При объединении спецификаций dev будет иметь приоритет над текущей спецификацией. Например:
first_spec = tf.DeviceSpec(job=0, device_type="CPU") second_spec = tf.DeviceSpec(device_type="GPU") combined_spec = first_spec.make_merged_spec(second_spec)
эквивалентно следующему:
combined_spec = tf.DeviceSpec(job=0, device_type="GPU")
| Аргументы | |
|---|---|
dev | объект DeviceSpec |
| Возвращает | |
|---|---|
Новую DeviceSpec, объединяющую self и dev |
parse_from_string
parse_from_string(
spec
)
Разбирает имя DeviceSpec на составляющие.
Изменение поведения в версии 2.x:
В TensorFlow 1.x эта функция изменяет собственное состояние и возвращает себя. В версии 2.x объекты DeviceSpec неизменяемы, поэтому функция возвращает DeviceSpec, содержащий спецификацию.
-
Рекомендуется:
# my_spec and my_updated_spec are unrelated. my_spec = tf.DeviceSpec.from_string("/CPU:0") my_updated_spec = tf.DeviceSpec.from_string("/GPU:0") with tf.device(my_updated_spec): ... -
Работает в версиях 1.x и 2.x (хотя в версии 2.x считается устаревшим):
my_spec = tf.DeviceSpec.from_string("/CPU:0") my_updated_spec = my_spec.parse_from_string("/GPU:0") with tf.device(my_updated_spec): ... -
НЕ работает в версии 2.x:
my_spec = tf.DeviceSpec.from_string("/CPU:0") my_spec.parse_from_string("/GPU:0") # <== Will not update my_spec with tf.device(my_spec): ...
В целом, DeviceSpec.from_string должна полностью заменить DeviceSpec.parse_from_string, а DeviceSpec.replace должна полностью заменить прямое присваивание атрибутам.
| Аргументы | |
|---|---|
spec | необязательная строка вида /job: |
| Возвращает | |
|---|---|
Объект DeviceSpec. |
| Вызывает исключение | |
|---|---|
ValueError | если спецификация некорректна. |
replace
replace(
**kwargs
)
Вспомогательный метод для создания новой спецификации DeviceSpec с переопределением полей.
Например:
my_spec = DeviceSpec=(job="my_job", device="CPU") my_updated_spec = my_spec.replace(device="GPU") my_other_spec = my_spec.replace(device=None)
| Аргументы | |
|---|---|
**kwargs | Этот метод принимает те же аргументы, что и конструктор DeviceSpec. |
| Возвращает | |
|---|---|
| Объект DeviceSpec, в котором переопределены поля, указанные в kwargs. |
to_string
to_string()
Возвращает строковое представление этой DeviceSpec.
| Возвращает | |
|---|---|
| строку вида /job: |
__eq__
__eq__(
other
)
Проверяет, совпадает ли other DeviceSpec с текущим экземпляром, то есть имеют ли они
одинаковые значения всех внутренних полей.
| Аргументы | |
|---|---|
other | Другой объект DeviceSpec |
| Возвращает | |
|---|---|
Возвращает True, если other также является экземпляром DeviceSpec и имеет те же значения, что и текущий экземпляр. В противном случае возвращает False. |
© 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/DeviceSpec