# PaddleRec config.yaml配置说明

## 全局变量

 |   名称    |         类型          |                         取值                          | 是否必须 |                      作用描述                      |
 | :-------: | :-------------------: | :---------------------------------------------------: | :------: | :------------------------------------------------: |
 | workspace |        string         |      绝对路径 或 paddlerec.models.{方向}.{模型}       |    是    |           指定model/reader/data所在位置            |
 |   mode    | string / list[string] | string：单个runner的名称 / list：多个runner名称的列表 |    是    |             指定当次运行使用哪些runner             |
 |   debug   |         bool          |                     True / False                      |    否    | 当dataset.mode=QueueDataset时，开启op耗时debug功能 |



## runner变量

|             名称              |     类型     |                           取值                            | 是否必须 |                               作用描述                               |
| :---------------------------: | :----------: | :-------------------------------------------------------: | :------: | :------------------------------------------------------------------: |
|             name              |    string    |                           任意                            |    是    |                            指定runner名称                            |
|             class             |    string    | train(默认) / infer / local_cluster_train / cluster_train |    是    |           指定运行runner的类别（单机/分布式， 训练/预测）            |
|            device             |    string    |                      cpu(默认) / gpu                      |    否    |                             程序执行设备                             |
|          fleet_mode           |    string    |               ps(默认) / pslib / collective               |    否    |                            分布式运行模式                            |
|         selected_gpus         |    string    |                         "0"(默认)                         |    否    | 程序运行GPU卡号，若以"0,1"的方式指定多卡，则会默认启用collective模式 |
|          worker_num           |     int      |                          1(默认)                          |    否    |                     参数服务器模式下worker的数量                     |
|          server_num           |     int      |                          1(默认)                          |    否    |                     参数服务器模式下server的数量                     |
|      distribute_strategy      |    string    |              async(默认)/sync/half_async/geo              |    否    |                    参数服务器模式下训练模式的选择                    |
|            epochs             |     int      |                           >= 1                            |    否    |                           模型训练迭代轮数                           |
|            phases             | list[string] |                  由phase name组成的list                   |    否    |                  当前runner的训练过程列表，顺序执行                  |
|        init_model_path        |    string    |                           路径                            |    否    |                            初始化模型地址                            |
|   save_checkpoint_interval    |     int      |                           >= 1                            |    否    |                          Save参数的轮数间隔                          |
|     save_checkpoint_path      |    string    |                           路径                            |    否    |                            Save参数的地址                            |
|    save_step_interval    |     int      |                           >= 1                            |    否    |                        Step save参数的batch数间隔                        |
|      save_step_path      |    string    |                           路径                            |    否    |                           Step save参数的地址                          |
|    save_inference_interval    |     int      |                           >= 1                            |    否    |                        Save预测模型的轮数间隔                        |
|      save_inference_path      |    string    |                           路径                            |    否    |                          Save预测模型的地址                          |
| save_inference_feed_varnames  | list[string] |                 组网中指定Variable的name                  |    否    |                        预测模型的入口变量name                        |
| save_inference_fetch_varnames | list[string] |                 组网中指定Variable的name                  |    否    |                        预测模型的出口变量name                        |
|        print_interval         |     int      |                           >= 1                            |    否    |                        训练指标打印batch间隔                         |
|      instance_class_path      |    string    |                           路径                            |    否    |                     自定义instance流程实现的地址                     |
|      network_class_path       |    string    |                           路径                            |    否    |                     自定义network流程实现的地址                      |
|      startup_class_path       |    string    |                           路径                            |    否    |                     自定义startup流程实现的地址                      |
|       runner_class_path       |    string    |                           路径                            |    否    |                      自定义runner流程实现的地址                      |
|      terminal_class_path      |    string    |                           路径                            |    否    |                     自定义terminal流程实现的地址                     |
|  init_pretraining_model_path  |    string    |                           路径                            |    否    |自定义的startup流程中需要传入这个参数，finetune中需要加载的参数的地址 |
|  runner_result_dump_path  |    string    |                           路径                            |    否    | 运行中metrics的结果使用json.dump到文件的地址，若是在训练的runner中使用, 会自动加上epoch后缀 |




## phase变量

|     名称     |  类型  |     取值     | 是否必须 |            作用描述             |
| :----------: | :----: | :----------: | :------: | :-----------------------------: |
|     name     | string |     任意     |    是    |          指定phase名称          |
|    model     | string | model.py路径 |    是    | 指定Model()所在的python文件地址 |
| dataset_name | string | dataset名称  |    是    |       指定使用哪个Reader        |
|  thread_num  |  int   |     >= 1     |    否    |         模型训练线程数          |


## dataset变量

|      名称      |  类型  |           取值            | 是否必须 |            作用描述            |
| :------------: | :----: | :-----------------------: | :------: | :----------------------------: |
|      name      | string |           任意            |    是    |        指定dataset名称         |
|      type      | string | DataLoader / QueueDataset |    是    |        指定数据读取方式        |
|   batch_size   |  int   |           >= 1            |    否    |       指定批训练样本数量       |
|   data_path    | string |           路径            |    是    |        指定数据来源地址        |
| data_converter | string |       reader.py路径       |    是    | 指定Reader()所在python文件地址 |
|  sparse_slots  | string |          string           |    否    |        指定稀疏参数选项        |
|  dense_slots   | string |          string           |    否    |        指定稠密参数选项        |


## hyper_parameters变量
|          名称           |  类型  |       取值       | 是否必须 |          作用描述           |
| :---------------------: | :----: | :--------------: | :------: | :-------------------------: |
|     optimizer.class     | string | SGD/Adam/Adagrad |    是    |       指定优化器类型        |
| optimizer.learning_rate | float  |       > 0        |    否    |         指定学习率          |
|           reg           | float  |       > 0        |    否    | L2正则化参数，只在SGD下生效 |
|         others          |   /    |        /         |    /     |   由各个模型组网独立指定    |


# PaddleRec backend.yaml配置说明

## 全局变量

 |     名称     |  类型  |      取值       | 是否必须 |                     作用描述                     |
 | :----------: | :----: | :-------------: | :------: | :----------------------------------------------: |
 |   backend    | string | paddlecloud/k8s |    是    | 使用PaddleCloud平台提交，还是在公有云K8S集群提交 |
 | cluster_type | string |     mpi/k8s     |    是    |        指定运行的计算集群： mpi 还是 k8s         |

 ## config
 |          名称          |  类型  |                  取值                   | 是否必须 |                                           作用描述                                           |
 | :--------------------: | :----: | :-------------------------------------: | :------: | :------------------------------------------------------------------------------------------: |
 |     paddle_version     | string | paddle官方版本号，如1.7.2/1.8.0/1.8.3等 |    否    |                           指定运行训练使用的Paddle版本，默认1.7.2                            |
 |      use_python3       |  int   |               0（默认）/1               |    否    |                                 指定是否使用python3进行训练                                  |
 |        fs_name         | string |             "afs://xxx.com"             |    是    |                                   hdfs/afs集群名称所需配置                                   |
 |         fs_ugi         | string |                "usr,pwd"                |    是    |                                   hdfs/afs集群密钥所需配置                                   |
 |      output_path       | string |            "/user/your/path"            |    否    |                                      任务输出的远程目录                                      |
 |    train_data_path     | string |            "/user/your/path"            |    是    | mpi集群下指定训练数据路径，paddlecloud会自动将数据分片并下载到工作目录的`./train_data`文件夹 |
 |     test_data_path     | string |            "/user/your/path"            |    否    |             mpi集群下指定测试数据路径，会自动下载到工作目录的`./test_data`文件夹             |
 |    thirdparty_path     | string |            "/user/your/path"            |    否    |           mpi集群下指定thirdparty路径，会自动下载到工作目录的`./thirdparty`文件夹            |
 | afs_remote_mount_point | string |            "/user/your/path"            |    是    |                  k8s集群下指定远程路径的地址，会挂载到工作目录的`./afs/下`                   |
 
 ### config.communicator
 |                       名称                       | 类型  |      取值      | 是否必须 |                        作用描述                        |
 | :----------------------------------------------: | :---: | :------------: | :------: | :----------------------------------------------------: |
 |       FLAGS_communicator_is_sgd_optimizer        |  int  |  0（默认）/1   |    否    | 异步分布式训练时的多线程的梯度融合方式是否使用SGD模式  |
 |        FLAGS_communicator_send_queue_size        |  int  | 线程数（默认） |    否    |               分布式训练时发送队列的大小               |
 |       FLAGS_communicator_max_merge_var_num       |  int  | 线程数（默认） |    否    |        分布式训练多线程梯度融合时，线程数的配置        |
 | FLAGS_communicator_max_send_grad_num_before_recv |  int  | 线程数（默认） |    否    | 分布式训练使用独立recv参数线程时，与send的步调配置超参 |
 |       FLAGS_communicator_thread_pool_size        |  int  |   32（默认）   |    否    |        分布式训练时，多线程发送参数的线程池大小        |
 |           FLAGS_communicator_fake_rpc            |  int  |  0（默认）/1   |    否    |              分布式训练时，选择不进行通信              |
 |              FLAGS_rpc_retry_times               |  int  |    3(默认)     |    否    |            分布式训练时，GRPC的失败重试次数            |


## submit
|     名称      |  类型  |            取值             | 是否必须 |                         作用描述                         |
| :-----------: | :----: | :-------------------------: | :------: | :------------------------------------------------------: |
|      ak       | string | PaddleCloud平台提供的ak密钥 |    是    |                   paddlecloud用户配置                    |
|      sk       | string | PaddleCloud平台提供的sk密钥 |    否    |                   paddlecloud用户配置                    |
|   priority    | string |    normal/high/very_high    |    否    |                        任务优先级                        |
|   job_name    | string |            任意             |    是    |                         任务名称                         |
|     group     | string |     计算资源所在组名称      |    是    |                          组名称                          |
|   start_cmd   | string |            任意             |    是    | 启动命令，默认`python -m paddlerec.run -m ./config.yaml` |
|     files     | string |            任意             |    是    |         随任务提交上传的文件，给出相对或绝对路径         |
|     nodes     |  int   |        >=1（默认1）         |    否    |                    mpi集群下的节点数                     |
| k8s_trainers  |  int   |        >=1（默认1）         |    否    |                 k8s集群下worker的节点数                  |
| k8s_cpu_cores |  int   |        >=1（默认1）         |    否    |                 k8s集群下worker的CPU核数                 |
| k8s_gpu_card  |  int   |        >=1（默认1）         |    否    |                 k8s集群下worker的GPU卡数                 |
|  k8s_ps_num   |  int   |        >=1（默认1）         |    否    |                 k8s集群下server的节点数                  |
| k8s_ps_cores  |  int   |        >=1（默认1）         |    否    |                 k8s集群下server的CPU核数                 |
