2022-08-16 20:07:16 +00:00
|
|
|
DOCKER_REGISTRY ?= docker.io
|
|
|
|
|
DOCKER_ORG ?= $(shell docker info 2>/dev/null | sed '/Username:/!d;s/.* //')
|
|
|
|
|
DOCKER_IMAGE ?= pytorch
|
2023-12-19 13:53:08 +00:00
|
|
|
DOCKER_FULL_NAME = $(DOCKER_REGISTRY)/$(DOCKER_ORG)/$(DOCKER_IMAGE)
|
2020-01-24 18:24:46 +00:00
|
|
|
|
|
|
|
|
ifeq ("$(DOCKER_ORG)","")
|
|
|
|
|
$(warning WARNING: No docker user found using results from whoami)
|
2020-12-08 04:14:02 +00:00
|
|
|
DOCKER_ORG = $(shell whoami)
|
2020-01-24 18:24:46 +00:00
|
|
|
endif
|
|
|
|
|
|
2023-12-19 13:53:08 +00:00
|
|
|
CUDA_VERSION_SHORT ?= 12.1
|
|
|
|
|
CUDA_VERSION ?= 12.1.1
|
|
|
|
|
CUDNN_VERSION ?= 8
|
2023-11-06 17:33:40 +00:00
|
|
|
BASE_RUNTIME = ubuntu:22.04
|
2024-05-08 18:41:30 +00:00
|
|
|
BASE_DEVEL = nvidia/cuda:$(CUDA_VERSION)-devel-ubuntu22.04
|
2023-05-10 17:44:26 +00:00
|
|
|
CMAKE_VARS ?=
|
2020-01-24 18:24:46 +00:00
|
|
|
|
2021-02-10 18:43:22 +00:00
|
|
|
# The conda channel to use to install cudatoolkit
|
2021-03-12 19:13:49 +00:00
|
|
|
CUDA_CHANNEL = nvidia
|
2020-01-24 18:24:46 +00:00
|
|
|
# The conda channel to use to install pytorch / torchvision
|
2022-08-16 20:07:16 +00:00
|
|
|
INSTALL_CHANNEL ?= pytorch
|
2020-01-24 18:24:46 +00:00
|
|
|
|
2024-05-08 20:32:32 +00:00
|
|
|
PYTHON_VERSION ?= 3.11
|
2024-02-26 23:49:54 +00:00
|
|
|
# Match versions that start with v followed by a number, to avoid matching with tags like ciflow
|
|
|
|
|
PYTORCH_VERSION ?= $(shell git describe --tags --always --match "v[1-9]*.*")
|
2020-01-24 18:24:46 +00:00
|
|
|
# Can be either official / dev
|
2022-08-16 20:07:16 +00:00
|
|
|
BUILD_TYPE ?= dev
|
|
|
|
|
BUILD_PROGRESS ?= auto
|
Fix Docker image generation (#88741)
Pass install channel when building nightly images
Pass `TRITON_VERSION` argument to install triton for nightly images
Fix `generate_pytorch_version.py` to work with unannotated tags and avoid failures like the following:
```
% git checkout nightly
% ./.github/scripts/generate_pytorch_version.py
fatal: No annotated tags can describe '93f15b1b54ca5fb4a7ca9c21a813b4b86ebaeafa'.
However, there were unannotated tags: try --tags.
Traceback (most recent call last):
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 120, in <module>
main()
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 115, in main
print(version_obj.get_release_version())
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 75, in get_release_version
if not get_tag():
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 37, in get_tag
dirty_tag = subprocess.check_output(
File "/Users/nshulga/miniforge3/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/Users/nshulga/miniforge3/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['git', 'describe']' returned non-zero exit status 128.
```
After the change nightly is reported as(due to autolabelling issue,
should be fixed by ttps://github.com/pytorch/test-infra/pull/1047 ):
```
% ./.github/scripts/generate_pytorch_version.py
ciflow/inductor/26921+cpu
```
Even for tagged release commits version generation was wrong:
```
% git checkout release/1.13
% ./.github/scripts/generate_pytorch_version.py
ciflow/periodic/79617-4848-g7c98e70d44+cpu
```
After the fix, it is as expected:
```
% ./.github/scripts/generate_pytorch_version.py
1.13.0+cpu
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/88741
Approved by: https://github.com/dagitses, https://github.com/msaroufim
2022-11-10 00:06:31 +00:00
|
|
|
# Intentionally left blank
|
|
|
|
|
TRITON_VERSION ?=
|
2020-12-08 04:14:02 +00:00
|
|
|
BUILD_ARGS = --build-arg BASE_IMAGE=$(BASE_IMAGE) \
|
|
|
|
|
--build-arg PYTHON_VERSION=$(PYTHON_VERSION) \
|
|
|
|
|
--build-arg CUDA_VERSION=$(CUDA_VERSION) \
|
2021-02-10 18:43:22 +00:00
|
|
|
--build-arg CUDA_CHANNEL=$(CUDA_CHANNEL) \
|
2021-01-07 22:11:01 +00:00
|
|
|
--build-arg PYTORCH_VERSION=$(PYTORCH_VERSION) \
|
Fix Docker image generation (#88741)
Pass install channel when building nightly images
Pass `TRITON_VERSION` argument to install triton for nightly images
Fix `generate_pytorch_version.py` to work with unannotated tags and avoid failures like the following:
```
% git checkout nightly
% ./.github/scripts/generate_pytorch_version.py
fatal: No annotated tags can describe '93f15b1b54ca5fb4a7ca9c21a813b4b86ebaeafa'.
However, there were unannotated tags: try --tags.
Traceback (most recent call last):
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 120, in <module>
main()
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 115, in main
print(version_obj.get_release_version())
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 75, in get_release_version
if not get_tag():
File "/Users/nshulga/git/pytorch/pytorch-release/./.github/scripts/generate_pytorch_version.py", line 37, in get_tag
dirty_tag = subprocess.check_output(
File "/Users/nshulga/miniforge3/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/Users/nshulga/miniforge3/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['git', 'describe']' returned non-zero exit status 128.
```
After the change nightly is reported as(due to autolabelling issue,
should be fixed by ttps://github.com/pytorch/test-infra/pull/1047 ):
```
% ./.github/scripts/generate_pytorch_version.py
ciflow/inductor/26921+cpu
```
Even for tagged release commits version generation was wrong:
```
% git checkout release/1.13
% ./.github/scripts/generate_pytorch_version.py
ciflow/periodic/79617-4848-g7c98e70d44+cpu
```
After the fix, it is as expected:
```
% ./.github/scripts/generate_pytorch_version.py
1.13.0+cpu
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/88741
Approved by: https://github.com/dagitses, https://github.com/msaroufim
2022-11-10 00:06:31 +00:00
|
|
|
--build-arg INSTALL_CHANNEL=$(INSTALL_CHANNEL) \
|
2023-05-10 17:44:26 +00:00
|
|
|
--build-arg TRITON_VERSION=$(TRITON_VERSION) \
|
|
|
|
|
--build-arg CMAKE_VARS="$(CMAKE_VARS)"
|
2020-12-08 04:14:02 +00:00
|
|
|
EXTRA_DOCKER_BUILD_FLAGS ?=
|
2022-08-16 20:07:16 +00:00
|
|
|
|
|
|
|
|
BUILD ?= build
|
|
|
|
|
# Intentionally left blank
|
|
|
|
|
PLATFORMS_FLAG ?=
|
|
|
|
|
PUSH_FLAG ?=
|
|
|
|
|
USE_BUILDX ?=
|
|
|
|
|
BUILD_PLATFORMS ?=
|
|
|
|
|
WITH_PUSH ?= false
|
|
|
|
|
# Setup buildx flags
|
|
|
|
|
ifneq ("$(USE_BUILDX)","")
|
|
|
|
|
BUILD = buildx build
|
|
|
|
|
ifneq ("$(BUILD_PLATFORMS)","")
|
|
|
|
|
PLATFORMS_FLAG = --platform="$(BUILD_PLATFORMS)"
|
|
|
|
|
endif
|
|
|
|
|
# Only set platforms flags if using buildx
|
|
|
|
|
ifeq ("$(WITH_PUSH)","true")
|
|
|
|
|
PUSH_FLAG = --push
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
Dockerfile should set the syntax directive to v1 (#125632)
Fixes #125526 [#1811](https://github.com/pytorch/builder/issues/1811)
Adopt syntax=docker/dockerfile:1 whcih has been stable since 2018, while still best practice to declare in 2024.
- Syntax features dependent upon the [syntax directive version are documented here](https://hub.docker.com/r/docker/dockerfile).
- While you can set a fixed minor version, [Docker officially advises to only pin the major version]
```
(https://docs.docker.com/build/dockerfile/frontend/#stable-channel):
We recommend using docker/dockerfile:1, which always points to the latest stable release of the version 1 syntax, and receives both "minor" and "patch" updates for the version 1 release cycle.
BuildKit automatically checks for updates of the syntax when performing a build, making sure you are using the most current version.
```
**Support for building with Docker prior to v23 (released on Feb 2023)**
NOTE: 18.06 may not be the accurate minimum version for using docker/dockerfile:1, according to the [DockerHub tag history](https://hub.docker.com/layers/docker/dockerfile/1.0/images/sha256-92f5351b2fca8f7e2f452aa9aec1c34213cdd2702ca92414eee6466fab21814a?context=explore) 1.0 of the syntax seems to be from Dec 2018, which is probably why docker/dockerfile:experimental was paired with it in this file.
Personally, I'd favor only supporting builds with Docker v23. This is only relevant for someone building this Dockerfile locally, the user could still extend the already built and published image from a registry on older versions of Docker without any concern for this directive which only applies to building this Dockerfile, not images that extend it.
However if you're reluctant, you may want to refer others to [this Docker docs page](https://docs.docker.com/build/buildkit/#getting-started) where they should only need the ENV DOCKER_BUILDKIT=1, presumably the requirement for experimental was dropped with syntax=docker/dockerfile:1 with releases of Docker since Dec 2018. Affected users can often quite easily install a newer version of Docker on their OS, as per Dockers official guidance (usually via including an additional repo to the package manager).
**Reference links**
Since one of these was already included in the inline note (now a broken link), I've included relevant links mentioned above. You could alternatively rely on git blame with a commit message referencing the links or this PR for more information.
Feel free to remove any of the reference links, they're mostly only relevant to maintainers to be aware of (which this PR itself has detailed adequately above).
Pull Request resolved: https://github.com/pytorch/pytorch/pull/125632
Approved by: https://github.com/malfet
2024-05-08 01:52:53 +00:00
|
|
|
DOCKER_BUILD = docker $(BUILD) \
|
2020-12-08 04:14:02 +00:00
|
|
|
--progress=$(BUILD_PROGRESS) \
|
|
|
|
|
$(EXTRA_DOCKER_BUILD_FLAGS) \
|
2022-08-16 20:07:16 +00:00
|
|
|
$(PLATFORMS_FLAG) \
|
|
|
|
|
$(PUSH_FLAG) \
|
2020-12-08 04:14:02 +00:00
|
|
|
--target $(BUILD_TYPE) \
|
|
|
|
|
-t $(DOCKER_FULL_NAME):$(DOCKER_TAG) \
|
|
|
|
|
$(BUILD_ARGS) .
|
|
|
|
|
DOCKER_PUSH = docker push $(DOCKER_FULL_NAME):$(DOCKER_TAG)
|
2020-01-24 18:24:46 +00:00
|
|
|
|
|
|
|
|
.PHONY: all
|
|
|
|
|
all: devel-image
|
|
|
|
|
|
|
|
|
|
.PHONY: devel-image
|
|
|
|
|
devel-image: BASE_IMAGE := $(BASE_DEVEL)
|
2023-12-19 13:53:08 +00:00
|
|
|
devel-image: DOCKER_TAG := $(PYTORCH_VERSION)-cuda$(CUDA_VERSION_SHORT)-cudnn$(CUDNN_VERSION)-devel
|
2020-01-24 18:24:46 +00:00
|
|
|
devel-image:
|
|
|
|
|
$(DOCKER_BUILD)
|
|
|
|
|
|
2022-08-10 02:40:34 +00:00
|
|
|
.PHONY: devel-push
|
2020-01-24 18:24:46 +00:00
|
|
|
devel-push: BASE_IMAGE := $(BASE_DEVEL)
|
2023-12-19 13:53:08 +00:00
|
|
|
devel-push: DOCKER_TAG := $(PYTORCH_VERSION)-cuda$(CUDA_VERSION_SHORT)-cudnn$(CUDNN_VERSION)-devel
|
2020-01-24 18:24:46 +00:00
|
|
|
devel-push:
|
|
|
|
|
$(DOCKER_PUSH)
|
|
|
|
|
|
2024-05-07 11:50:54 +00:00
|
|
|
ifeq ("$(CUDA_VERSION_SHORT)","cpu")
|
|
|
|
|
|
|
|
|
|
.PHONY: runtime-image
|
|
|
|
|
runtime-image: BASE_IMAGE := $(BASE_RUNTIME)
|
|
|
|
|
runtime-image: DOCKER_TAG := $(PYTORCH_VERSION)-runtime
|
|
|
|
|
runtime-image:
|
|
|
|
|
$(DOCKER_BUILD)
|
|
|
|
|
|
|
|
|
|
.PHONY: runtime-push
|
|
|
|
|
runtime-push: BASE_IMAGE := $(BASE_RUNTIME)
|
|
|
|
|
runtime-push: DOCKER_TAG := $(PYTORCH_VERSION)-runtime
|
|
|
|
|
runtime-push:
|
|
|
|
|
$(DOCKER_PUSH)
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
2020-01-24 18:24:46 +00:00
|
|
|
.PHONY: runtime-image
|
|
|
|
|
runtime-image: BASE_IMAGE := $(BASE_RUNTIME)
|
2023-12-19 13:53:08 +00:00
|
|
|
runtime-image: DOCKER_TAG := $(PYTORCH_VERSION)-cuda$(CUDA_VERSION_SHORT)-cudnn$(CUDNN_VERSION)-runtime
|
2020-01-24 18:24:46 +00:00
|
|
|
runtime-image:
|
|
|
|
|
$(DOCKER_BUILD)
|
|
|
|
|
|
2022-08-10 02:40:34 +00:00
|
|
|
.PHONY: runtime-push
|
2020-01-24 18:24:46 +00:00
|
|
|
runtime-push: BASE_IMAGE := $(BASE_RUNTIME)
|
2023-12-19 13:53:08 +00:00
|
|
|
runtime-push: DOCKER_TAG := $(PYTORCH_VERSION)-cuda$(CUDA_VERSION_SHORT)-cudnn$(CUDNN_VERSION)-runtime
|
2020-01-24 18:24:46 +00:00
|
|
|
runtime-push:
|
|
|
|
|
$(DOCKER_PUSH)
|
|
|
|
|
|
2024-05-07 11:50:54 +00:00
|
|
|
endif
|
|
|
|
|
|
2020-01-24 18:24:46 +00:00
|
|
|
.PHONY: clean
|
|
|
|
|
clean:
|
|
|
|
|
-docker rmi -f $(shell docker images -q $(DOCKER_FULL_NAME))
|