【问题标题】:How should I treat joblib multiprocessing in an AWS lambda implementation?我应该如何处理 AWS lambda 实施中的 joblib 多处理?
【发布时间】:2019-04-08 15:57:30
【问题描述】:

我在 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 的观点来看,哪一个更可取?

【问题讨论】:

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


    【解决方案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,尤其是在结尾处,会重新创建并过滤警告。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 2023-01-02
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多