本文为您介绍自定义Processor的相关问题。

自定义Processor压缩包太大,如何提高上传效率?

PAI-EAS推荐使用Docker镜像上传运行环境和大文件。如果业务代码产生变动,则只需要增量更新改动部分即可,可以大幅度提升开发效率,详情请参见使用Python开发自定义Processor

开发Processor过程中,已经安装的Python包,为什么上线之后无法找到?

因为Python Processor ENV环境的构建依赖于Conda,所以在开发环境中能够正常运行的程序,很可能依赖于用户 .local环境下的Python包。为保证Python程序所有依赖均已安装,在ENV环境使用pip install —force-reinstall命令,确保依赖包的安装位置正确。

PAI-EAS线上运行过程中,为什么无法找到ENV环境的某些系统依赖库?

由于用户的开发环境无法预测,很可能与PAI-EAS线上环境存在区别。为保证开发环境与线上环境一致,PAI-EAS提供了预先构建的开发镜像,用于配置Python Processor的ENV环境。开发镜像中已预装Conda并生成了对应Python版本的ENV环境,PAI-EAS提供的开发镜像如下。
# 仅安装了Conda的基础镜像。
registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:latest
# 安装了Conda、Python 2.7及PAI-EAS Allspark 0.8的Python SDK。
registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:py2.7-allspark-0.8
# 安装了Conda、Python 3.6及PAI-EAS Allspark 0.8的Python SDK。
registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:py3.6-allspark-0.8

如何解决导入cv2报错libSM.so.6: cannot open shared object file: No such file or directory的问题?

常见的pip install opencv方法依赖于libXext、libSM及libXrender库。因为PAI-EAS线上环境没有预装libXext、libSM及libXrender库,所以使用该命令安装的cv2在离线测试环境中可能正常运行,但是在线上环境可能运行失败。您可以通过以下任何一种方式解决该报错:
  • 使用pip install openv-python-headless安装cv2,该方法不依赖于额外安装的libXext、libSM及libXrender库。
  • 查找系统中已安装的libXext、libSM及libXrender的二进制库ISO文件,将其拷贝至ENV/lib并随Proccessor上传。(这种方法可能出现其他依赖库,需要根据实际情况解决。)

在PAI-EAS Python Processor中,如何配置环境变量?

因为PAI-EAS Python Processor会自动将Processor目录下的所有目录添加至LD_LIBRARY_PATH环境变量,所以将额外的依赖库存放至Processor目录的任意位置即可。如果是其他环境变量,则推荐在Python程序中使用os.environ[‘key’] = ‘val’进行配置。

PAI-EAS Processor如何避免代码异常造成进程退出?

在开发业务服务逻辑过程中,在重要的地方增加异常检测机制(try-catch),以保证业务代码不会因为异常而退出。即使由于某些特殊原因导致进程退出,PAI-EAS可以自动重启退出的进程,从而保证服务的稳定性。

如何配置AccessKey和Endpoint?

预测服务使用阿里云AccessKey进行身份认证,提交任务时需要使用AccessKey ID和AccessKey Secret。Endpoint默认地域为华东2(上海),如果需要将模型部署至其它地域,可以使用-e参数指定地域对应的Endpoint,示例如下。
./eascmd64 config -i <yourAccessKey ID> -k <yourAccessKey Secret> -e pai-eas.cn-beijing.aliyuncs.com

使用EASCMD创建任务,为什么一直处于[OK] Waiting [Total: 1, Pending: 1, Running: 0]状态?

创建任务所需的资源可能不足或无法找到。首先需要确认配置的资源地域及资源名称是否正确,然后确认是否有足够的可用资源。如下的PAI-EAS信息描述文件可以查看相关配置。
{
  "name": "service",
  "token": "[Authorization-token]",
  "data_image":"[your-public-docker-image-repo]",
  "processor_entry": "app.py",
  "processor_type": "python",
  "processor_path": "[oss://eas-model-shenzhen/xxxxxxxxx/codes.tar.gz]",
  "metadata": {
    "region": "cn-shenzhen", # 确保资源组所在的地域正确。
    "resource": "resource-name", # 确保资源组名称(类似:EAS-LsFlrwBP56)正确且与地域对应。
    "gpu": 1,
    "cpu": 6,
    "memory": 2000,
    "instance": 2, # 每个实例占用(gpu=1, cpu=6, memory=2000B)的资源。
                # 如果可用资源不足,则该任务一直处于waiting状态。
    "cuda": "10.0"
  }
}