Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor build_wheel to support oneflowinc images #5427

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/actions/whl/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,5 @@ runs:
--wheel_house_dir=${tmp_dir}/wheelhouse \
--oneflow_src_dir=${src_dir} ${{ inputs.extra_flags }} \
--retry=1 \
--skip_img \
--extra_docker_args "${extra_docker_args}"
shell: bash
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,18 @@
Please refer to [this repo](https://github.com/Oneflow-Inc/conda-env)

- #### Option 2: Build in docker container (recommended)
- Pull a docker image:

```
docker pull oneflowinc/oneflow-manylinux2014-cuda10.2:0.1
```

All images available : https://hub.docker.com/u/oneflowinc

- In the root directory of OneFlow source code, run:

```
python3 docker/package/manylinux/build_wheel.py
python3 docker/package/manylinux/build_wheel.py --python_version=3.6
```

This should produce `.whl` files in the directory `wheelhouse`
Expand Down
42 changes: 27 additions & 15 deletions docker/package/manylinux/build_wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def build_img(
use_tuna,
use_system_proxy,
img_tag,
dry,
):
cudnn_version = 7
if str(cuda_version).startswith("11"):
Expand All @@ -67,7 +68,8 @@ def build_img(
proxy_build_arg = get_proxy_build_args() if use_system_proxy else ""
cmd = f"docker build -f docker/package/manylinux/Dockerfile {proxy_build_arg} {tuna_build_arg} --build-arg from={from_img} -t {img_tag} ."
print(cmd)
subprocess.check_call(cmd, cwd=oneflow_src_dir, shell=True)
if dry == False:
subprocess.check_call(cmd, cwd=oneflow_src_dir, shell=True)


def common_cmake_args(cache_dir=None, extra_oneflow_cmake_args=None):
Expand Down Expand Up @@ -310,9 +312,7 @@ def is_img_existing(tag):
parser.add_argument(
"--wheel_house_dir", type=str, required=False, default=default_wheel_house_dir,
)
parser.add_argument(
"--python_version", type=str, required=False, default="3.6, 3.7, 3.8",
)
parser.add_argument("--python_version", type=str, required=True)
parser.add_argument(
"--cuda_version", type=str, required=False, default="10.2",
)
Expand Down Expand Up @@ -340,6 +340,9 @@ def is_img_existing(tag):
parser.add_argument(
"--skip_audit", default=False, action="store_true", required=False
)
parser.add_argument(
"--build_img", default=False, action="store_true", required=False
)
parser.add_argument(
"--use_tuna", default=False, action="store_true", required=False
)
Expand All @@ -357,6 +360,8 @@ def is_img_existing(tag):
parser.add_argument("--bash", default=False, action="store_true", required=False)
parser.add_argument("--retry", default=0, type=int)
args = parser.parse_args()
if args.skip_img:
"Arg skip_img is deprecated. Setting it has no effect. If you want to build image, use --build_img"
print("args.extra_oneflow_cmake_args", args.extra_oneflow_cmake_args)
assert args.package_name
extra_oneflow_cmake_args = " ".join(
Expand All @@ -383,7 +388,6 @@ def is_img_existing(tag):

def build():
img_tag = None
skip_img = args.skip_img
img_prefix = f"oneflow-manylinux2014-cuda{cuda_version}"
user = getpass.getuser()
versioned_img_tag = f"{img_prefix}:0.1"
Expand All @@ -401,32 +405,38 @@ def build():
enforced_oneflow_cmake_args += (
' -DBAZEL_ENV_ARGS="BAZEL_LINKLIBS=-l%:libstdc++.a"'
)
user_img_tag = f"{img_prefix}:{user}"
extra_docker_args = args.extra_docker_args
if "--name" not in extra_docker_args:
extra_docker_args += (
f" --name run-by-{getpass.getuser()}-{str(uuid.uuid4())}"
)
if args.custom_img_tag:
user_img_tag = f"{img_prefix}:{user}"
inc_img_tag = f"oneflowinc/{versioned_img_tag}"
img_tag = inc_img_tag
if args.build_img:
img_tag = user_img_tag
elif args.custom_img_tag:
img_tag = args.custom_img_tag
skip_img = True
elif skip_img:
assert is_img_existing(
versioned_img_tag
), f"img not found: {versioned_img_tag}"
img_tag = versioned_img_tag
else:
img_tag = user_img_tag
if is_img_existing(versioned_img_tag):
img_tag = versioned_img_tag
elif is_img_existing(inc_img_tag):
img_tag = inc_img_tag
else:
raise ValueError(
f"img not found, please run 'docker pull {inc_img_tag}'"
)
assert img_tag is not None
print("using", img_tag)
if skip_img == False:
if args.build_img:
build_img(
cuda_version,
args.oneflow_src_dir,
args.use_aliyun_mirror,
args.use_tuna,
args.use_system_proxy,
img_tag,
args.dry,
)
bash_args = ""
if args.xla:
Expand Down Expand Up @@ -461,6 +471,8 @@ def build():
assert len(cuda_versions) == 1
sub_dir += "-cpu"
cache_dir = os.path.join(cache_dir, sub_dir)
if args.build_img:
return
if args.skip_third_party == False:
build_third_party(
img_tag,
Expand Down