Class DeviceSpec
Represents a (possibly partial) specification for a TensorFlow device.
Aliases:
- Class
tf.compat.v2.DeviceSpec
DeviceSpec
s are used throughout TensorFlow to describe where state is stored and computations occur. UsingDeviceSpec
allows you to parse device spec strings to verify their validity, merge them or compose them programmatically.
Example:
# 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)
If a DeviceSpec
is partially specified, it will be merged with other DeviceSpec
s according to the scope in which it is defined. DeviceSpec
components defined in inner scopes take precedence over those defined in outer scopes.
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.
A DeviceSpec
consists of 5 components -- each of which is optionally specified:
J
ob
:T
h
ej
o
bn
a
me
.``R
ep
li
ca
:T
h
er
e
pl
ic
ai
n
de
x.
T
as
k:
T
he
t
as
ki
n
de
x.
D
ev
ic
et
y
pe
:T
h
ed
e
vi
ce
t
yp
es
t
ri
ng
(
e.
g.
"
CP
U"
o
r"
G
PU
")
.``D
ev
ic
ei
n
de
x:
T
he
d
ev
ic
ei
n
de
x.
init
__init__(
job=None,
replica=None,
task=None,
device_type=None,
device_index=None
)
Create a new DeviceSpec
object.
Args:
job
: string. Optionaljob
name.replica
: int. Optionalreplica
index.task
: int. Optionaltask
index.device_type
: Optional device type string (e.g. "CPU" or "GPU")device_index
: int. Optional device index. If left unspecified, device represents 'any'device_index
.
Properties
device_index
device_type
job
replica
task
Methods
eq
__eq__(other)
Checks if the other
DeviceSpec is same as the current instance, eg have
same value for all the internal fields.
Args:
other
: Another
DeviceSpec
Returns:
Return True
if other
is also a DeviceSpec instance and has same value as the current instance. Return False
other
wise.
from_string
@classmethod
from_string(
cls,
spec
)
Construct a DeviceSpec
from a string.
Args:
spec
: a string of the form /job:/replica:/task:/device:CPU: or /job:/replica:/task:/device:GPU: as cpu and gpu are mutually exclusive. All entries are optional.
Returns:
A DeviceSpec.
make_merged_spec
make_merged_spec(dev)
Returns a new DeviceSpec which incorporates dev
.
When combining specs, dev
will take precidence over the current spec. So for instance:
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)
is equivalent to:
combined_spec = tf.DeviceSpec(job=0, device_type="GPU")
Args:
dev
: aDeviceSpec
Returns:
A new DeviceSpec
which combines self
and dev
parse_from_string
parse_from_string(spec)
Parse a DeviceSpec
name into its components.
2.x behavior change: In TensorFlow 1.x, this function mutates its own state and returns itself. In 2.x, DeviceSpecs are immutable, and this function will return a DeviceSpec which contains the spec.
Recommended:
Will work in 1.x and 2.x (though deprecated in 2.x):
Will NOT work in 2.x:
DeviceSpec.from_stringIn general, should completely replace DeviceSpec.parse_from_string, and DeviceSpec.replace should completely replace setting attributes directly.
Args:
spec
: an optional string of the form /job:/replica:/task:/device:CPU: or /job:/replica:/task:/device:GPU: as cpu and gpu are mutually exclusive. All entries are optional.
Returns:
The DeviceSpec
.
Raises:
ValueError
: if the spec was not valid.
replace
replace(**kwargs)
Convenience method for making a new DeviceSpec by overriding fields.
For instance:
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:
Returns:
A DeviceSpec with the fields specified in kwargs overridden.
to_string
to_string()
Return a string representation of this DeviceSpec
.
Returns:
a string of the form /job:/replica:/task:/device::.