allennlp
/
Makefile
198 строк · 5.1 Кб
1SRC = allennlp2
3MD_DOCS_ROOT = docs/4MD_DOCS_API_ROOT = $(MD_DOCS_ROOT)api/5MD_DOCS_SRC = $(filter-out $(SRC)/__main__.py %/__init__.py $(SRC)/version.py,$(shell find $(SRC) -type f -name '*.py' | grep -v -E 'tests/'))6MD_DOCS = $(subst .py,.md,$(subst $(SRC)/,$(MD_DOCS_API_ROOT),$(MD_DOCS_SRC)))7MD_DOCS_CMD = python scripts/py2md.py8MD_DOCS_CONF = mkdocs.yml9MD_DOCS_CONF_SRC = mkdocs-skeleton.yml10MD_DOCS_TGT = site/11MD_DOCS_EXTRAS = $(addprefix $(MD_DOCS_ROOT),README.md CHANGELOG.md CONTRIBUTING.md)12
13TORCH_INSTALL = pip install torch torchvision -c constraints.txt14DOCKER_TORCH_VERSION = 1.12.0-cuda11.3-python3.815DOCKER_TEST_TORCH_VERSION = 1.12.0-cuda11.3-python3.816
17DOCKER_TAG = latest18DOCKER_IMAGE_NAME = allennlp/allennlp:$(DOCKER_TAG)19DOCKER_TEST_IMAGE_NAME = allennlp/test:$(DOCKER_TAG)20DOCKER_RUN_CMD = docker run --rm \21-v $$HOME/.allennlp:/root/.allennlp \22-v $$HOME/.cache/huggingface:/root/.cache/huggingface \23-v $$HOME/nltk_data:/root/nltk_data24
25# These nltk packages are used by the 'checklist' module. They are downloaded automatically
26# if not found when `checklist` is imported, but it's good to download the ahead of time
27# to avoid potential race conditions.
28NLTK_DOWNLOAD_CMD = python -c 'import nltk; [nltk.download(p) for p in ("wordnet", "wordnet_ic", "sentiwordnet", "omw", "omw-1.4")]'29
30ifeq ($(shell uname),Darwin)31ifeq ($(shell which gsed),)32$(error Please install GNU sed with 'brew install gnu-sed')33else
34SED = gsed35endif
36else
37SED = sed38endif
39
40.PHONY : version41version :42@python -c 'from allennlp.version import VERSION; print(f"AllenNLP v{VERSION}")'43
44.PHONY : check-for-cuda45check-for-cuda :46@python -c 'import torch; assert torch.cuda.is_available(); print("Cuda is available")'47
48#
49# Testing helpers.
50#
51
52.PHONY : flake853flake8 :54flake8 allennlp tests scripts
55
56.PHONY : format57format :58black --check allennlp tests scripts
59
60.PHONY : typecheck61typecheck :62mypy allennlp tests scripts --cache-dir=/dev/null63
64.PHONY : test65test :66pytest --color=yes -v -rf --durations=40 \67--cov-config=.coveragerc \68--cov=$(SRC) \69--cov-report=xml70
71.PHONY : test-without-checklist72test-without-checklist :73pytest --color=yes -v -rf --durations=40 \74--cov-config=.coveragerc \75--cov=$(SRC) \76--cov-report=xml \77--ignore-glob=*checklist*78
79.PHONY : test-checklist80test-checklist :81pytest --color=yes -v -rf --durations=40 \82--cov-config=.coveragerc \83--cov=$(SRC) \84--cov-report=xml \85tests/ \
86-k checklist
87
88
89.PHONY : gpu-tests90gpu-tests : check-for-cuda91pytest --color=yes -v -rf --durations=20 \92--cov-config=.coveragerc \93--cov=$(SRC) \94--cov-report=xml \95-m gpu
96
97.PHONY : benchmarks98benchmarks :99pytest -c benchmarks/pytest.ini benchmarks/
100
101#
102# Setup helpers
103#
104
105.PHONY : download-extras106download-extras :107$(NLTK_DOWNLOAD_CMD)108
109.PHONY : install110install :111# Due to a weird thing with pip, we may need egg-info before running `pip install -e`.112# See https://github.com/pypa/pip/issues/4537.113# python setup.py install_egg_info114# Install torch ecosystem first.115$(TORCH_INSTALL)116pip install --upgrade pip
117pip install pip-tools
118pip-compile requirements.in -o final_requirements.txt --allow-unsafe --rebuild --verbose
119pip install -e . -r final_requirements.txt
120# These nltk packages are used by the 'checklist' module.121$(NLTK_DOWNLOAD_CMD)122
123#
124# Documention helpers.
125#
126
127.PHONY : build-all-api-docs128build-all-api-docs :129@$(MD_DOCS_CMD) $(subst /,.,$(subst .py,,$(MD_DOCS_SRC))) -o $(MD_DOCS)130
131.PHONY : build-docs132build-docs : build-all-api-docs $(MD_DOCS_CONF) $(MD_DOCS) $(MD_DOCS_EXTRAS)133mkdocs build
134
135.PHONY : serve-docs136serve-docs : build-all-api-docs $(MD_DOCS_CONF) $(MD_DOCS) $(MD_DOCS_EXTRAS)137mkdocs serve --dirtyreload
138
139.PHONY : update-docs140update-docs : $(MD_DOCS) $(MD_DOCS_EXTRAS)141
142$(MD_DOCS_ROOT)README.md : README.md143cp $< $@144# Alter the relative path of the README image for the docs.145$(SED) -i '1s/docs/./' $@146# Alter external doc links to relative links.147$(SED) -i 's|https://docs.allennlp.org/main/api/|api/|' $@148
149$(MD_DOCS_ROOT)%.md : %.md150cp $< $@151
152$(MD_DOCS_CONF) : $(MD_DOCS_CONF_SRC) $(MD_DOCS)153python scripts/build_docs_config.py $@ $(MD_DOCS_CONF_SRC) $(MD_DOCS_ROOT) $(MD_DOCS_API_ROOT)154
155$(MD_DOCS_API_ROOT)%.md : $(SRC)/%.py scripts/py2md.py156mkdir -p $(shell dirname $@)157$(MD_DOCS_CMD) $(subst /,.,$(subst .py,,$<)) --out $@158
159.PHONY : clean160clean :161rm -rf $(MD_DOCS_TGT)162rm -rf $(MD_DOCS_API_ROOT)163rm -f $(MD_DOCS_ROOT)*.md164rm -rf .pytest_cache/
165rm -rf allennlp.egg-info/
166rm -rf dist/
167rm -rf build/
168find . | grep -E '(\.mypy_cache|__pycache__|\.pyc|\.pyo$$)' | xargs rm -rf169
170#
171# Docker helpers.
172#
173
174.PHONY : docker-image175docker-image :176docker build \
177--pull \
178-f Dockerfile \
179--build-arg TORCH=$(DOCKER_TORCH_VERSION) \180-t $(DOCKER_IMAGE_NAME) .181
182DOCKER_GPUS = --gpus all183
184.PHONY : docker-run185docker-run :186$(DOCKER_RUN_CMD) $(DOCKER_GPUS) $(DOCKER_IMAGE_NAME) $(ARGS)187
188.PHONY : docker-test-image189docker-test-image :190docker build \
191--pull \
192-f Dockerfile.test \
193--build-arg TORCH=$(DOCKER_TEST_TORCH_VERSION) \194-t $(DOCKER_TEST_IMAGE_NAME) .195
196.PHONY : docker-test-run197docker-test-run :198$(DOCKER_RUN_CMD) --shm-size 2G $(DOCKER_GPUS) $(DOCKER_TEST_IMAGE_NAME) $(ARGS)199