热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【进阶篇】命令行参数使用案例

导语本周起将推送【使用指南—进阶篇】推文。在进阶篇,我们将向您介绍PaddlePaddle的使用说明、开发标准、模型配置等内容。在使用进阶篇推文之前,请

导语

本周起将推送【使用指南—进阶篇】推文。在进阶篇,我们将向您介绍PaddlePaddle的使用说明、开发标准、模型配置等内容。在使用进阶篇推文之前,请参考安装与编译部分推文完成PaddlePaddle的安装

本周推文目录如下:

周一:【进阶篇】命令行参数细节描述

周二:【进阶篇】命令行参数使用案例

周三:【进阶篇】在不同的集群框架下完成分布式训练

周四:【进阶篇】编译 PaddlePaddle 预测库

周五:【进阶篇】C-API 使用流程

编写|PaddlePaddle

排版|wangp

 1 

本地训练

本地训练的实验,诸如图像分类,自然语言处理等,通常都会使用下面这些命令行参数

paddle train \

  --use_gpu=1/0 \                       

#1:GPU,0:CPU(默认为1)

  --config=network_config \

  --save_dir=output \

  --trainer_count=COUNT \               

 #(默认为1)

  --test_period=M \                      

#(默认为0) 

  --num_passes=N \                     

  #(默认为100)

  --log_period=K \                       

#(默认为100)

  --dot_period=1000 \                   

 #(默认为1)

  #[--show_parameter_stats_period=100] \ 

#(默认为0)

  #[--saving_period_by_batches=200] \    

#(默认为0)

根据你的任务,可以选择是否使用参数show_parameter_stats_period 和saving_period_by_batches

1) 将命令参数传给网络配置

config_args是一个很有用的参数,用于将参数传递给网络配置:

--config_args=generating=1,beam_size=5,

layer_num=10 \

get_config_arg可用于在网络配置中解析这些参数,如下所示:

generating = get_config_arg('generating', bool, False)

beam_size = get_config_arg('beam_size',int, 3)

layer_num = get_config_arg('layer_num', int, 8)

get_config_arg:

get_config_arg(name, type, default_value)

---name: --config_args中指定的名字

---type: 值类型,包括bool, int, str, float等

---default_value: 默认值

2) 使用模型初始化网络

增加如下参数:

--init_model_path=model_path

--load_missing_parameter_strategy=rand

 2 

本地测试

方法一:

paddle train --job=test \

             --use_gpu=1/0 \ 

             --config=network_config \

             --trainer_count=COUNT \ 

             --init_model_path=model_path \

---使用init_model_path指定测试的模型

---只能测试单个模型

方法二:

paddle train --job=test \

             --use_gpu=1/0 \ 

             --config=network_config \

             --trainer_count=COUNT \ 

             --model_list=model.list \

---使用model_list指定测试的模型列表

---可以测试多个模型,文件model.list如下所示:

./alexnet_pass1

./alexnet_pass2

方法三:

paddle train --job=test \

             --use_gpu=1/0 \

             --config=network_config \

             --trainer_count=COUNT \

             --save_dir=model \

             --test_pass=M \

             --num_passes=N \

这种方式必须使用Paddle存储的模型路径格式,如:model/pass-%5d。测试的模型包括从第M轮到第N-1轮存储的所有模型。例如,M=12,N=14这种写法将会测试模型model/pass-00012 和 model/pass-00013

 3 

稀疏训练

当输入是维度很高的稀疏数据时,通常使用稀疏训练来加速计算过程。例如,输入数据的字典维数是1百万,但是每个样本仅包含几个词。在Paddle中,稀疏矩阵的乘积应用于前向传播过程,而稀疏更新在反向传播之后的权重更新时进行

1) 本地训练

用户需要在网络配置中指定sparse_update=True。请参照网络配置的文档了解更详细的信息

2) 集群训练

在集群上训练一个稀疏模型需要加上下面的参数。同时用户需要在网络配置中指定sparse_remote_update

=True。请参照网络配置的文档了解更详细的信息

--ports_num_for_sparse=1   

 #(默认为0)

 4 

parallel_nn

用户可以设置parallel_nn来混合使用GPU和CPU计算网络层的参数。也就是说,你可以将网络配置成某些层使用GPU计算,而其他层使用CPU计算。另一种方式是将网络层划分到不同的GPU上去计算,这样可以减小GPU内存,或者采用并行计算来加速某些层的更新

如果你想使用这些特性,你需要在网络配置中指定设备的ID号(表示为deviceId),并且加上下面的命令行参数:

--parallel_nn=true

案例一:GPU和CPU混合使用

请看下面的例子:

#command line:

paddle train --use_gpu=true --parallel_nn=true trainer_count=COUNT

default_device(0)

fc1=fc_layer(...)

fc2=fc_layer(...)

fc3=fc_layer(...,layer_attr=ExtraAttr(device=-1))

default_device(0): 设置默认设备号为0。这意味着除了指定device=-1的层之外,其他所有层都会使用GPU计算,每层使用的GPU号依赖于参数trainer_count和gpu_id(默认为0)。在此,fc1和fc2层在GPU上计算

device=-1: fc3层使用CPU计算

    

trainer_count:

---trainer_count=1: 如果未设置gpu_id,那么fc1和fc2层将会使用第1个GPU来计算。否则使用gpu_id指定的GPU

---trainer_count>1: 在trainer_count个GPU上使用数据并行来计算某一层。例如,trainer_count=2意味着0号和1号GPU将会使用数据并行来计算fc1和fc2层

案例二:在不同设备上指定层

#command line:

paddle train --use_gpu=true --parallel_nn=true --trainer_count=COUNT

#network:

fc2=fc_layer(input=l1, layer_attr=ExtraAttr(device=0), ...)

fc3=fc_layer(input=l1, layer_attr=ExtraAttr(device=1), ...)

fc4=fc_layer(input=fc2, layer_attr=ExtraAttr(device=-1), ...)

在本例中,我们假设一台机器上有4个GPU

trainer_count=1:

---使用0号GPU计算fc2层

---使用1号GPU计算fc3层

---使用CPU计算fc4层

trainer_count=2:

---使用0号和1号GPU计算fc2层。

---使用2号和3号GPU计算fc3层。

---使用CPU两线程计算fc4层。

trainer_count=4:

---运行失败(注意到我们已经假设机器上有4个GPU),因为参数allow_only_one_model_on_one_gpu默认设置为真

当device!=-1时设备ID号的分配:

(deviceId + gpu_id + threadId * numLogicalDevices_) % numDevices_

deviceId:              在层中指定

gpu_id:                 默认为0

threadId:              线程ID号,范围: 0,1,..., trainer_count-1

numDevices_:      机器的设备(GPU)数目

numLogicalDevices_:   min(max(deviceId + 1), numDevices_)

*原创贴,版权所有,未经许可,禁止转载

*值班小Paddle:wangp

*欢迎在留言区分享您的观点


推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有