Skip to content

Latest commit

 

History

History
65 lines (45 loc) · 1.78 KB

guidelines.md

File metadata and controls

65 lines (45 loc) · 1.78 KB

Using flags in official models

  1. All common flags must be incorporated in the models.

    Common flags (i.e. batch_size, model_dir, etc.) are provided by various flag definition functions, and channeled through official.utils.flags.core. For instance to define common supervised learning parameters one could use the following code:

    from absl import app as absl_app
    from absl import flags
    
    from official.utils.flags import core as flags_core
    
    
    def define_flags():
      flags_core.define_base()
      flags.adopt_key_flags(flags_core)
    
    
    def main(_):
      flags_obj = flags.FLAGS
      print(flags_obj)
    
    
    if __name__ == "__main__"
      absl_app.run(main)
    
  2. Validate flag values.

    See the Validators section for implementation details.

    Validators in the official model repo should not access the file system, such as verifying that files exist, due to the strict ordering requirements.

  3. Flag values should not be mutated.

    Instead of mutating flag values, use getter functions to return the desired values. An example getter function is get_tf_dtype function below:

    # Map string to TensorFlow dtype
    DTYPE_MAP = {
        "fp16": tf.float16,
        "fp32": tf.float32,
    }
    
    def get_tf_dtype(flags_obj):
      if getattr(flags_obj, "fp16_implementation", None) == "graph_rewrite":
        # If the graph_rewrite is used, we build the graph with fp32, and let the
        # graph rewrite change ops to fp16.
        return tf.float32
      return DTYPE_MAP[flags_obj.dtype]
    
    
    def main(_):
      flags_obj = flags.FLAGS()
    
      # Do not mutate flags_obj
      # if flags_obj.fp16_implementation == "graph_rewrite":
      #   flags_obj.dtype = "float32" # Don't do this
    
      print(get_tf_dtype(flags_obj))
      ...