全部产品
云市场

自定义Processor开发常见问题

更新时间:2020-02-12 21:32:09

Python自定义Processor开发常见问题

  1. 自定义 Processor 压缩包太大,上传效率太低怎么解决?

    EAS 推荐使用 docker 镜像的形式上传运行环境以及大文件,这是因为这些环境通常比较大(超过几个 GB)但是不经常变动,通过这种形式上传环境当业务代码发生变动时只需要增量更新改动的部分即可,可以大大提升开发效率。详情参考 Python 开发自定义 Processor。

  2. 开发 Processor 过程中,安装好的 python 包,在上线之后找不到了是什么原因?

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

  3. EAS 线上运行过程中发现有一些 ENV 环境的系统依赖库没有找到是什么原因?
    由于用户的开发环境是无法预测的,很可能与 EAS 线上环境存在大的区别。为了保证开发环境与线上环境对齐,EAS提供了预先构建好的开发镜像来配置 Python Processor 的 ENV 环境。开发镜像中预装了conda并生成了对应python版本的ENV环境,目前提供了三个镜像:

    1. # 仅安装了conda的基础镜像
    2. registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:latest
    3. # 安装了conda及python2.7和eas allspark 0.8的python sdk
    4. registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:py2.7-allspark-0.8
    5. # 安装了conda及python3.6和eas allspark 0.8的python sdk
    6. registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:py3.6-allspark-0.8

    详情参考 Python 开发自定义 Processor。

  4. import cv2报错:libSM.so.6: cannot open shared object file: No such file or directory

    常见的 pip install opencv的方法会依赖于libXext libSM libXrender三个库。因为 EAS 线上环境中目前没有预装libXext libSM libXrender,所以使用该命令安装的 cv2 在离线测试环境中可能能够运行,但是到线上时会运行失败。

    推荐方法 1: 尝试使用 pip install openv-python-headless 来安装 cv2。这个包不依赖于额外安装的libXext libSM libXrender库。

    推荐方法 2: 找到系统上安装好的libXext libSM libXrender的二进制库.so文件,拷贝到ENV/lib里面随 Proccessor 导报上传。(这种方法可能会有其他库依赖没有解决干净,需要根据实际情况解决)

  5. EAS Python Processor 中怎么设置环境变量?

    EAS Python Processor 中会自动把 Processor 目录下的所有目录添加到 LD_LIBRARY_PATH 环境变量中,因此所需要额外的依赖库直接放在 Processor 目录下的任意位置都可。

    如果是其他环境变量,则推荐在 python 程序中使用 os.environ[‘key’] = ‘val’ 的方式设置。

  6. EAS Processor 怎么避免代码异常造成的进程退出?

    首先,在开发业务服务逻辑过程中,在一些重要的地方加上异常检测机制(try-catch)来保证业务代码不会因为异常而退出是必要的。其次,即使在 EAS Processor 由于某些特殊原因导致进程退出,EAS 服务也能够对退出的进程进行自动重启,保证服务的稳定性。

  7. EAS AK, endpoint 区域的配置

    预测服务使用阿里云ak进行身份认证,提交任务时需要使用阿里云提供的AccessKeyId和AccessKeySecret。endpoint 默认指向的region为cn-shanghai,如果需要将模型部署至其它region,可使用-e参数指定region对应的endpoint, 示例如下:

    1. ./eascmd64 config -i <AccessKeyId> -k <AccessKeySecret> -e pai-eas.cn-beijing.aliyuncs.com

    更多详情请查看《EASCMD客户端使用手册》用户认证章节。

  8. eascmd create 创建任务为什么一直处于 “[OK] Waiting [Total: 1, Pending: 1, Running: 0]” 状态

    这种情况说明创建任务所需的资源不够或者找不到。需要确认下资源的区域,资源的名字是否配置正确。除此之外,还需要是否有足够的可用资源存在,以下 EAS 信息描述配置文件中给出了相关示例:

    1. {
    2. "name": "service",
    3. "token": "[Authorization-token]",
    4. "data_image":"[your-public-docker-image-repo]",
    5. "processor_entry": "app.py",
    6. "processor_type": "python",
    7. "processor_path": "[oss://eas-model-shenzhen/xxxxxxxxx/codes.tar.gz]",
    8. "metadata": {
    9. "region": "cn-shenzhen", # 资源组所在的区域必须填写准确
    10. "resource": "resource-name", # 资源组名字(类似:EAS-LsFlrwBP56), 与 region 必须对应
    11. "gpu": 1,
    12. "cpu": 6,
    13. "memory": 2000,
    14. "instance": 2, # 每个实例会占用(gpu=1, cpu=6, memory=2000B)的资源,
    15. # 如果可用资源不够, 这任务会一直处于 waiting 状态
    16. "cuda": "10.0"
    17. }
    18. }