全部产品
Search
文档中心

人工智能平台 PAI:常见问题

更新时间:Nov 02, 2023

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

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

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

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

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

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

由于用户的开发环境无法预测,很可能与EAS线上环境存在区别。为保证开发环境与线上环境一致,EAS提供了预先构建的开发镜像,用于配置Python Processor的ENV环境。开发镜像中已预装Conda并生成了对应Python版本的ENV环境,EAS提供的开发镜像如下。

# 仅安装了Conda的基础镜像。
registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:latest
# 安装了Conda、Python 2.7及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及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库。因为EAS线上环境没有预装libXext、libSM及libXrender库,所以使用该命令安装的cv2在离线测试环境中可能正常运行,但是在线上环境可能运行失败。您可以通过以下任何一种方式解决该报错:

  • 使用pip install openv-python-headless安装cv2,该方法不依赖于额外安装的libXext、libSM及libXrender库。

  • 查找系统中已安装的libXext、libSM及libXrender的二进制库ISO文件,将其拷贝至ENV/lib并随Proccessor上传。(这种方法可能出现其他依赖库,需要根据实际情况解决。)

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

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

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

在开发业务服务逻辑过程中,在重要的地方增加异常检测机制(try-catch),以保证业务代码不会因为异常而退出。即使由于某些特殊原因导致进程退出,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]状态?

创建任务所需的资源可能不足或无法找到。首先需要确认配置的资源地域及资源名称是否正确,然后确认是否有足够的可用资源。如下的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"
  }
}

EAS服务内部访问公网失败,如何解决?

使用自定义Processor部署EAS服务,由于代码里配置了从公网下载文件,导致部署服务时报错:加载文件失败。因为EAS服务内部默认与公网不通,您可以尝试为EAS服务配置公网连接,详情请参见公网连接及白名单配置