昇腾社区首页
中文
注册

推理服务

建议使用普通用户进行安装运行,不建议sudo组普通用户使用sudo+“command”方式运行推理服务。

部署步骤

  1. 获取软件包。

    软件分为商用版和社区版,两者功能上无区别,区别在于下载权限和是否用于商业用途。

    社区版软件不需要申请下载权限可以直接下载,但不能用于商业用途;如果软件需要用于商业用途,请下载商用版软件,但需要申请下载权限。

    推理服务软件包内容、包名及对应场景支持参见表1。(推理服务软件包使用方法相同,以下步骤示例中的run包均可以按需替换。)

    为了防止软件包在传递过程中或存储期间被恶意篡改,下载软件包时请下载对应的数字签名文件用于完整性验证。

    在软件包下载之后,请参考《OpenPGP签名验证指南》,对下载的软件包进行PGP数字签名校验。如果校验失败,请勿使用该软件包并联系华为技术支持工程师解决。

    使用软件包安装/升级前,也需要按照上述过程,验证软件包的数字签名,确保软件包未被篡改。

    运营商客户请访问:http://support.huawei.com/carrier/digitalSignatureAction

    企业客户请访问:https://support.huawei.com/enterprise/zh/tool/software-digital-signature-openpgp-validation-tool-TL1000000054

    表1 推理服务软件包及对应适用场景

    软件包名

    软件包内容

    场景支持

    获取链接

    Ascend-mindxsdk-mxserving_{version}_{arch}.run

    基础服务框架

    自定义场景

    商用版本获取链接。(选择MindX 3.0.0版本,下载表格中对应的软件包并完成数字签名校验。)

    {version}为版本号,{arch}为操作系统架构。

    Ascend-mindxsdk-mxserving-3c_{version}_{arch}.run

    基础服务框架+3c

    自定义场景、3c应用质检算法

    Ascend-mindxsdk-mxserving-sem_{version}_{arch}.run

    基础服务框架+半导体

    自定义场景、半导体应用质检算法

    表2 MindX SDK 开发套件包

    软件包名

    软件包内容

    场景支持

    获取链接

    Ascend-mindxsdk-mxmanufacture_{version}_linux-{arch}.run

    MindX SDK 开发套件包

    -

    • 社区版本获取链接。(选择mxManufacture页签,MindX 3.0.0版本,下载表格中对应的软件包。)
    • 商用版本获取链接。(选择MindX 3.0.0版本,下载表格中对应的软件包并完成数字签名校验。)

    {version}为版本号,{arch}为操作系统架构。

  2. 对软件包进行完整性验证。

    根据软件包下载页面中提供的数字签名验证工具和软件包的数字签名,按照签名验证指南对下载的软件包进行完整性校验。

  3. 安装mxManufacture开发套件。

    参照MindX SDK mxManufacture用户指南使用命令行方式开发 > 环境准备 > 安装MindX SDK开发套件章节进行安装。

  4. 校验套件包的一致性和完整性,命令执行参见如下。
    bash Ascend-mindxsdk-mxserving_{version}_linux-{arch}.run --check

    若显示如下信息,说明套件包满足一致性和完整性。

    Verifying archive integrity...  100%   SHA256 checksums are OK. All good.
  5. 安装mxAOIService推理服务。

    增加对套件包的可执行权限。

    chmod +x Ascend-mindxsdk_mxserving_{version}-linux-{arch}.run

    进入安装包所在目录,执行以下安装命令。

    bash Ascend-mindxsdk-mxserving_{version}-linux-{arch}.run --install
    安装完毕后,进入软件包文件夹。
    cd mxAOIService
  6. 准备模型文件和训练配置文件。
    1. 将模型训练完成后获取到的om模型和训练的参数配置“train_params.config”文件,存放到“scripts/om_cfg”目录下。
      • “om_cfg”目录需用户自行创建。
      • 模型文件必须为.om结尾的OM模型且文件命名中需包含对应设备的昇腾AI处理器型号,请确保该命名含义唯一。具体命名示例参考如下:
        • ssd_mobilenetv1_fpn_best310.om:用于搭载Atlas 200/300/500 推理产品设备推理的OM模型。
        • ssd_mobilenetv1_fpn_best310P3.om:用于搭载Atlas 推理系列产品设备推理的OM模型。

      当场景为“det_cls”时,分类模型的“train_params.config”里需要检查是否包含字段“dataset_meta_info”,用于传递检测结果下发给具体分类模型信息,若没有则需手动添加,示例如下。

      "dataset_meta_info": {"source_dataset": {"labels": ["label_1","label_2"]}}
      编写“model_service_param.json”文件,存放到“scripts”目录下示例如下。
      {
      	"task_name": "assm1-2",
      	"project_list": [
      		{
      			"scene": "det", //任务类型 det异物检测
      			"project_name": "project_ssd", //任务名称
      			"model_list": [
      				{
      					"application": "det", //应用场景
      					"model_name": "SSD", //模型名称
      					"result_path": "/opt/det2" //训练生成的om和train_params.config文件夹路径
      				}
      			]
      		},
      		{
      			"scene": "seg", //图像分割
      			"project_name": "project_unet",
      			"model_list": [
      				{
      					"application": "seg",
      					"model_name": "UNET",
      					"result_path": "./scripts/om_cfg/seg"
      				}
      			]
      		},
      		{
      			"scene": "det_cls", //错漏反
      			"project_name": "project_ssd_resnet",
      			"model_list": [
      				{
      					"application": "det",
      					"model_name": "SSD",
      					"result_path": "/opt/det2"
      				},
      				{
      					"application": "cls",
      					"model_name": "ResNet50",
      					"result_path": "/opt/cls1"
      				}
      			]
      		},
      		{
      			"scene": "det_det", //检测+检测
      			"project_name": "project_yolov4_yolov4",
      			"model_list": [
      				{
      					"application": "det1",
      					"model_name": "YOLOV4",
      					"result_path": "./scripts/om_cfg/yolov4_1"
      				},
      				{
      					"application": "det2",
      					"model_name": "YOLOV4",
      					"result_path": "./scripts/om_cfg/yolov4_2"
      				}
      			]
      		},
      		{
      			"scene": "det_ocr", //检测+工业ocr
      			"project_name": "project_ssd_crnn",
      			"model_list": [
      				{
      					"application": "det",
      					"model_name": "SSD",
      					"result_path": "./scripts/om_cfg/det2"
      				},
      				{
      					"application": "crnn",
      					"model_name": "CRNN",
      					"result_path": "./scripts/om_cfg/ocr"
      				}
      			]
      		},
      		{
      			"scene": "det_seg", //检测+图像分割
      			"project_name": "project_ssd_unet",
      			"model_list": [
      				{
      					"application": "det",
      					"model_name": "SSD",
      					"result_path": "./scripts/om_cfg/det2"
      				},
      				{
      					"application": "seg",
      					"model_name": "UNET",
      					"result_path": "./scripts/om_cfg/seg"
      				}
      			]
      		},
      		{
      			"scene": "tag_paste", //标签缺陷检测
      			"project_name": "tag_paste",
      			"custom_params": {
      				"FirstDetectionFilter": "{'Type': 'Area', 'TopN': 0,'BottomN': 0,'MinArea': 0,'MaxArea': 0,'ConfThresh': 0.0}",
      				"tag_1": "big",
      				"tag_1_params": "{'edge_defect_thres_all': 20, 'edge_defect_thres_qiqiao': 40,  'shape': (1, 420, 840, 3),'physical_size': [100, 50]}"
      			},
      			"model_list": [
      				{
      					"application": "det",
      					"model_name": "yolov4",
      					"result_path": "/home/mxAOIService_CI_test_config/om_cfg_det+/yolov4"
      				},
      				{
      					"application": "tag_seg_1",
      					"model_name": "unet++",
      					"result_path": "/home/mxAOIService_CI_test_config/om_cfg_det+/unet++_big"
      				},
      				{
      					"application": "tag_cls_1",
      					"model_name": "resnet",
      					"result_path": "/home/mxAOIService_CI_test_config/om_cfg_det+/resnet50_big"
      				}
      			]
      		},
      		{
      			"scene": "wafer", //晶圆检测
      			"project_name": "project_wafer",
      			"model_list": [
      				{
      					"application": "wafer",
      					"model_name": "00201Layer3",
      					"result_path": "/home/mxAOIService/om_cfg/wafer",
      					"ref_path": "/home/mxAOIService/om_cfg/wafer/ref"
      				}
      			]
      		},
      		{
      			"scene": "det_htp", //高性能检测
      			"project_name": "project_yolov4",
      			"model_list": [
      				{
      					"application": "det",
      					"model_name": "yolov4",
      					"result_path": "./scripts/om_cfg/yolov4"
      				}
      			]
      		}
      	]
      }
    2. 执行模型和参数处理到推理服务命令参考如下。
      python3 scripts/infer_service_generation.py --model_params=./scripts/model_service_param.json
      回显示例:
      Creating directory [./config/models/project_ssd/assm1-2/1]...
      Creating directory [./config/models/project_unet/assm1-2/1]...
      Creating directory [./config/models/project_ssd_resnet/assm1-2/1]...
      Creating directory [./config/models/project_yolov4_yolov4/assm1-2/1]...
      Creating directory [./config/models/project_ssd_crnn/assm1-2/1]...
      Creating directory [./config/models/project_ssd_unet/assm1-2/1]...
    3. “infer_service_generation.py”生成的“models”文件,会自动生成在“config/models”目录下,“models”目录结构示例如下所示。
      .
      ├models
      ├── model_configs.json
      ├── project_ssd
      │   └── assm1-2
      │       └── 1
      │           ├── label_0.names
      │           ├── mindx_sdk.pipeline
      │           ├── post_process_0.cfg
      │           └── ssd_mobilenetv1_fpn_best3100.om
      ├── project_ssd_crnn
      │   └── assm1-2
      │       └── 1
      │           ├── crnn3100.om
      │           ├── label_0.names
      │           ├── label_1.names
      │           ├── mindx_sdk.pipeline
      │           ├── post_process_0.cfg
      │           ├── post_process_1.cfg
      │           └── ssd_mobilenetv1_fpn_best3100.om
      ├── project_ssd_resnet
      │   └── assm1-2
      │       └── 1
      │           ├── label_0.names
      │           ├── label_cls_0.names
      │           ├── mindx_sdk.pipeline
      │           ├── post_process_0.cfg
      │           ├── post_process_cls_0.cfg
      │           ├── resnet3100.om
      │           └── ssd_mobilenetv1_fpn_best3100.om
      ├── project_ssd_unet
      │   └── assm1-2
      │       └── 1
      │           ├── label_0.names
      │           ├── label_1.names
      │           ├── mindx_sdk.pipeline
      │           ├── post_process_0.cfg
      │           ├── post_process_1.cfg
      │           ├── ssd_mobilenetv1_fpn_best3100.om
      │           └── unet3100.om
      ├── project_unet
      │   └── assm1-2
      │       └── 1
      │           ├── label_0.names
      │           ├── mindx_sdk.pipeline
      │           ├── post_process_0.cfg
      │           └── unet_wzf3100.om
      ├── project_wafer
      │   └── assm1-2
      │       └── 1
      │           ├── 00201Layer3_3100.om
      │           ├── 00201Layer3_3101.om
      │           ├── 00201Layer3_3102.om
      │           ├── 00201Layer3_3103.om
      │           ├── mindx_sdk.pipeline
      │           └── aoi_ai_config.json
      └── project_yolov4_yolov4
          └── assm1-2
              └── 1
                  ├── label_0.names
                  ├── label_1.names
                  ├── mindx_sdk.pipeline
                  ├── post_process_0.cfg
                  ├── post_process_1.cfg
                  ├── yolov4_best3100.om
                  └── yolov4_best3101.om
  7. 启动服务,命令执行参考如下,可配置参数及说明请参见表3
    ./start.sh
    • 建议使用普通用户安装运行推理服务,不建议sudo组普通用户使用sudo+“command”方式运行推理服务。
    • 推理服务作为一个组件,需要集成到用户的系统当中使用。
    • 针对推理服务的启动、停止、异常情况下的重新启动等功能需要用户进行控制。
    • 推理服务没有重新启动的机制,重启功能需要由用户的系统来进行控制。
    表3 命令参数说明

    参数

    说明

    -d / --device_id

    设置指定ID的芯片部署推理服务。

    -i / --host

    配置推理服务的侦听IP地址,默认为“127.0.0.1”

    请根据实际网络部署情况,配置具体的IP,如配置为“0.0.0.0”会进行全网侦听,存在一定的安全风险,如果运行推理服务的服务器存在管理面、控制面、用户面划分,会破坏系统原有的隔离原则,推理服务已禁止部署服务时配置IP为“0.0.0.0”

    -p / --port

    指定端口号,默认“8888”,取值范围为 (1000, 65535]。

    -s / --https

    HTTPS 选项。

    • true,开启HTTPS服务,服务端会校验客户端(默认),无视大小写,使用HTTPS服务时需进行证书导入操作,具体操作请参见证书导入(可选)
    • false,开启HTTP服务,无视大小写。

      使用HTTP服务时,数据在网络上以明文形式传输,可能造成数据泄露,请谨慎使用。

    -u / --upload

    向第三方平台上传推理图片和结果,仅在请求中TaskType:"WithReg"模式下上传错漏反、胶体检测,默认“false”关闭。

    如果设置为“true”, 则开启上传。上传通道“http”“https”与推理服务同步。无视大小写。

    -c / --check

    是否启用芯片检查任务,默认不开启。

    该功能用于第三方集成容器场景下使用,当芯片故障,在容器内停止服务进程导致容器退出时,集成方可在容器退出后通过重新拉起容器,分配新的芯片,恢复服务。集成的推理组件没有拉起服务的功能,请勿开启该功能。(容器中会使用到“ai_server.py”名称,如需在容器中创建进程,请勿使用该名称作为进程名。)

    • true,开启芯片检查,启动定时任务调用“deadly_error_watch.sh”脚本检查芯片是否故障,如存在故障,将停止推理服务。
    • false,不启用芯片检查。

    -m / --monitor

    是否向第三方上传推理时延到prometheus的“pushgateway”端口,用于推理时延性能检测。默认“false”,关闭。如果设置为“true”,则开启上传。上传通道“http”“https”与推理服务同步。无视大小写。

    -h / --help

    打印帮助信息。

  8. 停止服务。

    推理服务可以通过以下两种方式之一来停止推理进程。

    • 在命令行中输入“Ctrl+C”组合键。
    • 通过执行以下命令关闭服务脚本。
      ./stop.sh

    “stop.sh”脚本会通过执行 kill -SIGINT ${PID} 命令关闭当前系统中进程名为“ai_server.py”的进程。请勿使用该名称作为进程名,同名进程可能产生误杀的情况。

补充说明

  • 推理服务软件包其他可选参数说明。

    可通过执行以下命令查看软件包的可选参数。

    bash Ascend-mindxsdk-mxserving_{version}-linux-{arch}.run --help
    表4 其他可选参数

    参数

    说明

    --help | -h

    输出帮助。

    --info

    打印嵌入信息。

    --list

    输出软件包的文件列表。

    --check

    检查软件包的完整性。

    --install

    安装软件包。

    --install-path=<path>

    指定安装路径。

    --version

    查看版本。

    --upgrade

    更新软件包。

  • 卸载软件包。

    若需要卸载软件包,可以执行“mxAOIService/bin/uninstall.sh”文件,命令执行参考如下。

    bash uninstall.sh

注意事项

  1. 同一环境中,不同版本的mxManufacture包不能混用。
  2. 推理服务默认启用“https”服务,服务端会校验客户端。

    推理服务所需的证书由集成的第三方提供,推理服务不对证书做管理,集成的第三方需要提供证书管理服务,包括证书生成、导入、更新、证书完整性保证、过期告警,证书吊销列表等。开发环境自验证时,可通过自签名证书进行验证,具体请参见自签名证书制作参考

  3. 当开启上传图片和推理结果功能时,需要在“~/.bashrc”文件中添加变量“APULIS_ENDPOINT”,配置上传地址。
    export APULIS_ENDPOINT="http://127.0.0.1:8889/"

    上传日志可在“logs/ai_server.log”中查看。

    当推理服务日志中出现上传告警提示“upload queue full”时,表明图片上传队列已到达最大值,后续图片会放弃上传,直到上传队列有空闲。上传队列配置过长会占用更多内存,队列默认长度为“100”,用户可根据实际需要在“config.yaml”文件中进行长度配置,参考如下。

    # Set upload queue length, only use in upload mode.
    upload_queue_length: 100
  4. 向第三方上传图片或推理时延的通道,使用“http”“https”方式与推理服务同步。
    • 当启动的推理服务为“https”时,向第三方上传的加密通道同样需为“https”,此时客户端会对第三方服务器进行单向认证。
    • 当启动推理服务为“http”时,第三方接收端URL也需为“http”形式。
    使用“https”时,上传所需的证书需要通过证书导入(可选)操作,导入到“config.yaml”文件中。
    ai_platform_http_client: 
      ca: /path/to/ca.crt
      crl: /path/to/ai_platform_http_client.crl
    http_pushgateway_client:
      ca: /path/to/pushgateway/ca.crt
      crl: /path/to/pushgateway/http_pushgateway_client.crl
    • 当第三方平台集成推理组件时,使用“http”上报会存在信息泄露的风险。
    • 使用了“https”,但不使用CA证书认证服务端,上报发送时会把校验服务端的功能关闭,有可能存在服务端伪造的风险。