Модель Pytorch NLP не использует графический процессор при выводе

У меня есть модель НЛП, обученная на Pytorch, для запуска в Jetson Xavier. Я установил Jetson stats для отслеживания использования процессора и графического процессора. Когда я запускаю скрипт Python, под нагрузкой работают только ядра процессора, полоса графического процессора не увеличивается. Я искал в Google об этом с ключевыми словами Как проверить, использует ли pytorch графический процессор? и проверил результаты на stackoverflow.com и т. д. Согласно их советам кому-то другому, столкнувшемуся с подобной проблемой, cuda доступна, и в моем Jetson Xavier есть устройство cuda. Однако я не понимаю, почему полоса графического процессора не меняется, планки ядра процессора доходят до краев.

Я не хочу использовать центральный процессор, он требует много времени для вычислений. На мой взгляд, здесь используется процессор, а не графический процессор. Как я могу быть уверен, и если он использует CPU, как я могу изменить его на GPU?

Примечание. Модель взята из библиотеки huggingface transformers. Я пробовал использовать на модели метод cuda (). (model.cuda ()) В этом сценарии используется графический процессор, но я не могу получить вывод модели и вызывает исключение.

Вот код:

from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline
import torch

BERT_DIR = "savasy/bert-base-turkish-squad"    

tokenizer = AutoTokenizer.from_pretrained(BERT_DIR)
model = AutoModelForQuestionAnswering.from_pretrained(BERT_DIR)
nlp=pipeline("question-answering", model=model, tokenizer=tokenizer)


def infer(question,corpus):
    try:
        ans = nlp(question=question, context=corpus)
        return ans["answer"], ans["score"]
    except:
        ans = None
        pass

    return None, 0

person redrussianarmy    schedule 15.09.2020    source источник


Ответы (2)


Чтобы модель работала на GPU, данные и модель должны быть загружены в GPU:

вы можете сделать это следующим образом:

from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline
import torch

BERT_DIR = "savasy/bert-base-turkish-squad"  
  
device = torch.device("cuda")

tokenizer = AutoTokenizer.from_pretrained(BERT_DIR)
model = AutoModelForQuestionAnswering.from_pretrained(BERT_DIR)
model.to(device) ## model to GPU

nlp=pipeline("question-answering", model=model, tokenizer=tokenizer)


def infer(question,corpus):
    try:
        ans = nlp(question=question.to(device), context=corpus.to(device)) ## data to GPU
        return ans["answer"], ans["score"]
    except:
        ans = None
        pass

    return None, 0
person Ashwin Geet D'Sa    schedule 16.09.2020
comment
Спасибо за ваш ответ. Однако метод .to (device) проблему не решает. Это вызывает следующее исключение: ожидаемый объект типа устройства cuda, но получил процессор типа устройства для ›› аргумента № 3 'index' при вызове _th_index_select - person redrussianarmy; 18.09.2020
comment
Это потому, что одни из ваших данных все еще находятся на ЦП. - person Ashwin Geet D'Sa; 18.09.2020

Проблема решена с загрузкой конвейера, содержащего параметр устройства:

nlp = pipeline("question-answering", model=BERT_DIR, device=0)
person redrussianarmy    schedule 18.09.2020