From 3a960c4857d6b1550acaae34c9561de0e1f975be Mon Sep 17 00:00:00 2001 From: Lysandre Debut Date: Thu, 17 Jun 2021 17:29:01 +0200 Subject: [PATCH] Support for torch 1.9.0 (#12224) * Support for torch 1.9.0 * Torch scatter for 1.9.0 * Github Actions run on 1.9.0 --- .circleci/config.yml | 14 +++++--------- .github/workflows/self-push.yml | 4 ++-- .github/workflows/self-scheduled.yml | 4 ++-- src/transformers/file_utils.py | 8 +++++++- src/transformers/modeling_fx_utils.py | 11 +++++++++++ 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 37d93b8f34..9d344d7a31 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -80,9 +80,8 @@ jobs: - v0.4-{{ checksum "setup.py" }} - run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev - run: pip install --upgrade pip - - run: pip install .[sklearn,tf-cpu,testing,sentencepiece,speech,vision] - - run: pip install -U torch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 - - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html + - run: pip install .[sklearn,tf-cpu,torch,testing,sentencepiece,speech,vision] + - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html - save_cache: key: v0.4-{{ checksum "setup.py" }} paths: @@ -112,8 +111,7 @@ jobs: - run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev - run: pip install --upgrade pip - run: pip install .[sklearn,flax,torch,testing,sentencepiece,speech,vision] - - run: pip install -U torch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 - - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html + - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html - save_cache: key: v0.4-{{ checksum "setup.py" }} paths: @@ -142,8 +140,7 @@ jobs: - run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev - run: pip install --upgrade pip - run: pip install .[sklearn,torch,testing,sentencepiece,speech,vision,timm] - - run: pip install -U torch==1.8.1 torchaudio==0.8.1 torchvision==0.9.1 - - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html + - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html - save_cache: key: v0.4-torch-{{ checksum "setup.py" }} paths: @@ -227,8 +224,7 @@ jobs: - run: sudo apt-get -y update && sudo apt-get install -y libsndfile1-dev - run: pip install --upgrade pip - run: pip install .[sklearn,torch,testing,sentencepiece,speech,vision] - - run: pip install -U torch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 - - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.8.0+cpu.html + - run: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cpu.html - save_cache: key: v0.4-torch-{{ checksum "setup.py" }} paths: diff --git a/.github/workflows/self-push.yml b/.github/workflows/self-push.yml index 06618d08e8..515d5bc73d 100644 --- a/.github/workflows/self-push.yml +++ b/.github/workflows/self-push.yml @@ -23,7 +23,7 @@ jobs: run_tests_torch_gpu: runs-on: [self-hosted, docker-gpu, single-gpu] container: - image: pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime + image: pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime options: --gpus 0 --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/ steps: - name: Launcher docker @@ -107,7 +107,7 @@ jobs: run_tests_torch_multi_gpu: runs-on: [self-hosted, docker-gpu, multi-gpu] container: - image: pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime + image: pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime options: --gpus all --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/ steps: - name: Launcher docker diff --git a/.github/workflows/self-scheduled.yml b/.github/workflows/self-scheduled.yml index dc48887c36..1d9b0efc56 100644 --- a/.github/workflows/self-scheduled.yml +++ b/.github/workflows/self-scheduled.yml @@ -19,7 +19,7 @@ jobs: run_all_tests_torch_gpu: runs-on: [self-hosted, docker-gpu, single-gpu] container: - image: pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime + image: pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime options: --gpus 0 --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/ steps: - name: Launcher docker @@ -141,7 +141,7 @@ jobs: run_all_tests_torch_multi_gpu: runs-on: [self-hosted, docker-gpu, multi-gpu] container: - image: pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime + image: pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime options: --gpus all --shm-size "16gb" --ipc host -v /mnt/cache/.cache/huggingface:/mnt/cache/ steps: - name: Launcher docker diff --git a/src/transformers/file_utils.py b/src/transformers/file_utils.py index 51daa86cb3..9d8bade8a7 100644 --- a/src/transformers/file_utils.py +++ b/src/transformers/file_utils.py @@ -252,6 +252,8 @@ PRESET_MIRROR_DICT = { "bfsu": "https://mirrors.bfsu.edu.cn/hugging-face-models", } +# This is the version of torch required to run torch.fx features. +TORCH_FX_REQUIRED_VERSION = version.parse("1.8") _is_offline_mode = True if os.environ.get("TRANSFORMERS_OFFLINE", "0").upper() in ENV_VARS_TRUE_VALUES else False @@ -275,7 +277,11 @@ def is_torch_cuda_available(): _torch_fx_available = False if _torch_available: - _torch_fx_available = version.parse(_torch_version) >= version.parse("1.8") + torch_version = version.parse(importlib_metadata.version("torch")) + _torch_fx_available = (torch_version.major, torch_version.minor) == ( + TORCH_FX_REQUIRED_VERSION.major, + TORCH_FX_REQUIRED_VERSION.minor, + ) def is_torch_fx_available(): diff --git a/src/transformers/modeling_fx_utils.py b/src/transformers/modeling_fx_utils.py index ff7763955c..8e513c811b 100644 --- a/src/transformers/modeling_fx_utils.py +++ b/src/transformers/modeling_fx_utils.py @@ -4,10 +4,13 @@ import inspect from typing import Any, Dict, List, Optional, Union import torch +from packaging import version from torch import nn from torch.fx import Graph, GraphModule, Node, Proxy, Tracer from torch.fx.node import Argument +from transformers.file_utils import TORCH_FX_REQUIRED_VERSION, importlib_metadata, is_torch_fx_available + from . import ( MODEL_FOR_CAUSAL_LM_MAPPING, MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING, @@ -144,6 +147,14 @@ class HFTracer(Tracer): def __init__(self, batch_size=1, sequence_length=[128, 128], num_choices=-1): super().__init__() + + if not is_torch_fx_available(): + torch_version = version.parse(importlib_metadata.version("torch")) + raise ImportError( + f"Found an incompatible version of torch. Found version {torch_version}, but only version " + f"{TORCH_FX_REQUIRED_VERSION} is supported." + ) + encoder_sequence_length = sequence_length[0] if isinstance(sequence_length, (list, tuple)) else sequence_length decoder_sequence_length = ( sequence_length[1] if isinstance(sequence_length, (list, tuple)) else encoder_sequence_length