Вот код инициализации моей модели:
Код: Выделить всё
python
def instantiate_model(cfg: dict):
model_fp = cfg['model']['model_fp']
batch_size = cfg['model']['batch_size']
default_threshold = float(cfg['postprocessing']['threshold'])
# Clear any cached memory
torch.mps.empty_cache()
# Set device
if torch.backends.mps.is_available():
device = torch.device("mps")
print(f"MPS device found: {device}")
else:
device = torch.device("cpu")
print(f"MPS not available, using: {device}")
# Load model
model = AutoModelForTokenClassification.from_pretrained(
model_fp,
torch_dtype=torch.float32
)
model.eval()
model = model.to(device)
# Training arguments setup
args = TrainingArguments(
model_fp,
learning_rate=3e-5,
per_device_train_batch_size=batch_size,
per_device_eval_batch_size=batch_size,
weight_decay=0.01,
evaluation_strategy=IntervalStrategy.STEPS,
eval_steps=100,
max_steps=4000,
load_best_model_at_end=True,
metric_for_best_model='f1',
save_total_limit=5,
no_cuda=True,
use_mps_device=torch.backends.mps.is_available()
)
trainer = MultiLabelTrainer(model, args)
tokenizer = AutoTokenizer.from_pretrained(model_fp)
return {'trainer': trainer, 'tokenizer': tokenizer, 'default_threshold': default_threshold}
Сведения о среде:
macOS на Apple Silicon (M2)
Python 3.10
PyTorch с установленной поддержкой MPS
Последняя версия библиотеки трансформаторов
Что я пробовал:
Явно настраиваю устройство на
Подтверждение доступности MPS с помощью torch.backends.mps.is_available()
Перемещение модели на устройство с помощью model.to(device)
Установка use_mps_device=True в TrainingArguments
Как убедиться, что модель действительно работает на MPS, а не на ЦП?
- Явная настройка устройства на «mps»:
Код: Выделить всё
python device = torch.device("mps") model = model.to(device)
- Проверка доступности MPS:
Вывод показывает, что оба значения верны.
Код: Выделить всё
pythonCopyprint(f"Is MPS available? {torch.backends.mps.is_available()}") print(f"Is MPS built? {torch.backends.mps.is_built()}")
- Проверка устройства модели после его перемещения:Выходные данные показывают «mps»
Код: Выделить всё
pythonCopyprint(f"Model device: {next(model.parameters()).device}")
Установка use_mps_device=True в TrainingArguments
Ожидаемое поведение:
Модель должна использовать графический процессор Apple Silicon через MPS.
Загрузка ЦП должна быть ниже, поскольку вычисления перекладываются на графический процессор.
Обработка должна происходить значительно быстрее по сравнению с выполнением процессором.
Фактическое поведение:
Несмотря на обнаружение MPS и перемещение модели в Устройство MPS
Загрузка ЦП остается на 100 % во время выполнения модели
Скорость обработки такая же, как при выполнении только ЦП
Система перегружается из-за обработки процессора
Подробнее здесь: https://stackoverflow.com/questions/791 ... le-and-det