ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何为 Linux-musl(Alpine)编译 PaddlePaddle wheel 供 TEE 环境使用?

如何为 Linux-musl(Alpine)编译 PaddlePaddle wheel 供 TEE 环境使用? 如何为 Linux-muslAlpine编译 PaddlePaddle wheel 供 TEE 环境使用【免费下载链接】PaddlePArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice 『飞桨』核心框架深度学习机器学习高性能单机、分布式训练和跨平台部署项目地址: https://gitcode.com/GitHub_Trending/pa/Paddle如果你的目标是让 PaddlePaddle 跑在基于 musl libc 的 Linux 环境如 Alpine进而部署到 libOS 类 SGX TEE文档明确列出的对象是商用产品 Scone 和社区维护的 Occlum中就需要一份针对 linux-musl 编译的 wheel 包而不是常规的 glibc wheel。Paddle 仓库在 paddle/scripts/musl_build/ 目录内置了完整的构建脚本本文按 README 给出的流程讲清楚如何在这套脚本上产出一个.whl文件以及如何验证构建结果。整套构建依赖宿主机上的 Docker脚本通过docker build构建一个以python:${PYTHON_VERSION}-alpine3.11为基础镜像的编译环境见 Dockerfile再在容器内完成 Paddle 源码的编译。README 说明当前支持 Scone 与 Occlum 两类 TEE对开源 TEE Graphene 的支持当时仍在推进中这一点在引入 TEE 选型时值得留意。构建目录里的各脚本做什么先明确 musl_build 目录下文件的职责后文会用到它们文件作用build_docker.sh构建编译用 Docker 镜像安装编译工具、package.txt 中列出的 Alpine 开发包及 Python 依赖build_paddle.sh在容器内执行编译把源码根目录挂载到容器内/paddle编译工作目录为/root/buildbuild_inside.sh自动模式下容器内实际执行的编译脚本负责 cmake 配置与 make并把 wheel 拷到容器的/outputconfig.sh定义镜像名、挂载路径、ccache 与本地缓存目录~/.paddle-musl/ccache、~/.paddle-musl/cache等Dockerfile构建镜像定义python:${PYTHON_VERSION}-alpine3.11基础镜像安装g gfortran make cmake patchelf git ccachepackage.txt镜像内apk add的安装包列表如freetype-dev、openblas-dev、libuv-dev等主路径自动构建 wheel以下命令来自 README 的 Build Automatically 一节均在 Paddle 源码根目录的build/目录内执行../paddle/scripts/...是相对于该 build 目录的路径。第 1 步克隆 Paddle 源码并进入 build 目录clone 地址可替换为你实际使用的镜像源git clone https://gitcode.com/GitHub_Trending/pa/Paddle.git cd ./Paddle mkdir -p build cd build第 2 步构建编译镜像。网络较慢时可通过HTTP_PROXY/HTTPS_PROXY环境变量设置代理README 示例如下两个 export 均为可选# setup proxy address, when the speed of internet is not good. # export HTTP_PROXYhttp://127.0.0.1:8080 # export HTTPS_PROXYhttps://127.0.0.1:8080 # invoke build script ../paddle/scripts/musl_build/build_docker.sh第 3 步在镜像中编译 Paddle。build_paddle.sh接收的参数会原样透传给make例如-j8../paddle/scripts/musl_build/build_paddle.sh -j8自动模式下的容器以--network host运行并把源码根目录、./output、ccache 与缓存目录挂载进容器编译结束后 build_paddle.sh 会自动执行find $OUTPUT_DIR -type f列出产物。结果验证wheel 保存在相对于工作目录的./output目录README 给出的检查命令是ls ./output/*.whl看到./output/下出现.whl文件即表示本次构建产出成功。可选带单元测试的构建如果需要更强的正确性验证可用WITH_TEST1触发测试链路build_inside.sh容器内会安装单测依赖、pip install刚产出的 wheel然后执行ctest --output-on-failurectest 的具体参数可以通过CTEST_*环境变量透传。注意这会把构建时间显著拉长且依赖网络安装测试依赖WITH_TEST1 ../paddle/scripts/musl_build/build_paddle.sh -j8可选手动模式进入容器编译需要逐步控制编译命令时用BUILD_MAN1进入容器交互 shell 而不是直接跑完编译此模式不会挂--rm容器会保留需要时自行停止或删除BUILD_MAN1 ../paddle/scripts/musl_build/build_paddle.sh进入容器后源码挂载在/paddle工作目录为/root按 README 的 Build Manually 一节依次执行mkdir build cd build # install python requirement pip install -r /paddle/python/requirements.txt # configure project with cmake cmake -DWITH_MUSLON -DWITH_CRYPTOOFF -DWITH_MKLOFF -DWITH_GPUOFF /paddle # the argument -j8 is optional to accelerate compiling. make -j8编译产物 wheel 位于构建目录下的python/dist/自动模式的 build_inside.sh 即用find python/dist/ -type f -name *.whl定位它并拷入/output。常用环境变量与副作用说明两个脚本支持的环境变量在 README 的 Scripts 一节有完整清单与日常执行相关的主要是这些变量作用于说明HTTP_PROXY/HTTPS_PROXY两个脚本透传进容器用于 git 与 pip 下载PYTHON_VERSIONbuild_docker.sh构建镜像使用的 Python 版本WITH_REBUILDbuild_docker.sh置 1 时先docker rmi -f强制删除旧镜像再重建WITH_PRUNE_DAYSbuild_docker.sh按天数清理旧的 Docker 镜像执行docker image prune -f -a影响范围是本机所有镜像使用前确认WITH_PIP_INDEXbuild_docker.shpip 安装时使用的自定义 index 地址BUILD_MANbuild_paddle.sh置 1 进入手动模式WITH_TESTbuild_paddle.sh置 1 时编译后安装 wheel 并运行 ctestWITH_PRUNE_CONTAINERbuild_paddle.sh默认 1编译完成后删除容器--rm置 0 保留容器便于排查CTEST_*/FLAGS_*build_paddle.sh分别透传给 ctest 与构建流程限制与文档间差异musl 构建的 cmake 选项在 build_inside.sh 中固定为-DWITH_MUSLON -DWITH_CRYPTOOFF -DWITH_MKLOFF -DWITH_GPUOFF即这条路径产出的 wheel 不含 GPU 与 MKL 支持这也是该目录 README 手动构建一节给出的同样参数。构建镜像的 Alpine 版本存在文档间不一致README 描述为 alpine 3.10而 Dockerfile 实际基于alpine3.11以 Dockerfile 为准时建议以当前仓库代码为准核对。PYTHON_VERSION的默认值同样两处不一致README 写 default3.8build_docker.sh 与 Dockerfile 的默认值均为 3.7。需要固定版本时建议显式设置PYTHON_VERSION不要依赖默认值。文档只覆盖了如何产出 musl wheel并未说明 wheel 在 Scone/Occlum 内部的具体部署与运行方式这部分需参考对应 TEE 项目的文档本文不展开。继续深入构建产物与挂载逻辑build_paddle.sh、config.sh容器内编译细节cmake 参数、wheel 收集、测试流程build_inside.sh构建环境定义Dockerfile、package.txt原始使用说明paddle/scripts/musl_build/README.md【免费下载链接】PaddlePArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice 『飞桨』核心框架深度学习机器学习高性能单机、分布式训练和跨平台部署项目地址: https://gitcode.com/GitHub_Trending/pa/Paddle创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表