TensorFlow函數(shù):tf.estimator.RunConfig

2018-05-08 11:14 更新

tf.estimator.RunConfig函數(shù)

RunConfig類

定義在:tensorflow/python/estimator/run_config.py.

該類指定Estimator運行的配置.

屬性

  • cluster_spec
  • evaluation_master
  • global_id_in_cluster

    該global_id_in_cluster屬性表示訓(xùn)練集群中的全局標(biāo)識.

    訓(xùn)練集群中的所有全局ID都是從遞增的連續(xù)整數(shù)序列中分配的,第一個ID是0.

    注意:任務(wù)ID(屬性字段task_id)正在跟蹤具有SAME任務(wù)類型的所有節(jié)點中的節(jié)點索引.例如,給定集群定義如下:
    cluster = {'chief': ['host0:2222'],
               'ps': ['host1:2222', 'host2:2222'],
               'worker': ['host3:2222', 'host4:2222', 'host5:2222']}

    具有任務(wù)類型worker的節(jié)點可以具有id 0,1,2.具有任務(wù)類型ps的節(jié)點可以具有id,0,1.因此,task_id不是唯一的,但pair(task_type,task_id)可以唯一確定集群中的節(jié)點.

    全局ID即該字段正在跟蹤集群中所有節(jié)點之間的節(jié)點索引.它是唯一分配的.例如,對于上面給出的集群規(guī)范,全局id分配為:

    task_type  | task_id  |  global_id
    --------------------------------
    chief      | 0        |  0
    worker     | 0        |  1
    worker     | 1        |  2
    worker     | 2        |  3
    ps         | 0        |  4
    ps         | 1        |  5

    返回:

    一個整數(shù)ID.

  • is_chief
  • keep_checkpoint_every_n_hours
  • keep_checkpoint_max
  • log_step_count_steps
  • master
  • model_dir
  • num_ps_replicas
  • num_worker_replicas
  • save_checkpoints_secs
  • save_checkpoints_steps
  • save_summary_steps
  • service

    返回定義的平臺(在TF_CONFIG中)服務(wù)字典.

  • session_config
  • task_id
  • task_type
  • tf_random_seed

方法

__init__

__init__(
    model_dir=None,
    tf_random_seed=None,
    save_summary_steps=100,
    save_checkpoints_steps=_USE_DEFAULT,
    save_checkpoints_secs=_USE_DEFAULT,
    session_config=None,
    keep_checkpoint_max=5,
    keep_checkpoint_every_n_hours=10000,
    log_step_count_steps=100
)

該方法用于構(gòu)造一個RunConfig.

所有的分布式訓(xùn)練相關(guān)的屬性cluster_spec,is_chief,master,num_worker_replicas,num_ps_replicas,task_id和task_type都是基于 TF_CONFIG 環(huán)境變量設(shè)置的,如果相關(guān)的信息存在.TF_CONFIG環(huán)境變量是具有屬性JSON對象:cluster和task.

cluster是ClusterSpec的Python字典的JSON序列化版本,它將server_lib.py任務(wù)類型(通常是TaskType枚舉之一)映射到任務(wù)地址列表.

task有兩個屬性:type和index,其中,type可以是cluster中任何類型的任務(wù).當(dāng)TF_CONFIG包含所述信息,則在該類上設(shè)置以下屬性:

  • cluster_spec:該屬性從TF_CONFIG['cluster']解析,默認(rèn)為{},如果存在,則在cluster_spec的chief屬性中必須有且僅有一個節(jié)點.
  • task_type:設(shè)置為TF_CONFIG['task']['type'];如果cluster_spec存在,則必須設(shè)置;如果cluster_spec沒有設(shè)置,則必須是worker(默認(rèn)值).
  • task_id:設(shè)置為TF_CONFIG['task']['index'];如果cluster_spec存在,必須設(shè)置;如果cluster_spec未設(shè)置,則必須為0(默認(rèn)值).
  • master:master屬性是通過在cluster_spec中查找task_type和task_id來確定的,默認(rèn)為''.
  • num_ps_replicas:是通過計算cluster_spec的ps屬性中列出的節(jié)點數(shù)來設(shè)置的,默認(rèn)為0.
  • num_worker_replicas:是通過計算cluster_spec中的worker和chief屬性中列出的節(jié)點數(shù)來設(shè)置的,默認(rèn)為1.
  • is_chief:是基于task_type和cluster確定的.

有一個帶有task_type作為計算器的特殊節(jié)點,它不是(訓(xùn)練)cluster_spec的一部分,它處理分布式計算作業(yè).

non-chief節(jié)點的例子:

cluster = {'chief': ['host0:2222'],
           'ps': ['host1:2222', 'host2:2222'],
           'worker': ['host3:2222', 'host4:2222', 'host5:2222']}
os.environ['TF_CONFIG'] = json.dumps(
    {'cluster': cluster,
     'task': {'type': 'worker', 'index': 1}})
config = ClusterConfig()
assert config.master == 'host4:2222'
assert config.task_id == 1
assert config.num_ps_replicas == 2
assert config.num_worker_replicas == 4
assert config.cluster_spec == server_lib.ClusterSpec(cluster)
assert config.task_type == 'worker'
assert not config.is_chief

chief的例子:

cluster = {'chief': ['host0:2222'],
           'ps': ['host1:2222', 'host2:2222'],
           'worker': ['host3:2222', 'host4:2222', 'host5:2222']}
os.environ['TF_CONFIG'] = json.dumps(
    {'cluster': cluster,
     'task': {'type': 'chief', 'index': 0}})
config = ClusterConfig()
assert config.master == 'host0:2222'
assert config.task_id == 0
assert config.num_ps_replicas == 2
assert config.num_worker_replicas == 4
assert config.cluster_spec == server_lib.ClusterSpec(cluster)
assert config.task_type == 'chief'
assert config.is_chief

evaluator節(jié)點示例(evaluator不是訓(xùn)練集群的一部分):

cluster = {'chief': ['host0:2222'],
           'ps': ['host1:2222', 'host2:2222'],
           'worker': ['host3:2222', 'host4:2222', 'host5:2222']}
os.environ['TF_CONFIG'] = json.dumps(
    {'cluster': cluster,
     'task': {'type': 'evaluator', 'index': 0}})
config = ClusterConfig()
assert config.master == ''
assert config.evaluator_master == ''
assert config.task_id == 0
assert config.num_ps_replicas == 0
assert config.num_worker_replicas == 0
assert config.cluster_spec == {}
assert config.task_type == 'evaluator'
assert not config.is_chief

注意:如果save_checkpoints_steps或save_checkpoints_secs已設(shè)置,keep_checkpoint_max可能需要進行相應(yīng)調(diào)整,特別是在分布式訓(xùn)練中.例如,設(shè)置save_checkpoints_secs為60而不進行調(diào)整keep_checkpoint_max(默認(rèn)為5)會導(dǎo)致檢查點在5分鐘后被垃圾收集的情況.在分布式訓(xùn)練中,計算作業(yè)異步啟動,可能無法加載或由于競爭條件而找到檢查點.

參數(shù):

  • model_dir:保存模型參數(shù),圖表等的目錄.如果有PathLike對象,路徑將被解析;如果為None,則將使用Estimator設(shè)置的默認(rèn)值.
  • tf_random_seed:TensorFlow初始化器的隨機種子,設(shè)置此值可以實現(xiàn)重播之間的一致性.
  • save_summary_steps:每隔這么多步驟保存摘要.
  • save_checkpoints_steps:每隔這么多步驟保存檢查點,不能用save_checkpoints_secs指定.
  • save_checkpoints_secs:每隔幾秒鐘保存檢查點,不能用save_checkpoints_steps指定;如果save_checkpoints_steps和save_checkpoints_secs在構(gòu)造函數(shù)中未設(shè)置,則默認(rèn)設(shè)置為600秒;如果兩個save_checkpoints_steps和save_checkpoints_secs為None,則檢查站被禁用.
  • session_config:用于設(shè)置會話參數(shù)的ConfigProto,或None.
  • keep_checkpoint_max:要保留的最近檢查點文件的最大數(shù)量.當(dāng)新文件被創(chuàng)建時,舊文件被刪除.如果為None或0,則保留所有檢查點文件.默認(rèn)為5(也就是保留5個最近的檢查點文件.)
  • keep_checkpoint_every_n_hours:要保存的每個檢查點之間的小時數(shù);默認(rèn)值10,000小時有效地禁用該功能.
  • log_step_count_steps:在培訓(xùn)期間將記錄全局步驟/秒(global step/sec)的頻率 (以全局步驟數(shù)表示).

可能引發(fā)的異常:

  • ValueError:如果同時設(shè)置save_checkpoints_steps和save_checkpoints_secs.

replace

replace(**kwargs)

返回RunConfig的新實例替換指定屬性.

僅允許替換以下列表中的屬性:

  • model_dir
  • tf_random_seed
  • save_summary_steps
  • save_checkpoints_steps
  • save_checkpoints_secs
  • session_config
  • keep_checkpoint_max
  • keep_checkpoint_every_n_hours
  • log_step_count_steps

另外,可以設(shè)置save_checkpoints_steps或者save_checkpoints_secs(不應(yīng)該同時設(shè)置).

參數(shù):

  • **kwargs:使用新值命名屬性的關(guān)鍵字.

可能引發(fā)的異常:

  • ValueError:如果任何屬性名kwargs不存在或不允許被替換,或同時設(shè)置save_checkpoints_steps和save_checkpoints_secs.

返回值:

一個RunConfig的新的實例.

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號