您可以使用eascmd管理PAI-EAS服务。本文为您介绍如何使用eascmd客户端上传文件、创建服务、修改服务配置信息、切换服务版本、删除服务、查看服务列表、查看服务详细信息、查看服务进程及配置资源组网络的相关命令。

操作命令合集

使用eascmd命令行工具管理服务,相关的操作命令如下。
类型 功能 操作入口
服务相关 支持以下两种方式使用eascmd命令行工具:
  • 自行下载eascmd客户端,详细请参见下载并认证客户端
  • 在PAI-DSW的Terminal中,PAi-DSW已经内置了eascmd命令行工具。
资源组相关

上传文件

  • 功能

    PAI-EAS为每位用户提供了OSS仓库,通过eascmd的upload命令,您可以直接上传模型或Processor,并获取上传后的OSS地址。

  • 格式
    eascmd upload <filename> [--inner]
  • 参数
    • <filename>:待上传的文件名称。
    • [--inner]:如果在PAI-DSW内执行上传命令,则需要增加该参数。
  • 示例
    在PAI-DSW内,将打包好的SavedModel模型文件savedmodel_example/savedmodel_example.tar.gz上传至OSS。
    eascmd upload savedmodel_example/savedmodel_example.tar.gz --inner
    系统输出如下类似结果。
    [OK] oss endpoint:    [http://oss-cn-shanghai.aliyuncs.com]
    [OK] oss target path: [oss://eas-model-shanghai/182848887922****/savedmodel_example/savedmodel_example.tar.gz]
    Succeed: Total num: 1, size: 33,013. OK num: 1(upload 1 files).
    其中oss://eas-model-shanghai/182848887922****/savedmodel_example/savedmodel_example.tar.gz为存储模型的OSS地址,可以用于服务部署。

创建服务

  • 功能

    通过create命令创建服务。创建服务时,需要提供资源(模型或Processor)的HTTP或OSS地址,您可以将资源上传至OSS,并获取上传后的OSS地址。

  • 命令
    eascmd create <service_desc_json>
  • 参数
    service_desc_json表示描述服务相关信息(模型存储位置及资源规格等)的JSON文件,该文件的示例如下。
    {
      "name": "mnist_saved_model_example",
      "generate_token": "true",
      "model_path": "http://eas-data.oss-cn-shanghai.aliyuncs.com/models%2Fmnist_saved_model.tar.gz",
      "processor": "tensorflow_cpu",
      "metadata": {
        "instance": 1,
        "cpu": 1
      }
    }
    服务相关信息JSON文件内的参数解释如下表所示。
    参数 是否必选 描述
    name 服务名称,必须在同一地域内唯一。
    token 表示访问鉴权的Token字符串。如果未指定,则系统自动生成。
    model_path model_pathprocessor_path分别为模型和Processor的输入数据源地址,支持以下格式的地址:
    • HTTP地址:所需文件必须为TAR.GZTARBZ2ZIP等压缩包。
    • OSS地址:地址链接可以是具体文件路径或文件夹路径。同时,还需要提供参数oss_endpoint,示例如下。
      "model_path":"oss://wowei-beijing-tiyan/alink/",
      "oss_endpoint":"oss-cn-beijing.aliyuncs.com",
    • 本地路径:如果使用test命令进行本地调试,则可以使用本地路径。
    oss_endpoint OSS的Endpoint,例如oss-cn-beijing.aliyuncs.com其他取值请参见访问域名和数据中心。如果model_path使用OSS地址,则必须指定该参数。
    model_entry 表示模型的入口文件,可以包含任意文件。如果未指定,则使用model_path中的文件名。主文件路径会传递给Processor中的Load()函数。
    model_config 表示模型的配置,支持任意文本。该参数值会传递给Processor中LoadWithConfig()函数的第二个参数。
    processor

    如果使用官方提供的预置Processor,则直接在此指定Processor Code即可。Processor在eascmd中使用的Code请参见预置Processor使用说明

    如果使用自定义Processor,则无需配置该参数,只需要配置processor_pathprocessor_entryprocessor_mainclassprocessor_type参数。

    processor_path processor相关的文件包,可以参见model_path参数的描述信息。
    processor_entry processor的主文件。例如libprocessor.soapp.py,其中包含了预测所需的initialize()函数和process()函数的实现。

    processor_typecpppython时,必须指定该参数。

    processor_mainclass processor的主文件,JAR包中的mainclass。例如com.aliyun.TestProcessor

    processor_typejava时,必须指定该参数。

    processor_type processor实现的语言,取值范围如下:
    • cpp
    • java
    • python
    metadata 服务的Meta信息,详细参数请参见表 1
    表 1. metadata参数解释
    参数 是否必选 描述
    一般参数 workers 每个Instance中用于并发处理请求的线程数,默认值为5。
    instance 服务启动的Instance数量。
    cpu 每个Instance需要的CPU数量。
    gpu 每个Instance需要的GPU数量。
    resource 资源组ID,配置策略如下:
    • 如果服务部署在公共资源组,则可以忽略该参数,此时服务进行按量付费。
    • 如果服务部署在专属资源组,则配置该参数为资源组ID。例如eas-r-6dbzve8ip0xnzte5rp
    高级参数(慎重调整) rpc.batching 是否开启Server端Batching,用于GPU模型加速。取值范围如下:
    • false:默认值,关闭Server端Batching。
    • true:开启Server端Batching。
    rpc.keepalive 单个请求的最长处理时间。如果请求处理时长超过该值,则服务端返回408超时并关闭连接。默认值为5000,单位为ms。
    rpc.io_threads 每个Instance用于处理网络IO的线程数量,默认值为4。
    rpc.max_batch_size 每个Batch的最大Size,默认值为16。仅rpc.batching取值为true时,该参数生效。
    rpc.max_batch_timeout 每个Batch的最大Timeout,默认值为50 ms。仅rpc.batching取值为true时,该参数生效。
    rpc.max_queue_size 队列大小,默认值为64。队列满时,服务端返回450并关闭连接。为保证服务端不会压力过载,队列可以提前通知客户端向其他Instance进行重试。对于RT较长的服务队列,可以适当减小队列长度,以避免请求在队列中堆积导致大量请求超时。
    rpc.worker_threads 每个Instance中用于并发处理请求的线程数,与参数workers含义相同,默认值为5。
  • 示例(假设描述服务相关信息的JSON文件为pmml.json
    eascmd create pmml.json
    系统输出如下类似结果。
    [RequestId]: 1651567F-8F8D-4A2B-933D-F8D3E2DD****
    +-------------------+----------------------------------------------------------------------------+
    | Intranet Endpoint | http://pai-eas-vpc.cn-shanghai.aliyuncs.com/api/predict/savedmodel_exanple |
    |             Token | YjQxZDYzZTBiZTZjMzQ5ZmE0MzczZjIxMGZiNzZmMDBkY2VjMDg4****                   |
    +-------------------+----------------------------------------------------------------------------+
    [OK] Creating api gateway
    [OK] Building image [registry-vpc.cn-shanghai.aliyuncs.com/eas/savedmodel_exanple_cn-shanghai:v0.0.1-20190224001315]
    [OK] Pushing image [registry-vpc.cn-shanghai.aliyuncs.com/eas/savedmodel_exanple_cn-shanghai:v0.0.1-20190224001315]
    [OK] Waiting [Total: 1, Pending: 1, Running: 0]
    [OK] Waiting [Total: 1, Pending: 1, Running: 0]
    [OK] Service is running

修改配置

  • 功能

    对于Instnace和CPU等metadata信息,可以直接使用modify命令的-D参数进行修改。

  • 命令
    eascmd modify <service_name> -Dmetadata.<attr_name>=<attr_value>
    支持同时配置多个参数,详情请参见示例。
  • 参数
    • <service_name>:服务名称。
    • <attr_name>:参数名称。
    • <attr_value>:参数取值。
  • 示例
    将Instance数量配置为10,且每个Instance中的Quota数量为5(5核+20 GB)。
    eascmd modify service_test -Dmetadata.instance=10 -Dmetadata.cpu=5
    扩缩容时,可以只修改服务的metadata.instance参数。如果指定的Instance数量大于服务当前的Instance数量,则系统启动新的Instance,以达到要求的Instance数量,原有实例的运行不受影响。如果指定的Instance数量小于当前Instance数量,则系统停止部分Instance,以达到要求的Instance数量,其他实例的运行不受影响。
    说明 只修改Instance的更新操作与全量更新不同,前者不会触发服务的滚动更新。

更新服务

  • 功能

    通过modify命令可以对已部署的服务进行修改。

  • 命令
    eascmd modify <service_name> -s <service_desc_json>
  • 参数
    • <service_name>:服务名称。
    • <service_desc_json>:服务描述文件。
      说明 如果仅修改服务的资源使用情况,则在服务描述文件中修改metadata部分即可。

停止服务

  • 功能

    通过stop命令可以停止一个运行中的服务。

  • 命令
    eascmd stop <service_name>
  • 参数

    <service_name>表示待停止的服务名称。

启动服务

  • 功能

    通过start命令可以重新启动一个已停止的服务。

  • 命令
    eascmd start <service_name>
  • 参数

    <service_name>表示待启动的服务名称。

删除服务

  • 功能

    通过delete命令可以删除服务,但是只能删除当前地域的服务。

  • 命令
    eascmd delete <service_name>
  • 参数

    <service_name>表示待删除的服务名称。

  • 示例
    假设服务名称为savedmodel_exanple,删除该服务的步骤如下:
    1. 执行删除服务的命令。
      eascmd delete savedmodel_exanple
      系统输出如下类似结果。
      Are you sure to delete the service [savedmodel_exanple] in [cn-shanghai]? [Y/n]
    2. 输入Y。系统输出如下类似结果。
      [RequestId]: 1651567F-8F8D-4A2B-933D-F8D3E2DD****
      [OK] Service [savedmodel_exanple] in region [cn-shanghai] is terminating
      [OK] Service is terminating
      [OK] Service is terminating
      [OK] Service was deleted successfully

蓝绿发布

  • 功能

    通过create -r命令可以对一个已存在的服务创建一个关联服务,再使用release命令根据需求随时切换流量比例,从而进行蓝绿发布。新服务的信息描述JSON文件中的name必须与旧服务同名,其它字段根据需求自由配置。系统会自动在旧服务名基础上增加随机后缀,从而得到新服务名。

    如果删除新服务,则流量会全部切换至旧服务。如果删除旧服务,则全部流量切换至新服务。蓝绿发布之前,最原始服务的Endpoint会成为后续发布迭代的流量入口,无论后续在这个基础上进行多少次蓝绿发布迭代,该入口的Endpoint始终保持不变(例如下面示例中的{domain}/api/predict/savedmodel_example),您无须修改客户端调用代码。
    说明 蓝绿发布不适用于网络直连访问的方式。
  • 命令
    1. 创建关联服务
      eascmd create <service_desc_json> -r
    2. 对蓝绿服务进行切流。
      eascmd release <service_name> -w <weight>
  • 参数
    • <service_desc_json>:服务信息描述的JSON文件。
    • <service_name>:创建的新服务名称。
    • <weight>:新服务承载的流量百分比。
  • 示例(假设服务信息描述文件为pmml.json
    1. 创建关联服务
      eascmd create pmml.json -r
      系统输出以下类似信息。
      [RequestId]: 1651567F-8F8D-4A2B-933D-F8D3E2DD****
      +-------------------+----------------------------------------------------------------------------+
      | Intranet Endpoint | http://xxx.cn-shanghai.pai-eas.aliyuncs.com/api/predict/savedmodel_example_9c16a222 |
      |             Token | YjQxZDYzZTBiZTZjMzQ5ZmE0MzczZjIxMGZiNzZmMDBkY2VjMDg4****                   |
      +-------------------+----------------------------------------------------------------------------+
      [OK] Building image [registry-vpc.cn-shanghai.aliyuncs.com/eas/savedmodel_exanple_9c16a222_cn-shanghai:v0.0.1-20190224001315]
      [OK] Pushing image [registry-vpc.cn-shanghai.aliyuncs.com/eas/savedmodel_exanple_9c16a222_cn-shanghai:v0.0.1-20190224001315]
      [OK] Waiting [Total: 1, Pending: 1, Running: 0]
      [OK] Waiting [Total: 1, Pending: 1, Running: 0]
      [OK] Service is running
      上述输出表示创建了一个名为savedmodel_example_9c16a222的服务,且两个服务分别有独立的流量入口,可以被单独调用。您对新服务可以进行独立测试,不会影响已有服务的线上运行,测试完成后,可以对服务进行切流操作。
    2. 对蓝绿服务进行流量切换。
      eascmd release savedmodel_example_9c16a222 -w 20

      上述命令表示切换20%的流量到新服务savedmodel_example_9c16a222,其余80%的流量在旧服务savedmodel_example上。此时,新服务的独立访问Endpoint({domain}/api/predict/savedmodel_example_9c16a222)关闭,旧服务Endpoint({domain}/api/predict/savedmodel_example)流量的20%会进入新服务,80%进入旧服务。

      系统输出如下类似结果。
      Confirmed to release this service at weight [20%]? [Y/n]
    3. 输入Y,并单击Enter键,系统输出如下类似结果。
      [RequestId]: 9258EEDE-6F99-4C3B-841B-B6E9774F****
      [OK] Service [savedmodel_example_9c16a222] is weighted to 20% now

切换版本

  • 功能

    您可以先通过desc命令查看服务的最新版本和当前版本,再通过version命令切换服务至最新版本之前的任意版本。

  • 命令
    eascmd version <service_name> <version_id>
  • 参数
    • <service_name>:服务名称。
    • <version_id>:待切换服务的版本ID。

查看服务列表

  • 功能

    使用list(或缩写ls)命令可以查看当前用户已部署的服务列表。

  • 命令
    eascmd ls
  • 参数

  • 示例
    eascmd ls
    系统输出如下类似结果。
    [RequestId]: 83945D4E-ED3E-4D35-A989-831E36BB****
    +---------------------------+-------------+----------+---------------------+---------------------+---------+--------+----------------------------------------+
    |        SERVICENAME        |   REGION    | INSTANCE |     CREATETIME      |     UPDATETIME      | STATUS  | WEIGHT |              SERVICEPATH               |
    +---------------------------+-------------+----------+---------------------+---------------------+---------+--------+----------------------------------------+
    | mnist_saved_model_example | cn-shanghai |        1 | 2019-02-21 16:35:41 | 2019-02-21 16:35:41 | Running |      0 | /api/predict/mnist_saved_model_example |
    +---------------------------+-------------+----------+---------------------+---------------------+---------+--------+----------------------------------------+

查看服务信息

  • 功能

    通过desc命令可以查看已部署服务的详情信息。

  • 命令
    eascmd desc <service_name>
  • 参数

    <service_name>表示服务名称。

  • 示例
    eascmd desc mnist_saved_model_example
    系统输出如下类似结果。
    $ eascmd desc mnist_saved_model_example
    +---------------------+--------------------------------------------------------------------------------------------------------------+
    |              Status | Running                                                                                                      |
    |         ServiceName | mnist_saved_model_example                                                                                    |
    |              Region | cn-shanghai                                                                                                  |
    |          CreateTime | 2019-02-21 16:35:41                                                                                          |
    |          UpdateTime | 2019-02-21 16:35:41                                                                                          |
    |         AccessToken |                                                                                                              |
    |        PrivateToken | ZWNjMTNkNDExMmExNjZkYTM4YWQ5YTY0YmFjNjk3YWYzZTRjM2Y2****                                                     |
    |       TotalInstance | 1                                                                                                            |
    |     RunningInstance | 1                                                                                                            |
    |     PendingInstance | 0                                                                                                            |
    |                 CPU | 1                                                                                                            |
    |                 GPU | 0                                                                                                            |
    |              Memory | 1000M                                                                                                        |
    |               Image | registry-vpc.cn-shanghai.aliyuncs.com/eas/mnist_saved_model_example_cn-shanghai:v0.0.1-20190221163541        |
    |              Weight | 0                                                                                                            |
    |       LatestVersion | 1                                                                                                            |
    |      CurrentVersion | 1                                                                                                            |
    |             Message | Service start successfully                                                                                   |
    |       APIGatewayUrl | 1c3b37ea83c047efa0dc6df0cacb****-cn-shanghai.alicloudapi.com/EAPI_182848887922****_mnist_saved_model_example |
    |    APIGatewayAppKey | 2564****                                                                                                     |
    | APIGatewayAppSecret | 12562a7b8858bbba2c2e9c4517ff****                                                                             |
    |    IntranetEndpoint | http://pai-eas-vpc.cn-shanghai.aliyuncs.com/api/predict/mnist_saved_model_example                            |
    |       ServiceConfig | {                                                                                                            |
    |                     |   "generate_token": "false",                                                                                 |
    |                     |   "metadata": {                                                                                              |
    |                     |     "cpu": 1,                                                                                                |
    |                     |     "instance": 1,                                                                                           |                                                                                  |
    |                     |     "region": "cn-shanghai"                                                                                  |
    |                     |   },                                                                                                         |
    |                     |   "model_path":                                                                                              |
    |                     | "http://eas-data.oss-cn-shanghai.aliyuncs.com/models%2Fmnist_saved_model.tar.gz",                            |
    |                     |   "name":                                                                                                    |
    |                     | "mnist_saved_model_example",                                                                                 |
    |                     |   "processor":                                                                                               |
    |                     | "tensorflow_cpu"                                                                                             |
    |                     | }                                                                                                            |
    +---------------------+--------------------------------------------------------------------------------------------------------------+

查看服务进程

  • 功能

    通过showworkers(w)(或缩写w)命令可以查看服务正在运行的进程状态。

  • 命令
    eascmd w <service_name>
  • 参数

    <service_name>表示服务名称。

  • 示例
    eascmd w mnist_saved_model_example
    系统输出如下类似结果。
    [RequestId]: 4E905404-E617-4BD8-85D6-EC5C6A0D****
    +--------------+----------------+---------------------+----------+---------+-------+--------+
    |   INNERIP    |     HOSTIP     |       STARTAT       | RESTARTS | STATUS  | READY | REASON |
    +--------------+----------------+---------------------+----------+---------+-------+--------+
    | 172.24.XX.XX | 192.168.XX.XXX | 2019-02-21 16:35:58 |        0 | Running | [1/1] |        |
    +--------------+----------------+---------------------+----------+---------+-------+--------+

查看资源组列表

  • 功能

    通过resource list(或缩写resource ls)命令可以查看当前账户下的资源组列表。

  • 命令
    eascmd resource ls
  • 参数

  • 示例
    eascmd resource ls
    系统输出如下类似结果。
    +--------------------------+-------------+---------------+----------+----------+------------------+---------------------+---------------+
    |       RESOURCENAME       |  CLUSTERID  | INSTANCECOUNT | GPUCOUNT | CPUCOUNT |     OWNERUID     |     CREATETIME      |    STATUS     |
    +--------------------------+-------------+---------------+----------+----------+------------------+---------------------+---------------+
    | eas-r-lzo32vrdbtukr7te3i | cn-shanghai |             1 |        0 |       16 | 182848887922**** | 2020-03-18 13:09:24 | ResourceReady |
    +--------------------------+-------------+---------------+----------+----------+------------------+---------------------+---------------+

查看资源组详情

  • 功能

    通过resource desc命令可以查看某个资源组的详细信息。

  • 命令
    eascmd resource desc <resource_id>
  • 参数

    <resource_id>表示待查看的资源组ID,即resource list(ls)命令返回结果中的RESOURCENAME字段。

  • 示例
    eascmd -c ~/.eas/shanghai2.conf resource desc eas-r-lzo32vrdbtukr7te3i
    系统输出如下类似结果。
    +---------+-----------------+----------------------------------------------------------+
    |   Basic | ResourceName    | eas-r-lzo32vrdbtukr7te3i                                 |
    |         | Region          | cn-shanghai                                              |
    |         | CpuCount        | 16                                                       |
    |         | GpuCount        | 0                                                        |
    |         | instanceCount   | 1                                                        |
    |         | CreateTime      | 2020-03-18 13:09:24                                      |
    |         | LastStatus      | ResourceReady                                            |
    |         | Message         | Resource is ready                                        |
    |         | RoleArn         | acs:ram::xxx:role/AliyunPAIAccessingENIRole              |
    | Network | VpcId           | vpc-uf6s9pv47nu03srne****                                |
    |         | VSwitchId       | vsw-uf6voq53e893k56ws****                                |
    |         | SecurityGroupId | sg-uf6c5twkfar8l06c****                                  |
    |         | DestinationCIDR |                                                          |
    |         | AuxVSwitchList  | []                                                       |
    +---------+-----------------+----------------------------------------------------------+

查看资源组实例列表

  • 功能

    通过resource list_instance(或缩写为resource li)命令可以查看某个资源组的实例列表及每个实例的资源使用情况。

  • 命令
    eascmd resource list_instance <resource_id>
  • 参数

    <resource_id>表示待查看的资源组ID,即resource list(ls)命令返回结果中的RESOURCENAME字段。

  • 示例
    eascmd resource li eas-r-lzo32vrdbtukr7te3i
    系统输出如下类似结果。
    +------------------------------------+--------------+--------+----------------+----------------+-------------------+---------------------+----------------+------------+
    |            INSTANCENAME            |  INSTANCEIP  | STATUS | TOTAL/USED CPU | TOTAL/USED GPU | TOTAL/USED MEMORY |     CREATETIME      |  INSTANCETYPE  | CHARGETYPE |
    +------------------------------------+--------------+--------+----------------+----------------+-------------------+---------------------+----------------+------------+
    | cn-shanghai.i-uf6dj71ir6mh3gjmaz3a | 10.224.XX.XX | Ready  | 16/6           | 0/0            | 62240M/4200M      | 2020-03-18 13:09:34 | ecs.g6.4xlarge | PostPaid   |
    +------------------------------------+--------------+--------+----------------+----------------+-------------------+---------------------+----------------+------------+

配置资源组网络

  • 功能

    通过resource network命令可以设置某个资源组的直连情况,用于连通PAI-EAS VPC和用户VPC之间的网络。一方面可以在用户VPC内以直连软负载的方式调用PAI-EAS服务,另一方面可以在PAI-EAS Processor中反向访问用户VPC中的内网资源(例如RDS、Redis等)。

  • 命令
    eascmd resource network <resource_id> -s <network_cfg.json>
  • 参数
    • <resource_id>:表示查待看的资源组ID,即resource list(ls)命令返回结果中的RESOURCENAME字段。
    • <network_cfg.json>:网络配置文件,该文件格式如下所示。
      {
        "Action":"create",
        "VSwitchId": "vsw-8vbsunr5bkcbyxh94****",
        "SecurityGroupId": "sg-8vbhwowdxzx5fjcx****",
        "VSwitchIdList": ["vsw-8xbsunr5abcbyqh93****", "vsw-8xbs1y7gu6cxbvqzw****"],
        "DestinationCIDR": "192.XX.XX.XX/16"
      }
      各参数的含义如下表所示。
      参数 描述 是否必选 默认值
      Action 网络设置的操作,取值范围如下:
      • create:开通直连。
      • delete:关闭直连,此时无需配置其他参数。
      VSwitchId 待连通的目标主VSwitch ID,PAI-EAS会自动在该VSwitch中创建ENI弹性网卡,请不要主动删除该ENI,否则会导致网络连通性问题。
      SecurityGroupId 客户端ECS所在的安全组ID。
      说明 客户端ECS必需归属于该安全组中,否则会导致网络连通性问题。
      VSwitchIdList 待打通的附属VSwitch列表,必须与主VSwitch在同一个VPC中,这些VSwitch的IP网段会自动被加入到PAI-EAS的路由表规则中。 空数组([])
      DestinationCIDR 待打通的客户端目标网段,必须与主VSwitch在同一个VPC中,该网段会被自动加入到PAI-EAS的路由表规则中。 空字符串("")
      说明 VSwitchIdList与DestinationCIDR原理相同,均是为了连通PAI-EAS集群与用户某个网段的网络。如果需要连通多个指定VSwitch,则使用VSwitchIdList。如果需要连通一个大网段(例如整个VPC),则使用DestinationCIDR字段。建议不要使用10.0.0.0/810.224.0.0/1610.240.0.0/16网段,否则会导致网络冲突问题。如果有其他需求,可以提工单

预测

进行预测调用时,可以根据创建服务时生成的HTTP URL访问服务。预测服务的输入输出格式由Processor自定义,详细请参见模型服务调用章节中的通用Processor服务请求数据构造部分。