开发者社区 > 云原生 > Serverless > 正文

函数计算python3.9环境引入 自定义层时paddle库报错 提示 /usr/lib/x86_6

函数计算python3.9环境引入 自定义层时paddle库报错 提示 /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version CXXABI_1.3.8' not found

展开
收起
飘飘斯嘉丽 2023-04-24 16:45:31 261 0
3 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    这个报错可能是由于函数计算环境缺少对应的C++运行环境导致的。您可以尝试以下两种方案解决该问题:

    1、重新编译 paddle 库,并将编译后的库和函数代码打入函数打包的 zip 包中。具体方式如下:

    # 创建一个新的目录,以编译 paddle 库
    mkdir mylibs && cd mylibs
    
    # 下载 paddle 库源码
    git clone https://github.com/PaddlePaddle/Paddle.git
    
    # 编译 paddle 库,指定链接的 libstd++ 库路径
    LDFLAGS='-Wl,-rpath,\$ORIGIN/../lib' LD_LIBRARY_PATH='/usr/local/lib64' cd Paddle && ./tools/build.sh -DCUDA_ARCH_NAME=Auto -DWITH_GPU=OFF -DCMAKE_BUILD_TYPE=Release -DWITH_TESTING=OFF -DWITH_MKL=ON -DCMAKE_INSTALL_PREFIX=`pwd`/../paddle_install_dir && make -j$(nproc) install
    
    # 创建一个新的目录,以打包函数代码和编译后的 paddle 库
    cd .. && mkdir myfunction && cd myfunction
    
    # 在该目录中编写和打包您的函数代码,类似下面这样
    vim index.py
    # zip -r9 myfunction.zip index.py
    
    # 将编译后的 paddle 库打入 zip 包中
    cd ../mylibs/paddle_install_dir && zip -r9 ../../myfunction/myfunction.zip lib/*
    
    # 将函数代码添加到 zip 包中
    cd ../../myfunction && zip -r9 myfunction.zip index.py
    
    # 将打包好的 zip 包上传到阿里云函数计算中,并引用自定义的层
    

    2、使用 Alibaba Cloud 自定义运行环境提供的 C++ 运行环境。通过阿里云 Web 控制台或 API 创建一个自定义运行环境,并在函数计算中引用该环境。步骤如下:

    创建自定义运行环境

    • 登录阿里云 Web 控制台,进入函数计算服务控制台。
    • 选择 “自定义运行环境” 页面,点击 “创建环境”。
    • 填写环境名称和描述信息,然后选择 “python3.9” 作为运行时,并在 “软件列表” 中添加 C++ 运行环境,点击 “确认” 创建环境。

    创建自定义层并引用

    • 在自定义运行环境控制台添加一个新的层。
    • 将编译好的 paddle 库打包成 zip 包。将层的名字以及编译好的 zip 包上传到阿里云 OSS 中。
    • 在函数代码中通过层的 ARN 来引用该层,示例代码如下:
    import os.path
    import paddle
    
    def handler():
        # 获取层所在目录路径
        layer_path = os.path.join(os.getenv('LAMBDA_TASK_ROOT'), 'python', 'lib', 'python3.9', 'site-packages')
    
        # 将层所在路径添加到系统路径中
        site.addsitedir(layer_path)
    
        # 加载 paddle 库
        paddle.__path__ = [os.path.join(layer_path, 'paddle')]
    

    以上两种方案中,方案一需要您手动编译打包并上传库文件,操作更加复杂,但可适用于大多数第三方库。方案二则更加简单,但需要使用 Alibaba Cloud 自定义运行环境服务,可能会产生一定的额外费用。

    2023-04-25 08:56:56
    赞同 展开评论 打赏
  • 这个您要使用容器镜像创建函数了。或者使用 dockerfile 制作层来试试。

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-04-24 19:31:38
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    你好,这应该是函数计算环境缺少 C++ ABI 库的某些版本,导致无法加载所需的库。这可能是由于使用的 PaddlePaddle 版本与函数计算环境不兼容所导致的。

    2023-04-24 17:08:31
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载