horovod tensorflow 分布式多gpu_horovod sparse_as_dense-程序员宅基地

技术标签: DL tools  

概念
rank is your index within the entire ring, local_rank is your index within your node. For example, you have 4 nodes and 4 GPUs each node, so you spawn 16 workers. Every worker will have a rank [0, 15], and every worker will have a local_rank [0, 3]. You use local_rank for GPU pinning because there’s typically one GPU available on the node per process. It wouldn’t make sense to use rank here because rank could be 10, but you only have 4 GPUs so there is no GPU 10.

# 在其他import前引入
try:
    import horovod.tensorflow as hvd
    hvd.init()
except Exception as e:
    hvd = None
    print('no horovod')

# 打印信息
if hvd:
    tf.logging.info('Total workers: {}, local workers: {}'.format(
        hvd.size(), hvd.local_size()))
    tf.logging.info('Global rank: {}, local rank: {}'.format(
        hvd.rank(), hvd.local_rank()))

# 数据集读取配置:对数据集进行分片, 不同进程读取不同子集。
d = tf.data.TFRecordDataset(input_file)
if is_training:
    if hvd is not None:
        d = d.shard(hvd.size(), hvd.rank())
    d = d.shuffle(buffer_size=100)
    d = d.repeat()

# 加载权重配置:只对第一个rank载入权重
if init_checkpoint and is_training and (hvd is None or hvd.rank()==0):
    for init_file in init_checkpoint.split(","):
        assignment_map, tmp_init_map = get_assignment_map_from_checkpoint(tvars, init_file, extra_load_var)
        tf.train.init_from_checkpoint(init_file, assignment_map)
        initialized_variable_names.update(tmp_init_map)

# 学习率调整:
if hvd:
    learning_rate = learning_rate * hvd.size()

# 分布式优化器配置:使用 ring-allreduce 平均梯度
if hvd is not None:
    # we enable compression only for fp16
    from horovod.tensorflow.compression import Compression
    if use_fp16:
        compression = Compression.fp16
    else:
        compression = Compression.none

    optimizer = hvd.DistributedOptimizer(optimizer, sparse_as_dense=True,
                                         compression=compression)

# 配置每个进程模型迭代次数
if FLAGS.do_train:
    # train_examples = processor.get_train_examples(FLAGS.data_dir, FLAGS.img_dir)
    num_train_steps = int(
        train_num / FLAGS.train_batch_size * FLAGS.num_train_epochs)
        # len(train_examples) / FLAGS.train_batch_size * FLAGS.num_train_epochs)
    num_warmup_steps = int(num_train_steps * FLAGS.warmup_proportion)

    if hvd:
        num_train_steps = num_train_steps // hvd.size()

model_fn = model_fn_builder(
    bert_config=bert_config,
    num_labels=len(label_list),
    init_checkpoint=FLAGS.init_checkpoint,
    learning_rate=FLAGS.learning_rate,
    num_train_steps=num_train_steps,
    num_warmup_steps=num_warmup_steps)

# GPU config GPU配置:使用local rank分配当前机器上当前进程可视gpu
run_config = tf.ConfigProto()
# train_params.get('gpu_allow_growth', False)
run_config.gpu_options.allow_growth = True
run_config.allow_soft_placement = True

if hvd:
    run_config.gpu_options.visible_device_list = str(hvd.local_rank())

if FLAGS.use_xla:
    run_config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1

# checkpoint配置:只对第一个保存模型
save_checkpoints_steps = FLAGS.save_checkpoints_steps if hvd is None or hvd.rank() == 0 else None
estimator = tf.estimator.Estimator(
    model_fn=model_fn,
    model_dir=FLAGS.output_dir,
    config=tf.estimator.RunConfig(
        save_checkpoints_steps=save_checkpoints_steps,
        save_checkpoints_secs=None,
        keep_checkpoint_every_n_hours=2,
        log_step_count_steps=400,
        session_config=run_config))


# 模型训练hook配置:将变量从第一个流程向其他流程传播,以实现一致性初始化。
if FLAGS.do_train and hvd is not None:
    training_hook = [hvd.BroadcastGlobalVariablesHook(0)]
else:
    training_hook = []
estimator.train(input_fn=train_input_fn, max_steps=num_train_steps,
                hooks=training_hook)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16234613/article/details/96186398

智能推荐

WITH Clause : Subquery Factoring_subquery_factoring_clause-程序员宅基地

文章浏览阅读729次。转自:http://www.oracle-base.com/articles/misc/with-clause.php#TopWITH Clause : Subquery FactoringSubquery FactoringMATERIALIZE HintPL/SQL Declaration SectionRelated articles.WITH Cla_subquery_factoring_clause

实验:防火墙 USG V6000 的配置_华为ugs6000 配置交换机-程序员宅基地

文章浏览阅读846次。实验:防火墙 USG V6000 的配置一、ensp命令行状态下的配置(1)配置云:设置物理机VMnet1网卡ip地址为:192.168.0.2/24对云进行配置:相关配置:[USG6000V1]int g0/0/0[USG6000V1-GigabitEthernet0/0/0]service-manage http permit[USG6000V1-GigabitEthernet0/0/0]service-manage https permit(2)启动所有设备。(3)设备_华为ugs6000 配置交换机

云+X案例展 | 传播类:九州云 SD-WAN 携手上海电信,助力政企客户网络重构换新颜...-程序员宅基地

文章浏览阅读861次。戳蓝字“CSDN云计算”关注我们哦!本案例由九州云投递并参与评选,CSDN云计算独家全网首发;更多关于【云+X 案例征集】的相关信息,点击阅读原文丨挖掘展现更多优秀案例,为不同行业领域带..._sd-wan云网络 应用案例

开源啦!基于RT-Thread的百度语音识别——录音功能的实现(三)-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏7次。本期分享来自RT-Thread的社区小伙伴霹雳大乌龙,如果你也有文章愿意分享/希望获得官方的写作指导,可以发送文章/联系方式邮件至邮箱:[email protected]..._rtthread audio驱动 pipe

Twitter的用户推荐算法_twitter推荐-程序员宅基地

文章浏览阅读1w次。关于Twitter的用户推荐算法,Quora上的文章有一个说明。算法基本分4步:First and foremost, we looked at who your friends follow, who they talk to, who they RT as gauges of your interest.Then we applied either positive/negative_twitter推荐

sso saml_使用签名的SAML断言实现身份提供者发起的SSO-程序员宅基地

文章浏览阅读2.4k次。随着越来越多的机构和组织在线提供服务和协作,员工需要访问内部部署和基于云的应用程序来进行日常工作。 这就要求实现单一登录(SSO)基础结构,使用户可以登录一次即可访问所有授权的内部和外部资源及应用程序。 具有大量Salesforce用户群的组织可以利用其现有的SSO基础结构将其实施到Force.com平台,该平台支持由外部SSO身份提供商提供的联合身份管理。 Force.com平台支持SSO的..._缺少 saml 持有者断言提供者签名证书

随便推点

[软件工具][原创]使用软件实现labelme批量json_to_dataset最简单方法_修改labelme_json_to_dataset转换的颜色-程序员宅基地

文章浏览阅读978次。lableme批量转换工具可以很轻松实现将labelme标注的json文件转化为5个文件,即img.png、label.png、info.yaml、labels_name.txt以及label_viz.png。其中软件不需要安装python环境也不需要安装labelme这个软件,因为软件已经剥离labelme核心代码,全部嵌入软件功能中。大家都知道labelme的labelme_json_to_dataset都是针对单个文件转化,但是细心读代码会发现这个对于批量转化有个问题就是不同json转化的同一个目标颜_修改labelme_json_to_dataset转换的颜色

[C#][转载]如何在Ubuntu 18.04上安装Mono Mono develop_mono-dev ubuntu-程序员宅基地

文章浏览阅读578次。如何在Ubuntu 18.04上安装MonoMono是一个基于ECMA / ISO标准开发和运行跨平台应用程序的平台。它是Microsoft .NET框架的免费开源实现。本教程介绍了如何在Ubuntu 18.04上安装Mono。先决条件这些说明假定您以root用户或具有sudo特权的用户身份登录。在Ubuntu上安装Mono在Ubuntu 18.04上安装Mono的最简单和建议的方法是从Mono的存储库中安装它。这是一个相对简单的过程,只需几分钟。 首先安装必要的软件包:._mono-dev ubuntu

最快60秒完成新冠病毒核酸对比 阿里云向社会免费开放基因计算服务_新冠蛋白质序列比对-程序员宅基地

文章浏览阅读1.4k次。全球疫情肆虐,各大科技公司都在竭尽全力抗击疫情。3月13日,阿里云对外宣布,将向医疗科研机构、疾控中心等一线病毒研究机构免费开放基因计算服务,可大幅提升宏基因组测序、疫苗研发相关的处理效率,最快只需60秒即可完成新冠病毒的核酸对比工作。实时荧光定量PCR(RT-PCR)和宏基因组测序(mNGS)是目前用于确诊新型冠状病毒感染的常见方法,PCR操作流程简单、成本低,但准确率较低,mNGS虽然操作..._新冠蛋白质序列比对

cmake 链接 纯C编写的 *.a 静态库_cmake 链接.a-程序员宅基地

文章浏览阅读3.7k次。#cmake 配置if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(_lib_suffix 64)else() set(_lib_suffix 32)endif()include_directories(${CMAKE_SOURCE_DIR}/lib) find_library(XXX_LIB xxxx${_lib_suffix}.a ${C..._cmake 链接.a

沃丰科技全方位赋能智能化体验交流会武汉站:基于AI技术,助力企业数字化转型_施耐德胡慧-程序员宅基地

文章浏览阅读160次。2021年4月23日,由沃丰科技主办的“2021 沃丰科技全方位赋能智能化体验交流会”在武汉成功举行。现场座无虚席,有近百名观众参会,沃丰科技副总裁傅亮、施耐德电气质量与客户满意中心卓越运营部门经理胡慧、统信软件交付中心总监韩辉、沃丰科技产品总监方晓东、沃丰科技产品总监姚广、沃丰科技客户体验咨询专家赵庐山就如何全方位赋能企业智能化做了分享。交流会现场随着新时代新技术不断发展,越来越多的企业将数字化转型作为公司的重要战略方向,积极探索数智化赋能企业新发展的有效路径。沃丰科技多年深耕智能客户体验领域,在数_施耐德胡慧

【超详细讲解】linux安装anaconda和pytorch及常见报错_anaconda3-2021.11-linux-x86_64.sh: 516: syntax err-程序员宅基地

文章浏览阅读5.6k次,点赞12次,收藏22次。一.首先连接服务器在powershell,gitbash或者vscode的命令行中输入命令:ssh 用户名@服务器IP地址二.安装conda//获取安装包wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh//安装anaconda base命令bash Anaconda3-5.0.1-Linux-x86_64.sh//添加环境变量echo 'export PATH="~/anacond._anaconda3-2021.11-linux-x86_64.sh: 516: syntax error: "(" unexpected (expect

推荐文章

热门文章

相关标签