tf.DeviceSpec
| Просмотреть исходный код на GitHub |
Представляет собой (возможно, частичное) описание устройства TensorFlow.
Наследуется от: DeviceSpec
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): # 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)
Если DeviceSpec частично указано, оно будет объединено с другими DeviceSpec в соответствии с областью, в которой оно определено. DeviceSpec компоненты, определенные во внутренних областях, имеют приоритет над теми, которые определены во внешних областях.
with tf.device(DeviceSpec(job="train", )):
with tf.device(DeviceSpec(job="ps", device_type="GPU", device_index=0):
# Nodes created here will be assigned to /job:ps/device:GPU:0.
with tf.device(DeviceSpec(device_type="GPU", device_index=1):
# Nodes created here will be assigned to /job:train/device:GPU:1.
DeviceSpec состоит из 5 компонентов — каждый из которых необязательно указан:
- Job: Имя задания.
- Replica: Индекс реплики.
- Task: Индекс задачи.
- Тип устройства: Строка типа устройства (например, "CPU" или "GPU").
- Индекс устройства: Индекс устройства.
| Args | |
|---|---|
job | строка. Необязательное имя задания. |
replica | целое число. Необязательный индекс реплики. |
task | целое число. Необязательный индекс задачи. |
device_type | Необязательная строка типа устройства (например, "CPU" или "GPU") |
device_index | целое число. Необязательный индекс устройства. Если не указано, устройство представляет собой 'любой' device_index. |
| Атрибуты | |
|---|---|
device_index | |
device_type | |
job | |
replica | |
task | |
Методы
from_string
@classmethod
from_string(
spec
)
Создать DeviceSpec из строки.
| Args | |
|---|---|
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")
| Args | |
|---|---|
dev | DeviceSpec |
| Возвращает | |
|---|---|
Новый DeviceSpec, который объединяет self и dev |
merge_from
merge_from(
dev
)
Объединить свойства "dev" в этот DeviceSpec.
Примечание: Будет удалено в TensorFlow 2.x, так как DeviceSpecs станут неизменяемыми.
| Args | |
|---|---|
dev | DeviceSpec. |
parse_from_string
parse_from_string(
spec
)
Разбор имени DeviceSpec в его компоненты.
Изменение поведения в 2.x: В TensorFlow 1.x эта функция изменяет собственное состояние и возвращает себя. В 2.x DeviceSpecs являются неизменяемыми, и эта функция вернет 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 должен полностью заменить непосредственное задание атрибутов.
| Args | |
|---|---|
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)
| Args | |
|---|---|
**kwargs | Этот метод принимает те же аргументы, что и конструктор DeviceSpec |
| Возвращает | |
|---|---|
| DeviceSpec с полями, указанными в kwargs, переопределёнными. |
to_string
to_string()
Возвращает строковое представление этого DeviceSpec.
| Возвращает | |
|---|---|
| строка вида /job: |
__eq__
__eq__(
other
)
Проверяет, является ли DeviceSpec other таким же, как текущий экземпляр, т.е. имеет
одинаковое значение для всех внутренних полей.
| Args | |
|---|---|
other | Другой DeviceSpec |
| Возвращает | |
|---|---|
Вернуть True если other также является экземпляром DeviceSpec и имеет то же значение, что и текущий экземпляр. Вернуть False в противном случае. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/DeviceSpec