Unverified Commit 8fcbe486 authored by Stas Bekman's avatar Stas Bekman Committed by GitHub
Browse files

these tests require non-multigpu env (#7059)

* these tests require non-multigpu env

* cleanup

* clarify
parent 77950c48
...@@ -122,6 +122,20 @@ def require_multigpu(test_case): ...@@ -122,6 +122,20 @@ def require_multigpu(test_case):
return test_case return test_case
def require_non_multigpu(test_case):
"""
Decorator marking a test that requires 0 or 1 GPU setup (in PyTorch).
"""
if not _torch_available:
return unittest.skip("test requires PyTorch")(test_case)
import torch
if torch.cuda.device_count() > 1:
return unittest.skip("test requires 0 or 1 GPU")(test_case)
return test_case
def require_torch_tpu(test_case): def require_torch_tpu(test_case):
""" """
Decorator marking a test that requires a TPU (in PyTorch). Decorator marking a test that requires a TPU (in PyTorch).
......
...@@ -4,7 +4,7 @@ import datasets ...@@ -4,7 +4,7 @@ import datasets
import numpy as np import numpy as np
from transformers import AutoTokenizer, TrainingArguments, is_torch_available from transformers import AutoTokenizer, TrainingArguments, is_torch_available
from transformers.testing_utils import get_tests_dir, require_torch from transformers.testing_utils import get_tests_dir, require_non_multigpu, require_torch
if is_torch_available(): if is_torch_available():
...@@ -111,6 +111,7 @@ class TrainerIntegrationTest(unittest.TestCase): ...@@ -111,6 +111,7 @@ class TrainerIntegrationTest(unittest.TestCase):
self.n_epochs = args.num_train_epochs self.n_epochs = args.num_train_epochs
self.batch_size = args.per_device_train_batch_size self.batch_size = args.per_device_train_batch_size
@require_non_multigpu
def test_reproducible_training(self): def test_reproducible_training(self):
# Checks that training worked, model trained and seed made a reproducible training. # Checks that training worked, model trained and seed made a reproducible training.
trainer = get_regression_trainer(learning_rate=0.1) trainer = get_regression_trainer(learning_rate=0.1)
...@@ -122,6 +123,7 @@ class TrainerIntegrationTest(unittest.TestCase): ...@@ -122,6 +123,7 @@ class TrainerIntegrationTest(unittest.TestCase):
trainer.train() trainer.train()
self.check_trained_model(trainer.model, alternate_seed=True) self.check_trained_model(trainer.model, alternate_seed=True)
@require_non_multigpu
def test_number_of_steps_in_training(self): def test_number_of_steps_in_training(self):
# Regular training has n_epochs * len(train_dl) steps # Regular training has n_epochs * len(train_dl) steps
trainer = get_regression_trainer(learning_rate=0.1) trainer = get_regression_trainer(learning_rate=0.1)
...@@ -138,6 +140,7 @@ class TrainerIntegrationTest(unittest.TestCase): ...@@ -138,6 +140,7 @@ class TrainerIntegrationTest(unittest.TestCase):
train_output = trainer.train() train_output = trainer.train()
self.assertEqual(train_output.global_step, 10) self.assertEqual(train_output.global_step, 10)
@require_non_multigpu
def test_train_and_eval_dataloaders(self): def test_train_and_eval_dataloaders(self):
trainer = get_regression_trainer(learning_rate=0.1, per_device_train_batch_size=16) trainer = get_regression_trainer(learning_rate=0.1, per_device_train_batch_size=16)
self.assertEqual(trainer.get_train_dataloader().batch_size, 16) self.assertEqual(trainer.get_train_dataloader().batch_size, 16)
...@@ -200,6 +203,7 @@ class TrainerIntegrationTest(unittest.TestCase): ...@@ -200,6 +203,7 @@ class TrainerIntegrationTest(unittest.TestCase):
x = trainer.eval_dataset.x x = trainer.eval_dataset.x
self.assertTrue(np.allclose(preds, 1.5 * x + 2.5)) self.assertTrue(np.allclose(preds, 1.5 * x + 2.5))
@require_non_multigpu
def test_trainer_with_datasets(self): def test_trainer_with_datasets(self):
np.random.seed(42) np.random.seed(42)
x = np.random.normal(size=(64,)).astype(np.float32) x = np.random.normal(size=(64,)).astype(np.float32)
...@@ -228,6 +232,7 @@ class TrainerIntegrationTest(unittest.TestCase): ...@@ -228,6 +232,7 @@ class TrainerIntegrationTest(unittest.TestCase):
trainer.train() trainer.train()
self.check_trained_model(trainer.model) self.check_trained_model(trainer.model)
@require_non_multigpu
def test_custom_optimizer(self): def test_custom_optimizer(self):
train_dataset = RegressionDataset() train_dataset = RegressionDataset()
args = TrainingArguments("./regression") args = TrainingArguments("./regression")
...@@ -241,6 +246,7 @@ class TrainerIntegrationTest(unittest.TestCase): ...@@ -241,6 +246,7 @@ class TrainerIntegrationTest(unittest.TestCase):
self.assertTrue(torch.abs(trainer.model.b - 2.5656) < 1e-4) self.assertTrue(torch.abs(trainer.model.b - 2.5656) < 1e-4)
self.assertEqual(trainer.optimizer.state_dict()["param_groups"][0]["lr"], 1.0) self.assertEqual(trainer.optimizer.state_dict()["param_groups"][0]["lr"], 1.0)
@require_non_multigpu
def test_model_init(self): def test_model_init(self):
train_dataset = RegressionDataset() train_dataset = RegressionDataset()
args = TrainingArguments("./regression", learning_rate=0.1) args = TrainingArguments("./regression", learning_rate=0.1)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment