Tensoflow API筆記(N) 設備指定

    tf.device是tf.Graph.device()的一個包裝,是一個用於指定新建立的操做(operation)的默認設備的環境管理器。參數爲device_name_or_function,能夠傳入一個設備字符串或者環境操做函數,如tf.DeviceSpec。
    
  •     不過,若是傳入的是一個設備名稱字符串,那麼在此環境中構造的全部操做都將被分配給帶有該名稱的設備,除非被其餘嵌套的設備環境(其餘的tf.device)所覆蓋。
  •     若是傳入的是一個函數,它將被看成一個從操做對象到設備名稱字符串的函數,並在每次建立新操做時調用它。操做將被分配給帶有返回名稱的設備。
  •     若是是None,全部的來自代碼段上下文的設備調用將被忽略。
 
 1 with g.device('/device:GPU:0'):
 2     # All operations constructed in this context will be placed
 3     # on GPU 0.
 4 with g.device(None):
 5     # All operations constructed in this context will have no
 6     # assigned device.
 7  
 8 # Defines a function from `Operation` to device string.
 9 def matmul_on_gpu(n):
10     if n.type == "MatMul":
11         return "/device:GPU:0"
12     else:
13         return "/cpu:0"
14  
15 with g.device(matmul_on_gpu):
16     # All operations of type "MatMul" constructed in this context
17     # will be placed on GPU 0; all other operations will be placed
18     # on CPU 0.

 

    另外,API文檔也警告說:
    設備範圍可能被op包裝器或其餘庫代碼覆蓋。例如,變量賦值操做v .assign()必須與tf.Variable變量v一塊兒使用,若是變量v和不兼容的設備嵌套將被忽略。
 
    tf.DeviceSpec返回的是部分或者所有的設備指定,在整個graph中來描述狀態存儲和計算髮生的位置,而且容許解析設備規範的字符串,以驗證它們的有效性、合併它們或以編碼方式組合它們。
 1 # Place the operations on device "GPU:0" in the "ps" job.
 2 device_spec = DeviceSpec(job="ps", device_type="GPU", device_index=0)
 3 with tf.device(device_spec):
 4     # Both my_var and squared_var will be placed on /job:ps/device:GPU:0.
 5     my_var = tf.Variable(..., name="my_variable")
 6     squared_var = tf.square(my_var)
 7     若是一個DeviceSpec被部分指定,將根據定義的範圍與其餘DeviceSpecs合併,在內部內定義的DeviceSpec組件優先於在外層內定義的組件。
 8 with tf.device(DeviceSpec(job="train", )):
 9     with tf.device(DeviceSpec(job="ps", device_type="GPU", device_index=0):
10         # Nodes created here will be assigned to /job:ps/device:GPU:0.
11     with tf.device(DeviceSpec(device_type="GPU", device_index=1):
12         # Nodes created here will be assigned to /job:train/device:GPU:1.

 

 
參數:
  • Job: 做業名稱
  • Replica: 用於複製job的索引.
  • Task: 任務索引.
  • Device type: 設備類型 ("CPU" or "GPU").
  • Device index: 設備索引,若是未指定,則能夠使用任意的設備。
方法
from_string:
    接收一個以下形式的字符串:
         /job:/replica:/task:/device:CPU
         /job:/replica:/task:/device:GPU
    其中CPU和GPU是互相排斥的,用於
merge_from:
    將另一個「DeviceSpec」的屬性合併到當前DeviceSpec中。
parse_from_string:
    將DeviceSpec名稱(字符串)解析爲組件。
to_string:
    返回DeviceSpec的字符串。
相關文章
相關標籤/搜索