我应该如何在AWS Lambda实现中对待joblib多处理?

时间:2019-04-08 15:57:31

标签: python-3.x lambda scikit-learn warnings joblib

我在AWS中有一个相对简单的线性回归lambda。每个称为函数的实例的日志显示以下内容:

/opt/python/sklearn/externals/joblib/_multiprocessing_helpers.py:38: UserWarning: [Errno 38] Function not implemented. joblib will operate in serial mode
warnings.warn('%s. joblib will operate in serial mode' % (e,))

我怀疑这是由于sklearn在lambda上(即“无服务器”)运行,并试图根据this questionthis GH issue确定其多处理能力。

我还从GH那里了解到这不是一个“可修复”的问题,当在这些硬件上具有这些依赖项进行部署时,总是会发生这种情况。我正在恢复预期的结果(即使我当前已将默认的最小lambda内存最大化为128mb)。

我的目标是控制警告,并且知道是否有办法进行以下操作:

  • 停止sklearn寻找多处理程序,以防止发出警告
  • 捕获此特定警告,并防止其从我的函数传递到cloudwatch日志中
  • 如果两者都可行,那么从aws体系结构/ pythonic观点来看这是更可取的?

1 个答案:

答案 0 :(得分:1)

要捕获警告并防止将其传递到cloudwatch日志中,可以按以下方式过滤警告。

import json
import warnings
warnings.filterwarnings('error') 
try:
    import sklearn
except Warning:
    pass 

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

article here(特别是在结尾处)重新创建并过滤警告。