Back to Oneflow

使用 docker 生成 OneFlow wheel 包

docker/package/manylinux/README.md

1.0.02.5 KB
Original Source

使用 docker 生成 OneFlow wheel 包

创建 docker 容器

在 OneFlow 源码根目录下运行:

docker build -f docker/package/manylinux/Dockerfile --build-arg from=nvidia/cuda:10.2-cudnn7-devel-centos7 -t oneflow:manylinux2014-cuda10.2 .

打包 manylinux python wheel

这里有 manylinux2014(centos7) + cuda10.2 的 Dockerfile,里面安装了编译 oneflow 所需的库,假设你已经用 Dockerfile build 了一个 docker 镜像,叫做 oneflow:manylinux2014-cuda10.2,那么只要在 oneflow 源码目录运行

bash
docker run --rm -it -v `pwd`:/oneflow-src -w /oneflow-src oneflow:manylinux2014-cuda10.2

If you prefer operate inside docker:

bash
docker run --rm -it -v `pwd`:/oneflow-src -w /oneflow-src oneflow:manylinux2014-cuda10.2 bash
bash
/oneflow-src/docker/package/manylinux/build_wheel.sh --python3.6 --wheel-dir /oneflow-src/wheel-test

就会在 docker 镜像里执行 build_wheel.sh 来编译生成 python 3.5 到 python 3.8 的 oneflow manylinux2014 wheel。生成的包在 oneflow 源码目录下的 wheelhouse/ 文件夹内

注意事项

  1. 运行 docker run 时可能需要添加 -e http_proxy=$http_proxy -e https_proxy=$https_proxy 参数,以在容器内使用宿主机的代理,避免编译第三方库时因为网络问题而出错

  2. 只要运行了 cmake -DTHIRD_PARTY=ON ..,oneflow 本体都会从头编译,所以如果第三方库已经由 docker 容器编译过,这次只想增量编译 oneflow 本体,可以用命令

    bash
    docker run --rm -it -v `pwd`:/oneflow-src oneflow:manylinux2014-cuda10.2 /oneflow-src/docker/package/manylinux/build_wheel.sh --skip-third-party
    

    这会给 build_wheel.sh 传一个 --skip-third-party 参数,跳过第三方库的编译

  3. 只想在生成某些 python 版本的包,例如 python3.5,可以用命令

    bash
    docker run --rm -it -v `pwd`:/oneflow-src oneflow:manylinux2014-cuda10.2 /oneflow-src/docker/package/manylinux/build_wheel.sh --python3.5
    

    支持的参数是 --python3.5--python3.6--python3.7--python3.8,需要生成多个版本可以同时传入多个参数。不传入版本参数则会生成所有的 python 版本的包

  4. 如果想自定义 oneflow 编译时的 cmake 参数,可以直接把 cmake 参数写出来,如:

    bash
    docker run --rm -it -v `pwd`:/oneflow-src oneflow:manylinux2014-cuda10.2 /oneflow-src/docker/package/manylinux/build_wheel.sh -DWITH_XLA=ON