Skip to content

Commit

Permalink
Fix moving adapter head to device & Examples CI (#708)
Browse files Browse the repository at this point in the history
Changes in PR:
- Move flex heads along with adapters in `adapter_to()` method
- Add `test_examples` to GH CI
- Updates in example scripts
  • Loading branch information
calpt authored Jun 25, 2024
1 parent 3c2e702 commit fdb4571
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 224 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/tests_torch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,27 @@ jobs:
- name: Test
run: |
make test-adapter-models
test_adapter_examples:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: actions/setup-python@v2
with:
python-version: 3.8
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('setup.py') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install
run: |
pip install torch==2.1.2
pip install .[sklearn,testing,sentencepiece]
pip install conllu seqeval
- name: Test Examples
run: |
make test-examples
12 changes: 1 addition & 11 deletions examples/pytorch/dependency-parsing/run_udp.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ class DataTrainingArguments:
default=False,
metadata={"help": "Overwrite the cached training and evaluation sets."},
)
use_mock_data: bool = field(default=False)
evaluate_on: str = field(default="validation")


Expand Down Expand Up @@ -180,16 +179,7 @@ def main():
)

# Load and preprocess dataset
if data_args.use_mock_data:
from datasets import Version, load_dataset_builder
from datasets.commands.dummy_data import MockDownloadManager

dataset_builder = load_dataset_builder("universal_dependencies", data_args.task_name)
mock_dl_manager = MockDownloadManager("universal_dependencies", dataset_builder.config, Version("2.7.0"))
dataset_builder.download_and_prepare(dl_manager=mock_dl_manager, ignore_verifications=True)
dataset = dataset_builder.as_dataset()
else:
dataset = load_dataset("universal_dependencies", data_args.task_name)
dataset = load_dataset("universal_dependencies", data_args.task_name, trust_remote_code=True)
dataset = preprocess_dataset(dataset, tokenizer, labels, data_args, pad_token_id=-1)

# Setup adapters
Expand Down
67 changes: 44 additions & 23 deletions examples/pytorch/multiple-choice/run_swag.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,22 @@ class ModelArguments:
default="main",
metadata={"help": "The specific model version to use (can be a branch name, tag name or commit id)."},
)
use_auth_token: bool = field(
token: str = field(
default=None,
metadata={
"help": (
"The token to use as HTTP bearer authorization for remote files. If not specified, will use the token "
"generated when running `huggingface-cli login` (stored in `~/.huggingface`)."
)
},
)
trust_remote_code: bool = field(
default=False,
metadata={
"help": (
"Will use the token generated when running `huggingface-cli login` (necessary to use this script "
"with private models)."
"Whether or not to allow for custom models defined on the Hub in their own modeling files. This option"
" should only be set to `True` for repositories you trust and in which you have read the code, as it"
" will execute code present on the Hub on your local machine."
)
},
)
Expand Down Expand Up @@ -235,6 +245,11 @@ def main():
datefmt="%m/%d/%Y %H:%M:%S",
handlers=[logging.StreamHandler(sys.stdout)],
)

if training_args.should_log:
# The default of training_args.log_level is passive, so we set log level at info here to have that default.
transformers.utils.logging.set_verbosity_info()

log_level = training_args.get_process_log_level()
logger.setLevel(log_level)
datasets.utils.logging.set_verbosity(log_level)
Expand All @@ -244,8 +259,9 @@ def main():

# Log on each process the small summary:
logger.warning(
f"Process rank: {training_args.local_rank}, device: {training_args.device}, n_gpu: {training_args.n_gpu}"
+ f"distributed training: {bool(training_args.local_rank != -1)}, 16-bits training: {training_args.fp16}"
f"Process rank: {training_args.local_rank}, device: {training_args.device}, n_gpu: {training_args.n_gpu}, "
+ f"distributed training: {training_args.parallel_mode.value == 'distributed'}, 16-bits training:"
f" {training_args.fp16}"
)
logger.info(f"Training/evaluation parameters {training_args}")

Expand Down Expand Up @@ -280,25 +296,26 @@ def main():
data_files = {}
if data_args.train_file is not None:
data_files["train"] = data_args.train_file
extension = data_args.train_file.split(".")[-1]
if data_args.validation_file is not None:
data_files["validation"] = data_args.validation_file
extension = data_args.train_file.split(".")[-1]
extension = data_args.validation_file.split(".")[-1]
raw_datasets = load_dataset(
extension,
data_files=data_files,
cache_dir=model_args.cache_dir,
use_auth_token=True if model_args.use_auth_token else None,
token=model_args.token,
)
else:
# Downloading and loading the swag dataset from the hub.
raw_datasets = load_dataset(
"swag",
"regular",
cache_dir=model_args.cache_dir,
use_auth_token=True if model_args.use_auth_token else None,
token=model_args.token,
)
# See more about loading any type of standard or custom dataset (from files, python dict, pandas DataFrame, etc) at
# https://huggingface.co/docs/datasets/loading_datasets.html.
# https://huggingface.co/docs/datasets/loading_datasets.

# Load pretrained model and tokenizer

Expand All @@ -309,22 +326,25 @@ def main():
model_args.config_name if model_args.config_name else model_args.model_name_or_path,
cache_dir=model_args.cache_dir,
revision=model_args.model_revision,
use_auth_token=True if model_args.use_auth_token else None,
token=model_args.token,
trust_remote_code=model_args.trust_remote_code,
)
tokenizer = AutoTokenizer.from_pretrained(
model_args.tokenizer_name if model_args.tokenizer_name else model_args.model_name_or_path,
cache_dir=model_args.cache_dir,
use_fast=model_args.use_fast_tokenizer,
revision=model_args.model_revision,
use_auth_token=True if model_args.use_auth_token else None,
token=model_args.token,
trust_remote_code=model_args.trust_remote_code,
)
model = AutoModelForMultipleChoice.from_pretrained(
model_args.model_name_or_path,
from_tf=bool(".ckpt" in model_args.model_name_or_path),
config=config,
cache_dir=model_args.cache_dir,
revision=model_args.model_revision,
use_auth_token=True if model_args.use_auth_token else None,
token=model_args.token,
trust_remote_code=model_args.trust_remote_code,
)

# Convert the model into an adapter model
Expand All @@ -339,14 +359,15 @@ def main():
max_seq_length = tokenizer.model_max_length
if max_seq_length > 1024:
logger.warning(
f"The tokenizer picked seems to have a very large `model_max_length` ({tokenizer.model_max_length}). "
"Picking 1024 instead. You can change that default value by passing --max_seq_length xxx."
"The chosen tokenizer supports a `model_max_length` that is longer than the default `block_size` value"
" of 1024. If you would like to use a longer `block_size` up to `tokenizer.model_max_length` you can"
" override this default with `--block_size xxx`."
)
max_seq_length = 1024
else:
if data_args.max_seq_length > tokenizer.model_max_length:
logger.warning(
f"The max_seq_length passed ({data_args.max_seq_length}) is larger than the maximum length for the"
f"The max_seq_length passed ({data_args.max_seq_length}) is larger than the maximum length for the "
f"model ({tokenizer.model_max_length}). Using max_seq_length={tokenizer.model_max_length}."
)
max_seq_length = min(data_args.max_seq_length, tokenizer.model_max_length)
Expand Down Expand Up @@ -462,14 +483,14 @@ def compute_metrics(eval_predictions):
trainer.log_metrics("eval", metrics)
trainer.save_metrics("eval", metrics)

kwargs = dict(
finetuned_from=model_args.model_name_or_path,
tasks="multiple-choice",
dataset_tags="swag",
dataset_args="regular",
dataset="SWAG",
language="en",
)
kwargs = {
"finetuned_from": model_args.model_name_or_path,
"tasks": "multiple-choice",
"dataset_tags": "swag",
"dataset_args": "regular",
"dataset": "SWAG",
"language": "en",
}

if training_args.push_to_hub:
trainer.push_to_hub(**kwargs)
Expand Down
4 changes: 2 additions & 2 deletions examples/pytorch/test_adapter_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def test_run_swag_adapter(self):
--validation_file ./tests/fixtures/samples/swag/sample.json
--output_dir {tmp_dir}
--overwrite_output_dir
--max_steps=20
--max_steps=40
--warmup_steps=2
--do_train
--do_eval
Expand Down Expand Up @@ -364,6 +364,7 @@ def test_run_ner_adapter(self):
self.assertGreaterEqual(result["eval_precision"], 0.75)
self.assertLess(result["eval_loss"], 0.5)

@slow
def test_run_udp_adapter(self):
stream_handler = logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)
Expand All @@ -375,7 +376,6 @@ def test_run_udp_adapter(self):
--do_train
--do_eval
--task_name en_ewt
--use_mock_data
--evaluate_on train
--per_device_train_batch_size=2
--per_device_eval_batch_size=1
Expand Down
94 changes: 0 additions & 94 deletions examples/pytorch/test_xla_examples.py

This file was deleted.

Loading

0 comments on commit fdb4571

Please sign in to comment.