您需要下载EASCMD客户端并进行用户认证,才能使用EASCMD管理服务。本文为您介绍如何使用EASCMD客户端上传文件、创建服务、修改服务配置信息、切换服务版本、删除服务、查看服务列表、查看服务详细信息及查看服务进程。

下载EASCMD

通过客户端工具EASCMD可以管理服务,包括创建、删除、查看及修改服务等。EASCMD各版本的下载地址如下: 下载完成后,将EASCMD修改为可执行文件,示例如下。
chmod +x eascmd64

用户认证

预测服务使用阿里云AccessKey进行身份认证,提交任务时需要使用AccessKey ID和AccessKey Secret。使用如下命令为EASCMD配置AccessKey信息。
./eascmd64 config -i <yourAccessKeyID> -k <yourAccessKeySecret>
需要根据实际情况替换以下参数。
参数 描述
eascmd64 根据系统环境下载的客户端工具名。
<yourAccessKeyID> 阿里云的AccessKey ID。
<yourAccessKeySecret> 阿里云的AccessKey Secret。
Endpoint默认地域为华东2(上海),如果需要将模型部署至其它地域,可以使用-e参数指定地域对应的Endpoint。例如使用如下命令,将地域指定为华北2(北京)。
./eascmd64 config -i <yourAccessKeyID> -k <yourAccessKeySecret> -e pai-eas.cn-beijing.aliyuncs.com
地域与Endpoint的对应关系如下。
Region Endpoint
华东2(上海) pai-eas.cn-shanghai.aliyuncs.com
华北2(北京) pai-eas.cn-beijing.aliyuncs.com
华东2(上海)(从PAI-DSW内部署) pai-eas-share.cn-shanghai.aliyuncs.com
华北2(北京)(从PAI-DSW内部署) pai-eas-share.cn-beijing.aliyuncs.com
华北2(北京)(政务云,从PAI-DSW内部署) pai-eas.cn-north-2-gov-1.aliyuncs.com
华东1(杭州) pai-eas.cn-hangzhou.aliyuncs.com
华南1(深圳) pai-eas.cn-shenzhen.aliyuncs.com
中国(香港) pai-eas.cn-hongkong.aliyuncs.com
新加坡(新加坡) pai-eas.ap-southeast-1.aliyuncs.com
印度(孟买) pai-eas.ap-south-1.aliyuncs.com
印度尼西亚(雅加达) pai-eas.ap-southeast-5.aliyuncs.com
德国(法兰克福) pai-eas.eu-central-1.aliyuncs.com
美国(弗吉尼亚) pai-eas.us-east-1.aliyuncs.com

上传文件

PAI-EAS为每位用户提供了OSS仓库,通过EASCMD的upload命令,您可以直接上传模型或Processor并获取上传后的OSS地址。
eascmd upload [filename]
如果您在PAI-DSW内执行上传命令,则需要增加--inner参数。
eascmd upload [filename] --inner
如下示例将打包好的SavedModel模型上传至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
  }
}
参数 是否必选 描述
name 服务名称,必须在同一地域内唯一。
generate_token 是否生成Token。如果取值为true,则访问预测服务时需要在HTTP头增加Token信息。如果取值为false,则表示Public服务,无需授权即可访问。
token 表示访问鉴权的Token字符串。如果未指定,则系统根据generate_token自动生成。
model_path

model_pathprocessor_path分别为模型和Processor的输入数据源地址,支持HTTP或OSS地址。如果使用test命令进行本地调试,还可以使用本地路径。使用HTTP地址时,所需文件必须为.tar.gz.tar.bz2,zip等压缩包。

使用OSS地址时,地址链接可以是具体文件路径或文件夹路径。此外,使用OSS地址还需要提供参数oss_endpoint,示例如下。
"model_path":"oss://wowei-beijing-tiyan/alink/",
"oss_endpoint":"oss-cn-beijing.aliyuncs.com",
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,则需要配置这些参数,配置方式请参见使用Python开发自定义Processor,配置示例如下。
{
  "name": "pysdk_demo",
  "processor_entry": "./app.py",
  "processor_type": "python",
  "processor_path": "oss://eas-model-beijing/1955570263925790/pack.tar.gz",
  "metadata": {
    "instance": 1,
     "memory": 2000,
     "cpu": 1
    }
}
processor_entry
processor_mainclass
processor_type
metadata 服务的Meta信息。
服务信息描述表metadata的详细参数如下。
参数 是否必选 描述
一般参数 workers 每个Instance中用于并发处理请求的线程数,默认值为5。
instance 服务启动的Instance数量。
cpu 每个Instance需要的CPU数量。
gpu 每个Instance需要的GPU数量。
resource 资源组名称。如果是CPU服务,则可以忽略该参数。GPU服务支持P4_4COREP4_8CORE资源组。
高级参数(慎重调整) rpc.batching 是否开启Server端Batching,用于GPU模型加速。默认值为false
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。
创建服务的示例如下。
$ 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]
支持同时配置多个属性。例如,将Instance数量配置为10,且每个Instance中的Quota数量为5(5核+20 GB)。
eascmd modify service_test -Dmetadata.instance=10 -Dmetadata.cpu=5

修改服务

通过modify命令可以对已部署的服务进行修改。
eascmd modify [service_name] -s [service_desc_json]
说明 如果仅修改服务的资源使用情况,则在服务描述文件中修改metadata部分即可。

删除服务

通过delete命令可以删除服务,但是只能删除当前地域的服务。
eascmd delete [service_name]
删除服务的示例如下。
$ eascmd delete savedmodel_exanple
Are you sure to delete the service [savedmodel_exanple] in [cn-shanghai]? [Y/n]
[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

切换版本

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

查看服务列表

使用list(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]
查看服务信息的示例如下。
$ 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)命令可以查看服务正在运行的进程状态。
eascmd w [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] |        |
+--------------+----------------+---------------------+----------+---------+-------+--------+

预测

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