提交 382356ea 编写于 作者: T Tao Luo 提交者: GitHub

Merge pull request #998 from CrossLee1/develop

add translation for cmd_parameter
# 参数概述
虽然Paddle看起来包含了众多参数,但是大部分参数是为开发者提供的,或者已经在集群提交环境中自动设置,因此用户并不需要关心它们。在此,根据这些参数的使用场合,我们将它们划分为不同的类别。例如,`通用`类别中的参数可用于所有场合。某些参数只可用于特定的层中,而有些参数需要在集群多机训练中使用等。
<html>
<table border="2" frame="border">
<thead>
<tr>
<th scope="col" class="left"></th>
<th scope="col" class="left">参数</th>
<th scope="col" class="left">本地训练</th>
<th scope="col" class="left">集群训练</th>
<th scope="col" class="left">本地测试</th>
<th scope="col" class="left">集群测试</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left" rowspan="9">通用</td>
<td class="left">job</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">use_gpu</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">local</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">config</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">config_args</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">num_passes</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">trainer_count</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">version</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">show_layer_stat</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan="15">训练</td><td class="left">dot_period</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">test_period</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">saving_period</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">show_parameter_stats_period</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">init_model_path</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">load_missing_parameter_strategy</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">saving_period_by_batches</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">use_old_updater</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">enable_grad_share</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">grad_share_block_num</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">log_error_clipping</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">log_clipping</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">save_only_one</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">allow_inefficient_sparse_update</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">start_pass</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">训练/测试</td><td class="left">save_dir</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "2">训练过程中测试</td><td class="left">test_period</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">average_test_period</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "5">测试</td><td class="left">model_list</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">test_wait</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">test_pass</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">predict_output_dir</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">distribute_test</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">Auc/正负对验证(PnpairValidation)</td><td class="left">predict_file</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "6">GPU</td><td class="left">gpu_id</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">parallel_nn</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">allow_only_one_model_on_one_gpu</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">cudnn_dir</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">cuda_dir</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">cudnn_conv_workspace_limit_in_mb</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "4">递归神经网络(RNN)</td>
<td class="left">beam_size</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">rnn_use_batch</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">prev_batch_state</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">diy_beam_search_prob_so</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "2">度量学习(metric learning)</td><td class="left">external</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">data_server_port</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "16">参数服务器(PServer)</td><td class="left">start_pserver</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">pservers</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">port</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">port_num</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">ports_num_for_sparse</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">nics</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">rdma_tcp</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">small_messages</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">loadsave_parameters_in_pserver</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">log_period_server</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">pserver_num_threads</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">sock_send_buf_size</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">sock_recv_buf_size</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">num_gradient_servers</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">parameter_block_size</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">parameter_block_size_for_sparse</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "3">异步随机梯度下降(Async SGD)</td><td class="left">async_count</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">async_lagged_ratio_min</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">async_lagged_ratio_default</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "8">性能调优(Performance Tuning)</td><td class="left">log_barrier_abstract</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">log_barrier_lowest_nodes</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">log_barrier_show_log</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">check_sparse_distribution_batches</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">check_sparse_distribution_ratio</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">check_sparse_distribution_unbalance_degree</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">check_sparse_distribution_in_pserver</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">show_check_sparse_distribution_log</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">数据提供器(Data Provider)</td><td class="left">memory_threshold_on_load_data</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left" rowspan = "2">随机数</td><td class="left">seed</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">thread_local_rand_use_global_seed</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">单元测试</td><td class="left">checkgrad_eps</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
<tr>
<td class="left">矩阵/向量</td><td class="left">enable_parallel_vector</td>
<td class="left"></td><td class="left"></td><td class="left"></td><td class="left"></td>
</tr>
</tbody>
</table>
</html>
# 细节描述
## 通用
* `--job`
- 工作模式,包括: **train, test, checkgrad**,其中checkgrad主要为开发者使用,使用者不需要关心。
- 类型: string (默认: train)
* `--config`
- 用于指定网络配置文件。
- 类型: string (默认: null).
* `--use_gpu`
- 训练过程是否使用GPU,设置为true使用GPU模式,否则使用CPU模式。
- 类型: bool (默认: 1).
* `--local`
 - 训练过程是否为本地模式,设置为true使用本地训练或者使用集群上的一个节点,否则使用多机训练。
- 类型: bool (默认: 1).
* `--trainer_count`
- 指定一台机器上使用的线程数。例如,trainer_count = 4, 意思是在GPU模式下使用4个GPU,或者在CPU模式下使用4个线程。每个线程(或GPU)分配到当前数据块样本数的四分之一。也就是说,如果在训练配置中设置batch_size为512,每个线程分配到128个样本用于训练。
- 类型: int32 (默认: 1).
* `--num_passes`
- 当模式为`--job=train`时, 该参数的意思是训练num_passes轮。每轮会将数据集中的所有训练样本使用一次。当模式为`--job=test`时,意思是使用第test_pass个模型到第 num_passes-1 个模型测试数据。
- 类型: int32 (默认: 100).
* `--config_args`
- 传递给配置文件的参数。格式: key1=value1,key2=value2.
- 类型: string (默认: null).
* `--version`
- 是否打印版本信息。
- 类型: bool (默认: 0).
* `--show_layer_stat`
- 是否显示**每个批次数据**中每层的数值统计.
- 类型: bool (默认: 0).
## 训练
* `--log_period`
- 每log_period个批次打印日志进度.
- 类型: int32 (默认: 100).
* `--dot_period`
- 每dot_period个批次输出符号'.'.
- 类型: int32 (默认: 1).
* `--saving_period`
- 每saving_period轮保存训练参数.
- 类型: int32 (默认: 1).
* `--save_dir`
- 保存模型参数的目录,需要明确指定,但不需要提前创建。
- 类型: string (默认: null).
* `--start_pass`
- 从start_pass轮开始训练,会加载上一轮的参数。
- 类型: int32 (默认: 0).
* `--show_parameter_stats_period`
- 在训练过程中每show_parameter_stats_period个批次输出参数统计。默认不显示。
- 类型: int32 (默认: 0).
* `--save_only_one`
- 只保存最后一轮的参数,而之前的参数将会被删除。
- 类型: bool (默认: 0).
* `--load_missing_parameter_strategy`
- 当模型参数不存在时,指定加载的方式。目前支持fail/rand/zero三种操作.
- `fail`: 程序直接退出.
- `rand`: 根据网络配置中的**initial\_strategy**采用均匀分布或者高斯分布初始化。均匀分布的范围是: **[mean - std, mean + std]**, 其中mean和std是训练配置中的参数.
- `zero`: 所有参数置为零.
- 类型: string (默认: fail).
* `--init_model_path`
- 初始化模型的路径。如果设置该参数,start\_pass将不起作用。同样也可以在测试模式中指定模型路径。
- 类型: string (默认: null).
* `--saving_period_by_batches`
- 在一轮中每saving_period_by_batches个批次保存一次参数。
- 类型: int32 (默认: 0).
* `--log_error_clipping`
- 当在网络层配置中设置**error_clipping_threshold**时,该参数指示是否打印错误截断日志。如果为true,**每批次**的反向传播将会打印日志信息。该截断会影响**输出的梯度**.
- 类型: bool (默认: 0).
* `--log_clipping`
- 当在训练配置中设置**gradient_clipping_threshold**时,该参数指示是否打印日志截断信息。该截断会影响**权重更新的梯度**.
- 类型: bool (默认: 0).
* `--use_old_updater`
- 是否使用旧的RemoteParameterUpdater。 默认使用ConcurrentRemoteParameterUpdater,主要为开发者使用,使用者通常无需关心.
- 类型: bool (默认: 0).
* `--enable_grad_share`
- 启用梯度参数的阈值,在多CPU训练时共享该参数.
- 类型: int32 (默认: 100 \* 1024 \* 1024).
* `--grad_share_block_num`
- 梯度参数的分块数目,在多CPU训练时共享该参数.
- 类型: int32 (默认: 64).
## 测试
* `--test_pass`
- 加载test_pass轮的模型用于测试.
- 类型: int32 (默认: -1).
* `--test_period`
- 如果为0,每轮结束时对所有测试数据进行测试;如果不为0,每test_period个批次对所有测试数据进行测试.
- 类型: int32 (默认: 0).
* `--test_wait`
- 指示当指定轮的测试模型不存在时,是否需要等待该轮模型参数。如果在训练期间同时发起另外一个进程进行测试,可以使用该参数.
- 类型: bool (默认: 0).
* `--model_list`
- 测试时指定的存储模型列表的文件.
- 类型: string (默认: "", null).
* `--predict_output_dir`
- 保存网络层输出结果的目录。该参数在网络配置的Outputs()中指定,默认为null,意思是不保存结果。在测试阶段,如果你想要保存某些层的特征图,请指定该目录。需要注意的是,网络层的输出是经过激活函数之后的值.
- 类型: string (默认: "", null).
* `--average_test_period`
- 使用`average_test_period`个批次的参数平均值进行测试。该参数必须能被FLAGS_log_period整除,默认为0,意思是不使用平均参数执行测试.
- 类型: int32 (默认: 0).
* `--distribute_test`
- 在分布式环境中测试,将多台机器的测试结果合并.
- 类型: bool (默认: 0).
* `--predict_file`
- 保存预测结果的文件名。该参数默认为null,意思是不保存结果。目前该参数仅用于AucValidationLayer和PnpairValidationLayer层,每轮都会保存预测结果.
- 类型: string (默认: "", null).
## GPU
* `--gpu_id`
- 指示使用哪个GPU核.
- 类型: int32 (默认: 0).
* `--allow_only_one_model_on_one_gpu`
- 如果为true,一个GPU设备上不允许配置多个模型.
- 类型: bool (默认: 1).
* `--parallel_nn`
- 指示是否使用多线程来计算一个神经网络。如果为false,设置gpu_id指定使用哪个GPU核(训练配置中的设备属性将会无效)。如果为true,GPU核在训练配置中指定(gpu_id无效).
- 类型: bool (默认: 0).
* `--cudnn_dir`
- 选择路径来动态加载NVIDIA CuDNN库,例如,/usr/local/cuda/lib64. [默认]: LD_LIBRARY_PATH
- 类型: string (默认: "", null)
* `--cuda_dir`
- 选择路径来动态加载NVIDIA CUDA库,例如,/usr/local/cuda/lib64. [默认]: LD_LIBRARY_PATH
- 类型: string (默认: "", null)
* `--cudnn_conv_workspace_limit_in_mb`
- 指定cuDNN的最大工作空间容限,单位是MB,默认为4096MB=4GB.
- 类型: int32 (默认: 4096MB=4GB)
## 自然语言处理(NLP): RNN/LSTM/GRU
* `--rnn_use_batch`
- 指示在简单的RecurrentLayer层的计算中是否使用批处理方法.
- 类型: bool (默认: 0).
* `--prev_batch_state`
- 标识是否为连续的batch计算.
- 类型: bool (默认: 0).
* `--beam_size`
- 集束搜索使用广度优先搜索的方式构建查找树。在树的每一层上,都会产生当前层状态的所有继承结果,按启发式损失的大小递增排序。然而,每层上只能保存固定数目个最好的状态,该数目是提前定义好的,称之为集束大小.
- 类型: int32 (默认: 1).
* `--diy_beam_search_prob_so`
 - 用户可以自定义beam search的方法,编译成动态库,供PaddlePaddle加载。 该参数用于指定动态库路径.
- 类型: string (默认: "", null).
## 度量学习(Metric Learning)
* `--external`
- 指示是否使用外部机器进行度量学习.
- 类型: bool (默认: 0).
* `--data_server_port`
- 数据服务器(data server)的监听端口,主要用在度量学习中.
- 类型: int32 (默认: 21134).
## 数据支持(DataProvider)
* `--memory_threshold_on_load_data`
- 内存容限阈值,当超过该阈值时,停止加载数据.
- 类型: double (默认: 1.0).
## 单元测试
* `--checkgrad_eps`
- 使用checkgrad模式时的参数变化大小.
- 类型: double (默认: 1e-05).
## 参数服务器和分布式通信
* `--start_pserver`
- 指示是否开启参数服务器(parameter server).
- 类型: bool (默认: 0).
* `--pservers`
- 参数服务器的IP地址,以逗号间隔.
- 类型: string (默认: "127.0.0.1").
* `--port`
- 参数服务器的监听端口.
- 类型: int32 (默认: 20134).
* `--ports_num`
- 发送参数的端口号,根据默认端口号递增.
- 类型: int32 (默认: 1).
* `--trainer_id`
 - 在分布式训练中,每个训练节点必须指定一个唯一的id号,从0到num_trainers-1。0号训练节点是主训练节点。使用者无需关心这个参数.
- 类型: int32 (默认: 0).
* `--num_gradient_servers`
- 梯度服务器的数量,该参数在集群提交环境中自动设置.
- 类型: int32 (默认: 1).
* `--small_messages`
- 如果消息数据太小,建议将该参数设为true,启动快速应答,无延迟.
- 类型: bool (默认: 0).
* `--sock_send_buf_size`
- 限制套接字发送缓冲区的大小。如果仔细设置的话,可以有效减小网络的阻塞.
- 类型: int32 (默认: 1024 \* 1024 \* 40).
* `--sock_recv_buf_size`
- 限制套接字接收缓冲区的大小.
- 类型: int32 (默认: 1024 \* 1024 \* 40).
* `--parameter_block_size`
- 参数服务器的参数分块大小。如果未设置,将会自动计算出一个合适的值.
- 类型: int32 (默认: 0).
* `--parameter_block_size_for_sparse`
- 参数服务器稀疏更新的参数分块大小。如果未设置,将会自动计算出一个合适的值.
- 类型: int32 (默认: 0).
* `--log_period_server`
- 在参数服务器终端每log_period_server个批次打印日志进度.
- 类型: int32 (默认: 500).
* `--loadsave_parameters_in_pserver`
- 在参数服务器上加载和保存参数,只有当设置了sparse_remote_update参数时才有效.
- 类型: bool (默认: 0).
* `--pserver_num_threads`
- 同步执行操作的线程数.
- 类型: bool (默认: 1).
* `--ports_num_for_sparse`
- 发送参数的端口号,根据默认值递增(port + ports_num),用于稀疏训练中.
- 类型: int32 (默认: 0).
* `--nics`
- 参数服务器的网络设备名称,已经在集群提交环境中完成设置.
- 类型: string (默认: "xgbe0,xgbe1").
* `--rdma_tcp`
- 使用rdma还是tcp传输协议,该参数已经在集群提交环境中完成设置.
- 类型: string (默认: "tcp").
## 异步随机梯度下降(Async SGD)
* `--async_count`
- 定义异步训练的长度,如果为0,则使用同步训练.
- 类型: int32 (默认: 0).
* `--async_lagged_ratio_min`
- 控制`config_.async_lagged_grad_discard_ratio()`的最小值.
- 类型: double (默认: 1.0).
* `--async_lagged_ratio_default`
- 如果在网络配置中未设置async_lagged_grad_discard_ratio,则使用该参数作为默认值.
- 类型: double (默认: 1.5).
## 性能调优(Performance Tuning)
* `--log_barrier_abstract`
- 如果为true,则显示阻隔性能的摘要信息.
- 类型: bool (默认: 1).
* `--log_barrier_show_log`
- 如果为true,则总会显示阻隔摘要信息,即使间隔很小.
- 类型: bool (默认: 0).
* `--log_barrier_lowest_nodes`
- 最少显示多少个节点.
- 类型: int32 (默认: 5).
* `--check_sparse_distribution_in_pserver`
- 指示是否检查所有参数服务器上的稀疏参数的分布是均匀的.
- 类型: bool (默认: 0).
* `--show_check_sparse_distribution_log`
- 指示是否显示参数服务器上的稀疏参数分布的日志细节.
- 类型: bool (默认: 0).
* `--allow_inefficient_sparse_update`
- 指示是否允许低效率的稀疏更新.
- 类型: bool (默认: 0).
* `--check_sparse_distribution_batches`
- 每运行多少个批次执行一次稀疏参数分布的检查.
- 类型: int32 (默认: 100).
* `--check_sparse_distribution_ratio`
- 如果检查到分配在不同参数服务器上的参数的分布不均匀次数大于check_sparse_distribution_ratio * check_sparse_distribution_batches次,程序停止.
- 类型: double (默认: 0.6).
* `--check_sparse_distribution_unbalance_degree`
- 不同参数服务器上数据大小的最大值与最小值的比率.
- 类型: double (默认: 2).
## 矩阵/向量/随机数
* `--enable_parallel_vector`
- 启动并行向量的阈值.
- 类型: int32 (默认: 0).
* `--seed`
- 随机数的种子。srand(time)的为0.
- 类型: int32 (默认: 1)
* `--thread_local_rand_use_global_seed`
- 是否将全局种子应用于本地线程的随机数.
- 类型: bool (默认: 0).
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
- type: bool (default: 0). - type: bool (default: 0).
* `--load_missing_parameter_strategy` * `--load_missing_parameter_strategy`
- Specify the loading operation when model file is missing. Now support fail/rand/zere three operations. - Specify the loading operation when model file is missing. Now support fail/rand/zero three operations.
- `fail`: program will exit. - `fail`: program will exit.
- `rand`: uniform or normal distribution according to **initial\_strategy** in network config. Uniform range is: **[mean - std, mean + std]**, where mean and std are configures in trainer config. - `rand`: uniform or normal distribution according to **initial\_strategy** in network config. Uniform range is: **[mean - std, mean + std]**, where mean and std are configures in trainer config.
- `zero`: all parameters are zero. - `zero`: all parameters are zero.
...@@ -118,11 +118,11 @@ ...@@ -118,11 +118,11 @@
- type: int32 (default: 0). - type: int32 (default: 0).
* `--test_wait` * `--test_wait`
- Whether to wait for parameter per pass if not exist. If set test_data_path in submitting environment of cluster, it will launch one process to perfom testing, so we need to set test_wait=1. Note that in the cluster submitting environment, this argument has been set True by default.  - Whether to wait for parameter per pass if not exist. It can be used when user launch another process to perfom testing during the training process.
- type: bool (default: 0). - type: bool (default: 0).
* `--model_list` * `--model_list`
- File that saves the model list when testing. It was set automatically when using cluster submitting environment after setting model_path. - File that saves the model list when testing.
- type: string (default: "", null). - type: string (default: "", null).
* `--predict_output_dir` * `--predict_output_dir`
...@@ -212,7 +212,7 @@ ...@@ -212,7 +212,7 @@
- type: bool (default: 0). - type: bool (default: 0).
* `--pservers` * `--pservers`
- Comma separated IP addresses of pservers. It is set automatically in cluster submitting environment. - Comma separated IP addresses of pservers.
- type: string (default: "127.0.0.1"). - type: string (default: "127.0.0.1").
* `--port` * `--port`
......
# 使用案例
## 本地训练
本地训练的实验,诸如图像分类,自然语言处理等,通常都会使用下面这些命令行参数。
```
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
```
## 本地测试
方法一:
```
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`
## 稀疏训练
当输入是维度很高的稀疏数据时,通常使用稀疏训练来加速计算过程。例如,输入数据的字典维数是1百万,但是每个样本仅包含几个词。在Paddle中,稀疏矩阵的乘积应用于前向传播过程,而稀疏更新在反向传播之后的权重更新时进行。
### 1) 本地训练
用户需要在网络配置中指定**sparse\_update=True**。请参照网络配置的文档了解更详细的信息。
### 2) 集群训练
在集群上训练一个稀疏模型需要加上下面的参数。同时用户需要在网络配置中指定**sparse\_remote\_update=True**。请参照网络配置的文档了解更详细的信息。
```
--ports_num_for_sparse=1 #(默认为0)
```
## 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_)
```
...@@ -134,14 +134,14 @@ fc2=fc_layer(...) ...@@ -134,14 +134,14 @@ fc2=fc_layer(...)
fc3=fc_layer(...,layer_attr=ExtraAttr(device=-1)) fc3=fc_layer(...,layer_attr=ExtraAttr(device=-1))
``` ```
- default_device(0): set default device ID to 0. This means that except the layers with device=-1, all layers will use a GPU, and the specific GPU used for each layer depends on trainer\_count and gpu\_id (0 by default). Here, layer l1 and l2 are computed on the GPU. - default_device(0): set default device ID to 0. This means that except the layers with device=-1, all layers will use a GPU, and the specific GPU used for each layer depends on trainer\_count and gpu\_id (0 by default). Here, layer fc1 and fc2 are computed on the GPU.
- device=-1: use the CPU for layer l3. - device=-1: use the CPU for layer fc3.
- trainer_count: - trainer_count:
- trainer_count=1: if gpu\_id is not set, then use the first GPU to compute layers l1 and l2. Otherwise use the GPU with gpu\_id. - trainer_count=1: if gpu\_id is not set, then use the first GPU to compute layers fc1 and fc2. Otherwise use the GPU with gpu\_id.
- trainer_count>1: use trainer\_count GPUs to compute one layer using data parallelism. For example, trainer\_count=2 means that GPUs 0 and 1 will use data parallelism to compute layer l1 and l2. - trainer_count>1: use trainer\_count GPUs to compute one layer using data parallelism. For example, trainer\_count=2 means that GPUs 0 and 1 will use data parallelism to compute layer fc1 and fc2.
### Case 2: Specify Layers in Different Devices ### Case 2: Specify Layers in Different Devices
...@@ -157,14 +157,14 @@ fc4=fc_layer(input=fc2, layer_attr=ExtraAttr(device=-1), ...) ...@@ -157,14 +157,14 @@ fc4=fc_layer(input=fc2, layer_attr=ExtraAttr(device=-1), ...)
In this case, we assume that there are 4 GPUs in one machine. In this case, we assume that there are 4 GPUs in one machine.
- trainer_count=1: - trainer_count=1:
- Use GPU 0 to compute layer l2. - Use GPU 0 to compute layer fc2.
- Use GPU 1 to compute layer l3. - Use GPU 1 to compute layer fc3.
- Use CPU to compute layer l4. - Use CPU to compute layer fc4.
- trainer_count=2: - trainer_count=2:
- Use GPU 0 and 1 to compute layer l2. - Use GPU 0 and 1 to compute layer fc2.
- Use GPU 2 and 3 to compute layer l3. - Use GPU 2 and 3 to compute layer fc3.
- Use CPU to compute l4 in two threads. - Use CPU to compute fc4 in two threads.
- trainer_count=4: - trainer_count=4:
- It will fail (note, we have assumed that there are 4 GPUs in machine), because argument `allow_only_one_model_on_one_gpu` is true by default. - It will fail (note, we have assumed that there are 4 GPUs in machine), because argument `allow_only_one_model_on_one_gpu` is true by default.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册