部署写真相机在线推理服务

更新时间:2025-04-28 08:44:29

本文将指导您如何在写真相机方案中使用弹性Job服务实现推理功能,以解决资源利用不充分和缩容过程中请求中断等问题。

前提条件

  • 已创建专有网络,并配置公网连接。

    1. 已创建专有网络VPC、交换机和安全组。具体操作,请参见搭建IPv4专有网络创建安全组

    2. 已为该VPC创建了公网NAT网关,并为该网关绑定了弹性公网IP、配置了SNAT条目。具体操作,请参见使用公网NAT网关SNAT功能访问互联网

  • 已准备好5~20张训练图片和1张模板图片,用于模型训练和写真制作。图片格式支持.jpg.jpeg.png等,请确保图片的尺寸大于512×512像素。

    • 单人写真制作:模板图片中包含单张人脸,多张训练图片中的人脸属于同一个人。

    • 多人写真制作:模板图片中需包含多张人脸,且人脸数量与模型训练的model_id数量一致。

  • 已创建OSS Bucket,详情请参见创建存储空间

使用限制

仅支持在华北2(北京)和新加坡地域使用该方案。

部署推理场景弹性Job服务

部署核验服务

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 单击部署服务,然后在自定义模型部署区域,单击自定义部署

  3. 自定义部署页面,配置以下关键参数,其他参数取默认配置即可,更多参数配置说明,请参见控制台自定义部署参数说明

    • 基本信息区域,配置服务名称。例如photog_check。

    • 环境信息区域中,配置以下参数:

      参数

      描述

      参数

      描述

      部署方式

      选择镜像部署,并选中异步队列

      镜像配置

      选中镜像地址,并在文本框中输入镜像地址,取值如下:

      1. 华北2(北京)的镜像地址为:registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub

      2. 新加坡的镜像地址为:registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub

      代码配置

      选择OSS类型的挂载方式,并配置以下参数:

      1. OSS:选择您自己的OSS Bucket路径。例如oss://examplebucket/

      2. 挂载路径:配置为/photog_oss

      运行命令

      配置为python app.py

      端口号

      配置为7860。

    • 资源部署区域中,配置以下参数:

      参数

      描述

      参数

      描述

      资源类型

      选择公共资源

      部署资源

      资源规格选择GPU类型的GU30系列机型,推荐使用ml.gu7i.c32m188.1-gu30

      额外系统盘

      配置为120 GB。

    • 异步队列区域中,配置以下参数:

      参数

      描述

      参数

      描述

      资源类型

      选择公共资源

      部署资源

      • 最小实例数:1。

      • CPU(核数):8核。

      • 内存(GB):64 GB。

      单一输入请求最大数据

      配置为20480 KB。避免队列中每个请求的存储空间不足。

      单一输出返回最大数据

    • 专有网络区域中,选择已创建的VPC、交换机和安全组。

    • 服务配置区域中,添加以下配置,您可以参考下方的完整配置示例,来添加新增的参数。

      字段

      新增的参数

      字段

      新增的参数

      metadata

      增加以下参数:

      "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              }
      1. keepalive:单个请求的最长处理时间,单位为毫秒,配置为3600000。

      2. worker_threads:EAS每个实例中用于并发处理请求的线程数。

        默认为5,表示最先进入队列的前五个任务会被分配到同一个实例上。建议将该参数设置为1,这样可以确保请求按顺序排队处理。

      queue

      增加参数"max_delivery": 1,防止失败后多次重复投递。

      单击查看完整的配置示例

      {
          "metadata": {
              "name": "photog_check",
              "instance": 1,
              "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              },
              "type": "Async"
          },
          "cloud": {
              "computing": {
                  "instance_type": "ml.gu7i.c32m188.1-gu30",
                  "instances": null
              },
              "networking": {
                  "vswitch_id": "vsw-2ze4o9kww55051tf2****",
                  "security_group_id": "sg-2ze0kgiee55d0fn4****",
                  "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****"
              }
          },
          "features": {
              "eas.aliyun.com/extra-ephemeral-storage": "100Gi"
          },
          "queue": {
              "cpu": 8,
              "max_delivery": 1,
              "min_replica": 1,
              "memory": 64000,
              "resource": "",
              "source": {
                  "max_payload_size_kb": 20480
              },
              "sink": {
                  "max_payload_size_kb": 20480
              }
          },
          "storage": [
              {
                  "oss": {
                      "path": "oss://examplebucket/",
                      "readOnly": false
                  },
                  "properties": {
                      "resource_type": "code"
                  },
                  "mount_path": "/photog_oss"
              }
          ],
          "containers": [
              {
                  "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:check.1.0.0.pub",
                  "script": "python app.py",
                  "port": 7860
              }
          ]
      }
  4. 单击部署

部署训练任务

  1. 登录PAI控制台,在页面上方选择目标地域,并在右侧选择目标工作空间,然后单击进入EAS

  2. 单击部署服务,然后在自定义模型部署区域,单击自定义部署

  3. 自定义部署页面,配置以下关键参数,其他参数取默认配置即可,更多参数配置说明,请参见控制台自定义部署参数说明

    • 基本信息区域,配置服务名称。例如photog_train_pmml。

    • 环境信息区域中,配置以下参数:

      参数

      描述

      参数

      描述

      部署方式

      选择镜像部署,并选中异步队列

      镜像配置

      选中镜像地址,并在文本框中输入镜像地址,取值如下:

      1. 华北2(北京)的镜像地址为:registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub

      2. 新加坡的镜像地址为:registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub

      代码配置

      选择OSS类型的挂载方式,并配置以下参数:

      1. OSS:选择您自己的OSS Bucket路径,与核验服务选择的OSS路径保持一致。例如oss://examplebucket/

      2. 挂载路径:配置为/photog_oss

      运行命令

      配置为python app.py

      端口号

      配置为7860。

    • 资源部署区域中,配置以下参数:

      参数

      描述

      参数

      描述

      资源类型

      选择公共资源

      部署资源

      资源规格选择GPU类型的GU30系列机型,推荐使用ml.gu7i.c32m188.1-gu30

      额外系统盘

      配置为120 GB。

    • 异步队列区域中,配置以下参数:

      参数

      描述

      参数

      描述

      资源类型

      选择公共资源

      部署资源

      • 最小实例数:1。

      • CPU(核数):8核。

      • 内存(GB):64 GB。

      单一输入请求最大数据

      配置为20480 KB。避免队列中每个请求的存储空间不足。

      单一输出返回最大数据

    • 专有网络区域中,选择已创建的VPC、交换机和安全组。

    • 服务配置区域中,添加以下配置,您可以参考下方的完整配置示例,来添加新增的参数。

      字段

      新增的参数

      字段

      新增的参数

      autoscaler

      (可选)水平自动扩缩容配置,详情请参见水平自动扩缩容功能

      "behavior": {
        "scaleDown": {
          "stabilizationWindowSeconds": 60
        }
      },
      "max": 5,
      "min": 1,
      "strategies": {
                  "queue[backlog]": 1
      }

      metadata

      增加以下参数:

      "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              }
      1. keepalive:单个请求的最长处理时间,单位为毫秒,配置为3600000。

      2. worker_threads:EAS每个实例中用于并发处理请求的线程数。

        默认为5,表示最先进入队列的前五个任务会被分配到同一个实例上。建议将该参数设置为1,这样可以确保请求按顺序排队处理。

      queue

      增加参数"max_delivery": 1,防止失败后多次重复投递。

      单击查看完整的配置示例

      {
          "autoscaler": {
              "behavior": {
                  "scaleDown": {
                      "stabilizationWindowSeconds": 60
                  }
              },
              "max": 5,
              "min": 1,
              "strategies": {
                  "queue[backlog]": 1
              }
          },
          "metadata": {
              "name": "photog_train_pmml",
              "instance": 1,
              "rpc": {
                  "keepalive": 3600000,
                  "worker_threads": 1
              },
              "type": "Async"
          },
          "cloud": {
              "computing": {
                  "instance_type": "ml.gu7i.c32m188.1-gu30",
                  "instances": null
              },
              "networking": {
                  "vswitch_id": "vsw-2ze4o9kww55051tf2****",
                  "security_group_id": "sg-2ze0kgiee55d0fn4****",
                  "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****"
              }
          },
          "features": {
              "eas.aliyun.com/extra-ephemeral-storage": "120Gi"
          },
          "queue": {
              "cpu": 8,
              "max_delivery": 1,
              "min_replica": 1,
              "memory": 64000,
              "resource": "",
              "source": {
                  "max_payload_size_kb": 20480
              },
              "sink": {
                  "max_payload_size_kb": 20480
              }
          },
          "storage": [
              {
                  "oss": {
                      "path": "oss://examplebucket/",
                      "readOnly": false
                  },
                  "properties": {
                      "resource_type": "code"
                  },
                  "mount_path": "/photog_oss"
              }
          ],
          "containers": [
              {
                  "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:train.1.0.0.pub",
                  "script": "python app.py",
                  "port": 7860
              }
          ]
      }
  4. 单击部署

部署预测服务

本方案将预测服务部署为弹性Job服务,具体操作步骤如下:

  1. 单击部署服务,然后在自定义模型部署区域,单击JSON独立部署

  2. JSON编辑框中填入配置信息。

    {
        "metadata": {
            "name": "photog_pre_pmml",
            "instance": 1,
            "rpc": {
                "keepalive": 3600000,
                "worker_threads": 1
            },
            "type": "ScalableJob"
        },
        "cloud": {
            "computing": {
                "instance_type": "ecs.gn6v-c8g1.2xlarge",
                "instances": null
            },
            "networking": {
                "vswitch_id": "vsw-2ze4o9kww55051tf2****",
                "security_group_id": "sg-2ze0kgiee55d0fn4****",
                "vpc_id": "vpc-2ze5hl4ozjl4fo7q3****"
            }
        },
        "features": {
            "eas.aliyun.com/extra-ephemeral-storage": "120Gi"
        },
        "queue": {
            "cpu": 8,
            "max_delivery": 1,
            "min_replica": 1,
            "memory": 64000,
            "resource": "",
            "source": {
                "max_payload_size_kb": 20480
            },
            "sink": {
                "max_payload_size_kb": 20480
            }
        },
        "storage": [
            {
                "oss": {
                    "path": "oss://examplebucket/",
                    "readOnly": false
                },
                "properties": {
                    "resource_type": "code"
                },
                "mount_path": "/photog_oss"
            }
        ],
        "containers": [
            {
                "image": "registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub",
                "env": [
                    {
                        "name": "URL",
                        "value": "http://127.0.0.1:8000"
                    },
                    {
                        "name": "AUTHORIZATION",
                        "value": "="
                    }
                ],
                "script": "python app.py",
                "port": 7861
            },
            {
                "image": "eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2",
                "port": 8000,
                "script": "./webui.sh --listen --port 8000 --skip-version-check --no-hashing --no-download-sd-model --skip-install --api --filebrowser --sd-dynamic-cache --data-dir /photog_oss/webui/"
            }
        ]
    }

    其中关键参数说明如下,其他参数配置详情,请参见JSON部署参数说明

    参数

    描述

    参数

    描述

    metadata

    name

    自定义服务名称,在同地域内唯一。

    type

    配置为ScalableJob,异步推理服务会以弹性Job的形式进行部署。

    containers

    image

    需要同时配置AI写真预测服务和WebUI预测服务镜像地址。支持配置的镜像列表如下,本方案选择华北2(北京)地域的镜像地址。

    1. 华北2(北京)镜像地址:

      1. AI写真预测服务:registry.cn-beijing.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub

      2. WebUI预测服务:eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2

    2. 新加坡镜像地址:

      1. AI写真预测服务:registry.ap-southeast-1.aliyuncs.com/mybigpai/photog_pub:infer.1.0.0.pub

      2. WebUI预测服务:eas-registry-vpc.ap-southeast-1.cr.aliyuncs.com/pai-eas/stable-diffusion-webui:3.2

    storage

    path

    本方案以OSS挂载为例,配置为您自己的OSS Bucket路径,与核验服务选择的OSS路径保持一致,例如oss://examplebucket/

    您需要下载并解压WebUI所需的模型文件,并将其按照下图布局方式存放到您的OSS Bucket路径oss://examplebucket/photog_oss/webui中。关于如何将文件上传到OSS Bucket路径,详情请参见命令行工具ossutil 1.0。关于如何将文件上传到NAS路径,详情请参见快速入门(Linux)文件管理image.png

    mount_path

    配置为/photog_oss

  3. 单击部署

    弹性Job服务部署成功后,会自动创建队列服务,同时默认启动Autoscaler(水平自动扩缩容)功能。

调用服务

服务部署成功后,调用服务实现AI写真。具体操作,请参见调用接口

调用服务时,参考服务调用指定taskTypequery,来标识发送的是推理请求。调用图像核验接口为例,示例代码如下:

import json
from eas_prediction import QueueClient

# 创建输入队列对象,用于写入输入数据。
input_queue = QueueClient('182848887922****.cn-shanghai.pai-eas.aliyuncs.com', 'photog_check')
input_queue.set_token('<token>')
input_queue.init()

datas = json.dumps(
    {
       'request_id'    : 12345,
       'images'        : ["xx.jpg", "xx.jpg"], # urls, a list
       'configure'     : {
            'face_reconize' : True, # Judge whether all pictures are of a person
        }
    }
)
# 指定taskType为query。
tags = {"taskType": "query"}
index, request_id = input_queue.put(f'{datas}', tags)
print(index, request_id)

# 查看输入队列的详情。
attrs = input_queue.attributes()
print(attrs)

相关文档

  • 本页导读 (1)
  • 前提条件
  • 使用限制
  • 部署推理场景弹性Job服务
  • 部署核验服务
  • 部署训练任务
  • 部署预测服务
  • 调用服务
  • 相关文档