
# 执行训练任务
#### 准备工作
确认模型权重文件、训练数据集已经上传，[准备软件包、权重、训练数据集](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910006.html)。
 #### 步骤一：生成训练command命令并修改
1. 进入调试模式。
   修改[config.yaml](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910008.html)中的${command}进行调试，本示例中使用sleep命令启动pod，便于进入pod调试。
   ```
   command: ["/bin/bash", "-c"]       
     args:   
      - sleep 1000000000000000000
   ```
   根据config.yaml创建pod。
   ```
   kubectl apply -f config.yaml
   ```
   进入容器，{pod_name}替换为实际pod名字（get pod中显示的名字），{namespace}替换为实际命名空间（默认为default）。
   ```
   kubectl exec -it {pod_name} bash -n {namespace}
   ```
   
2. 生成初始化训练yaml。生成后的yaml文件具体信息内容可以参考[参数配置说明](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910030.html)章节。
   每个容器模型训练的config配置yaml文件的生成方式分为交互式、传参式两种，建议参考以下命令使用交互式生成。
   ```
   ascendfactory-cli config  --output_file_path=<output_file_path>
   ```
   
3. 生成启动训练命令，容器中执行训练的命令如下。 初始化环境变量
   ```
   source /usr/local/Ascend/ascend-toolkit/set_env.sh
   source /usr/local/Ascend/nnal/atb/set_env.sh
   ```
   训练命令
   ```
   # 默认8卡
   ascendfactory-cli train <cfgs_yaml_file>
   # 指定设备卡数，如2卡
   ASCEND_RT_VISIBLE_DEVICES=0,1 ascendfactory-cli train <cfgs_yaml_file> 
   # 指定修改yaml中某个参数内容，如af_output_dir等值，使用超参命令传递形式：
   ASCEND_RT_VISIBLE_DEVICES=0,1 ascendfactory-cli train <cfgs_yaml_file> --af_output_dir=xxx
   ```
   - \<cfgs_yaml_file\>：yaml文件输出目录及文件名称，例如/path/to/xxx.yaml。
   
   - --超参\<key\>：参数key可参考参数详情可参考[MindSpeed-LLM](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910031.html)、[Llama-Factory](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910032.html)、[VeRL](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910033.html)、[MindSpeed-RL](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910034.html)和[MindSpeed-MM](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910036.html)根据要求选择。
     
关于容器中的${command}示例如下，修改时可参考。
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002503500635.png "点击放大")
#### 步骤二：根据config.yaml启动训练
启动作业命令如下。首先会根据config.yaml创建pod，继而在pod容器内自动启动训练作业。
```
kubectl apply -f config.yaml
```
启动后，可通过以下命令获取所有已创建的pod信息。若pod已全部启动，则状态为：Running。
```
kubectl get pod -o wide
```
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002470740676.png "点击放大")
若查看启动作业日志信息，可通过以下命令打印正在启动的日志信息。其中${pod_name}为上述pod信息中的NAME，例如vcjob-main-0。
```
kubectl logs -f ${pod_name}
```
**等待模型载入**
执行训练启动命令后，等待模型载入，当出现"training"关键字时，表示开始训练。训练过程中，训练日志会在最后的Rank节点打印。
图1等待模型载入   
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002470580688.png "点击放大")
训练完成后，生成的权重文件保存路径为：af_output_dir配置的路径
最后，请参考[训练结果输出](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_train_c_5910010.html)章节查看预训练的日志和性能。
#### 步骤三：删除config.yaml创建出的所有工作负载Pod
若要删除config.yaml创建出的所有工作负载Pod，需要先找到config.yaml所在路径，并执行以下命令。
```
kubectl delete -f config.yaml
```
