更新时间:2025-12-15 GMT+08:00
分享

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中导入数据到客户的标注可视化平台或者其他工具中,进行标注结果的分析和确认。

相关文档