View source on GitHub
|
Represents a (possibly partial) specification for a TensorFlow device.
tf.DeviceSpec(
job=None, replica=None, task=None, device_type=None, device_index=None
)
DeviceSpecs are used throughout TensorFlow to describe where state is stored
and computations occur. Using DeviceSpec allows you to parse device spec
strings to verify their validity, merge them or compose them programmatically.
# 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
DeviceSpecs 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:
job: string. Optional job name.replica: int. Optional replica index.task: int. Optional task 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.device_indexdevice_typejobreplicatask__eq____eq__(
other
)
Checks if the other DeviceSpec is same as the current instance, eg have
same value for all the internal fields.
other: Another DeviceSpecReturn True if other is also a DeviceSpec instance and has same value
as the current instance.
Return False otherwise.
from_string@classmethod
from_string(
spec
)
Construct a DeviceSpec from a string.
spec: a string of the form
/job:A DeviceSpec.
make_merged_specmake_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")
dev: a DeviceSpecA new DeviceSpec which combines self and dev
parse_from_stringparse_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:
# 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):
...
Will work in 1.x and 2.x (though deprecated in 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):
...
Will NOT work in 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):
...
In general, DeviceSpec.from_string should completely replace
DeviceSpec.parse_from_string, and DeviceSpec.replace should
completely replace setting attributes directly.
spec: an optional string of the form
/job:The DeviceSpec.
ValueError: if the spec was not valid.replacereplace(
**kwargs
)
Convenience method for making a new DeviceSpec by overriding fields.
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: This method takes the same args as the DeviceSpec constructorA DeviceSpec with the fields specified in kwargs overridden.
to_stringto_string()
Return a string representation of this DeviceSpec.
a string of the form
/job: