
# 创建训练作业
#### 示例代码
在ModelArts Notebook平台，Session鉴权无需输入鉴权参数。其它平台的Session鉴权请参见[Session鉴权](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0123.html)。
![](https://support.huaweicloud.com/sdkreference-modelarts/public_sys-resources/note_3.0-zh-cn.png)
ModelArts SDK不支持通过在AI Gallery中订阅的算法创建训练作业。
- 示例一：**提交常用框架训练作业**
  Estimator中同时指定framework_type和framework_version，会提交一个常用框架训练作业。
  ```
  from modelarts.session import Session
  from modelarts.train_params import TrainingFiles
  from modelarts.train_params import OutputData
  from modelarts.train_params import InputData
  from modelarts.estimatorV2 import Estimator
  session = Session()
  #训练脚本里接收的参数，请根据实际情况填写
  parameters = [{"name": "mod", "value":"gpu"}, 
                {"name": "epoc_num", "value":2}]
  estimator = Estimator(session=session,
                        training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                        outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                        parameters=parameters,
                        framework_type='PyTorch',                      # 常用框架类型
                        framework_version='PyTorch-1.4.0-python3.6',   # 常用框架版本
                        train_instance_type="modelarts.p3.large.public",
                        train_instance_count=1,
                        log_url="obs://bucket_name/log/",
                        env_variables={"USER_ENV_VAR": "customize environment variable"},
                        working_dir="/home/ma-user/modelarts/user-job-dir",
                        local_code_dir="/home/ma-user/modelarts/user-job-dir",
                        job_description='This is a image net train job')
  job_instance = estimator.fit(inputs=[InputData(obs_path="obs://bucket_name/input/", name="data_url")],
                               job_name="job_name_1")
  ```
  

- 示例二：**提交自定义镜像训练作业**
  Estimator中同时指定user_image_url和user_command，会提交自定义镜像训练作业，并使用自定义启动命令来启动训练任务。
  ![](https://support.huaweicloud.com/sdkreference-modelarts/public_sys-resources/note_3.0-zh-cn.png)
  旧版SDK不支持企业版SWR创建训练作业，如有需要请参考API或[新版SDK](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_sdk_0002.html#ZH-CN_TOPIC_0000002645274670__zh-cn_topic_0000002675314231_title192mcpsimp)创建训练作业。
  ```
  from modelarts.session import Session
  from modelarts.train_params import TrainingFiles
  from modelarts.train_params import OutputData
  from modelarts.train_params import InputData
  from modelarts.estimatorV2 import Estimator
  session = Session()
  #训练脚本里接收的参数，请根据实际情况填写
  parameters = [{"name": "mod", "value":"gpu"}, 
                {"name": "epoc_num", "value":2}]
  estimator = Estimator(session=session,
                        training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                        outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                        parameters=parameters,
                        user_image_url="sdk-test/pytorch1_4:1.0.1",     # 自定义镜像地址
                        user_command="/home/ma-user/anaconda3/envs/PyTorch-1.4/bin/python /home/ma-user/modelarts/user-job-dir/train/test-pytorch.py",  # 自定义启动命令
                        train_instance_type="modelarts.p3.large.public",
                        train_instance_count=1,
                        log_url="obs://bucket_name/log/",
                        env_variables={"USER_ENV_VAR": "customize environment variable"},
                        working_dir="/home/ma-user/modelarts/user-job-dir",
                        local_code_dir="/home/ma-user/modelarts/user-job-dir",
                        job_description='This is a image net train job')
  job_instance = estimator.fit(inputs=[InputData(obs_path="obs://bucket_name/input/", name="data_url")],
                               job_name="job_name_2")
  ```
  

- 示例三：**向专属资源池提交训练作业**
  ```
  from modelarts.session import Session
  from modelarts.train_params import TrainingFiles
  from modelarts.train_params import OutputData
  from modelarts.train_params import InputData
  from modelarts.estimatorV2 import Estimator
  session = Session()
  #训练脚本里接收的参数，请根据实际情况填写
  parameters = [{"name": "mod", "value":"gpu"}, 
                {"name": "epoc_num", "value":2}]
  estimator = Estimator(session=session,
                        training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                        outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                        parameters=parameters,
                        framework_type='PyTorch',                       
                        framework_version='PyTorch-1.4.0-python3.6',    
                        pool_id="your pool id",                                 # 专属资源池id
                        train_instance_type="modelarts.pool.visual.xlarge",     # 专属池的虚拟子规格
                        train_instance_count=1,
                        log_url="obs://bucket_name/log/",
                        env_variables={"USER_ENV_VAR": "customize environment variable"},
                        working_dir="/home/ma-user/modelarts/user-job-dir",
                        local_code_dir="/home/ma-user/modelarts/user-job-dir",
                        job_description='This is a image net train job')
  job_instance = estimator.fit(inputs=[InputData(obs_path="obs://bucket_name/input/", name="data_url")],
                               job_name="job_name_3")
  ```
  

- 示例四：**使用数据集创建训练作业**
  ```
  from modelarts.session import Session
  from modelarts.train_params import TrainingFiles
  from modelarts.train_params import OutputData
  from modelarts.train_params import InputData
  from modelarts.estimatorV2 import Estimator
  session = Session()
  #训练脚本里接收的参数，请根据实际情况填写
  parameters = [{"name": "model_name", "value":"s"}, 
                {"name": "batch-size", "value": 32},
                {"name": "epochs", "value":100},
                {"name": "img-size", "value":"640,640"} ]
  estimator = Estimator(session=session,
                        training_files=TrainingFiles(code_dir= "obs://bucket_name/code_dir/", boot_file="boot_file.py"),
                        outputs=[OutputData(obs_path="obs://bucket_name/output/", name="output_dir")],
                        parameters=parameters,
                        framework_type='PyTorch',                       # 常用框架类型
                        framework_version='PyTorch-1.4.0-python3.6',    # 常用框架版本
                        train_instance_type="modelarts.p3.large.public",
                        train_instance_count=1,
                        log_url="obs://bucket_name/log/",
                        working_dir="/home/ma-user/modelarts/user-job-dir",
                        local_code_dir="/home/ma-user/modelarts/user-job-dir",
                        job_description='This is a image net train job')
  job_instance = estimator.fit(dataset_id="your dataset id",
                               dataset_version_id="your dataset version id",
                               job_name="job_name_5")
  ```
  
 
#### 参数说明
表1Estimator请求参数说明 
| 参数                   | 是否必选 | 类型                                                                                | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| session              | 是    | Object                                                                            | 会话对象，初始化方法请参考[Session鉴权](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0123.html)。                                                                                                                                                                                                                                                                                                                                                                                          |
| training_files       | 否    | [TrainingFiles] Object         | 训练脚本在OBS中的路径，具体请参考[TrainingFiles初始化]。                                                                                                                                                                                                                                                                                                                                                                                                          |
| outputs              | 否    | Array of [OutputData] objects | 训练的输出位置信息，具体请参考[OutputData初始化]。                                                                                                                                                                                                                                                                                                                                                                                                               |
| parameters           | 否    | JSON Array                                                                        | 训练任务的运行参数。格式为 \[{"name":"your name", "value": "your value"}\]，value的值可以是string，也可以是int。                                                                                                                                                                                                                                                                                                                                                           |
| train_instance_type  | 是    | String                                                                            | 训练作业选择的资源规格，请参考[查询资源规格列表](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0431.html)                                                                                                                                                                                                                                                                                                                                                                                          |
| train_instance_count | 是    | int                                                                               | 训练作业计算节点个数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| framework_type       | 否    | String                                                                            | 训练作业选择的引擎规格，请参考[查询引擎规格列表](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0432.html)。                                                                                                                                                                                                                                                                                                                                                                                         |
| framework_version    | 否    | String                                                                            | 训练作业选择的引擎版本，请参考[查询引擎规格列表](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0432.html)。                                                                                                                                                                                                                                                                                                                                                                                         |
| user_image_url       | 否    | String                                                                            | 自定义镜像训练作业的自定义镜像的SWR-URL。 **注意：**不支持企业版SWR地址。                                                                                                                                                                                                                                                                                                                                                                                                       |
| user_command         | 否    | String                                                                            | 自定义镜像训练作业的启动命令。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| log_url              | 否    | String                                                                            | 训练作业日志的保存位置，是一个OBS路径，如"obs://xx/yy/zz/"。                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| local_code_dir       | 否    | String                                                                            | 算法的代码目录下载到训练容器内的本地路径。规则： - 必须为/home下的目录。  - v1兼容模式下，当前字段不生效。  - 当code_dir以file://为前缀时，当前字段不生效。   |
| working_dir          | 否    | String                                                                            | 运行算法时所在的工作目录。规则：v1兼容模式下，当前字段不生效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| job_description      | 否    | String                                                                            | 训练作业的描述。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| volumes              | 否    | JSON Array                                                                        | 训练作业挂载卷信息，格式参考： \[{ "nfs": { "local_path": "/xx/yy/zz", "read_only": False, "nfs_server_path": "xxx.xxx.xxx.xxx:/" } }\]                                |
| env_variables        | 否    | Dict                                                                              | 训练作业的环境变量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| pool_id              | 否    | String                                                                            | 训练作业选择的资源池ID。可在ModelArts管理控制台，单击左侧"专属资源池"，在专属资源池列表中查看资源池ID。                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
 表2TrainingFiles初始化参数说明 
| 参数        | 是否必选 | 类型     | 描述                                                                                 |
|:---|:---|:---|:---|
| code_dir  | 是    | String | 训练作业的代码目录，是一个OBS路径，需要以"obs:/"开头，如"obs://xx/yy/"。                                   |
| boot_file | 是    | String | 训练作业的代码启动文件，需要在代码目录下，可填写相对路径，如"boot_file.py"，也可填写绝对路径，如"obs://xx/yy/boot_file.py"。 |
   
 表3OutputData初始化参数说明 
| 参数       | 是否必选 | 类型     | 描述                          |
|:---|:---|:---|:---|
| obs_path | 是    | String | 数据实际输出到OBS的路径。              |
| name     | 是    | String | 输出数据的关键字参数名称，如"output_dir"。 |
   
表4fit请求参数说明 
| 参数                 | 是否必选 | 类型                                                                              | 描述                                                                                                                                               |
|:---|:---|:---|:---|
| inputs             | 否    | Array of [InputData] Object | 保存在OBS中的训练作业输入数据。inputs和(dataset_id, dataset_version_id)两者不可同时出现。                                                                                |
| wait               | 否    | Boolean                                                                         | 是否等待训练作业结束，默认为False。                                                                                                                             |
| job_name           | 否    | String                                                                          | 训练作业名称。                                                                                                                                          |
| show_log           | 否    | Boolean                                                                         | 作业提交成功后，是否输出训练作业的日志，默认为False。                                                                                                                    |
| dataset_id         | 否    | String                                                                          | 训练作业的数据集ID，可参考[数据管理](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0325.html)获取。需要与dataset_version_id同时出现，但是不可与inputs同时出现。 |
| dataset_version_id | 否    | String                                                                          | 训练作业的数据集版本ID，可参考[数据管理](https://support.huaweicloud.com/sdkreference-modelarts/modelarts_04_0325.html)获取。需要与dataset_id同时出现，但是不可与inputs同时出现。       |
   
 表5InputData初始化参数说明 
| 参数       | 是否必选 | 类型     | 描述                               |
|:---|:---|:---|:---|
| obs_path | 是    | String | 训练作业需要的数据集OBS路径，如"obs://xx/yy/"。 |
| name     | 是    | String | 输入数据的关键字参数名称，如"data_url"。        |
   
表6训练作业创建成功响应说明 
| 参数          | 类型     | 描述                                                                     |
|:---|:---|:---|
| TrainingJob | Object | 训练对象，该对象包含job_id等属性，对训练作业的查询、更新、删除等操作时，可通过job_instance.job_id获取训练作业ID。 |
   
表7调用训练接口失败响应参数 
| 参数             | 类型     | 描述                                                                                                    |
|:---|:---|:---|
| error_msg      | String | 调用失败时的错误信息，调用成功时无此字段。                                                                                 |
| error_code     | String | 调用失败时的错误码，具体请参见[错误码](https://support.huaweicloud.com/api-modelarts/modelarts_03_0095.html)，调用成功时无此字段。 |
| error_solution | String | 调用失败时的提示解决信息，调用成功时无此字段。                                                                               |
   
