NPU标注
自动驾驶标注流程包含前处理、3D推理、2D推理、后处理等多个步骤,如果NPU可以处理全部标注流程,则可将标注方案称为NPU标注。
如果标注所有流程均可使用NPU执行,则可以在任务yaml文件中指定流程均运行在NPU上,如下的data-label-workflow-npu.yaml文件可作为标注编排的参考。
data-label-workflow-npu.yaml如下:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: workflow-name # workflow的名字,根据实际情况修改 namespace: default spec: dnsPolicy: ClusterFirstWithHostNet # DNS 解析策略:优先使用集群 DNS,但结合主机网络 hostNetwork: true # 使用主机网络命名空间 entrypoint: task-steps parallelism: 300 # 并发度限制 schedulerName: volcano podGC: strategy: OnPodCompletion # Pod完成后的垃圾回收策略,Pod完成后立即删除 volumes: - name: data-pvc-volume # 声明挂载远端存储的PVC persistentVolumeClaim: claimName: pvc-test # 对应的pvc-test与CCE上配置的PVC名称相同 - name: ascend-driver # 声明驱动,保持不动 hostPath: path: /usr/local/Ascend/driver - name: ascend-add-ons # 声明驱动,保持不动 hostPath: path: /usr/local/Ascend/add-ons - name: hccn # 声明hccn配置,保持不动 hostPath: path: /etc/hccn.conf - name: rclone-conf # 声明rclone conf secret: secretName: rclone-test - emptyDir: medium: Memory sizeLimit: 20Gi name: shm-vol # 挂载该共享内存,该内存大小需要根据实际情况调整,避免出现共享内存错误 ttlStrategy: secondsAfterCompletion: 600 # 完成后 600 秒自动清理 templates: - name: task-steps # 主流程入口 steps: - - name: parallel-run-label # 并行执行步骤名 template: label-dag # 引用的子模板 arguments: parameters: - name: snippet-name # 输入参数,此处的snippet-name仅做示例,实际参数根据实际的标注业务进行 value: "{{item.snippet-name}}" withItems: # 并行执行的Pod,可拓展多个Pod,多套输入参数即对应多个pod - snippet-name: snippet-name-item - name: label-dag inputs: parameters: - name: snippet-name dag: tasks: - name: data-label-task template: data-label-template arguments: parameters: - name: snippet-name value: "{{inputs.parameters.snippet-name}}" - name: data-label-template # 数据标注处理模板 inputs: artifacts: - mode: 511 name: autolabel-script path: /root/autolabel-run.sh raw: data: |- #! /bin/bash # 在这里实现具体的标注流程脚本逻辑,此处以yolov7为例,将模型放到model_path对应的路径,将数据放置到image_folder_path对应的路径 cd /home/ma-user/infer_turbo/models/yolov7 || { echo "切换目录失败"; exit 1; } # 执行标注脚本 python gpu_version/label.py \ --image_folder_path=/home/ma-user/yolov7/val2017 \ --model_path=/home/ma-user/yolov7/output_model.mindir parameters: - name: snippet-name retryStrategy: limit: 2 # 重试策略,指定最多重试2次 retryPolicy: Always container: name: data-label-container image: swr.cn-east-4.myhuaweicloud.com/data-lable:v1.0 # 该镜像以实际上传的为准 command: ["/bin/sh", "-c"] args: - | /root/autolabel-run.sh resources: limits: memory: 50Gi # 限制的内存大小需要大于等于请求的内存大小 huawei.com/ascend-1980: '1' # 请求一整卡 requests: memory: 50Gi # 请求50G内存,内存大小和输入数据量有关,应根据实际数据进行调整 huawei.com/ascend-1980: '1' # 请求一整卡 volumeMounts: - name: data-pvc-volume # 根据需要选择是否需要挂载PVC,若不需要挂载,可删除或注释 mountPath: /home/vol # 挂载远端存储 pvc到容器/home/vol - mountPath: /root/config/rclone.conf # 挂载rclone.conf name: rclone-conf readOnly: true subPath: rclone.conf - mountPath: /dev/shm # 挂载共享内存 name: shm-vol - name: ascend-driver # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/driver - name: ascend-add-ons # 驱动挂载,保持不动 mountPath: /usr/local/Ascend/add-ons - name: hccn # 驱动hccn配置,保持不动 mountPath: /etc/hccn.conf securityContext: # 使用特权容器,建议先打开以调通流程 privileged: true nodeSelector: test: npu-node # 指定NPU调度,该节点标签需要在CCE集群上添加,可以指定任何名称的标签,其中test为标签的key,npu-node为标签的value activeDeadlineSeconds: 86400 # 设置该模板步骤的最大执行时间限制为86400秒(1天)
完成上述yaml文件编写后,参考如下步骤提交Argo作业进行验证。其中第4步可以选择上传yaml文件或将yaml文件内容复制到JSON/YAML位置处,最后单击“CREATE”提交,即可开始标注流程。


查看标注结果
当标注完成后,可从OBS中导入数据到客户的标注可视化平台或者其他工具中,进行标注结果的分析和确认。