Выполнение циклов python / numpy на графическом процессоре - PullRequest
0 голосов
/ 29 мая 2018

Можно ли запускать обычные циклы python, которые включают numpy на GPU?скажем, у меня есть следующий код:

def data_preprocess(data_dir, seq_length):
data = open(data_dir, 'r', encoding="utf8").read()
chars = sorted(list(set(data)))
VOCAB_SIZE = len(chars)

print('Data length: {} characters'.format(len(data)))
print('Vocabulary size: {} characters'.format(VOCAB_SIZE))

ix_to_char = {ix: char for ix, char in enumerate(chars)}
char_to_ix = {char: ix for ix, char in enumerate(chars)}

X = np.zeros((len(data) // seq_length, seq_length, VOCAB_SIZE))
y = np.zeros((len(data) // seq_length, seq_length, VOCAB_SIZE))
for i in range(0, len(data) // seq_length):
    X_sequence = data[i * seq_length:(i + 1) * seq_length]
    X_sequence_ix = [char_to_ix[value] for value in X_sequence]
    input_sequence = np.zeros((seq_length, VOCAB_SIZE))
    for j in range(seq_length):
        input_sequence[j][X_sequence_ix[j]] = 1.
        X[i] = input_sequence

    y_sequence = data[i * seq_length + 1:(i + 1) * seq_length + 1]
    y_sequence_ix = [char_to_ix[value] for value in y_sequence]
    target_sequence = np.zeros((seq_length, VOCAB_SIZE))
    for j in range(seq_length):
        target_sequence[j][y_sequence_ix[j]] = 1.
        y[i] = target_sequence
return X, y, VOCAB_SIZE, ix_to_char

Длина данных составляет 18863769

Размер словарного запаса составляет 394

seq_length составляет 30

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Вы можете попробовать numba , она специально предназначена для запуска numpy-центричных программ на gpus с поддержкой cuda.на странице github также есть много примеров для лучшего понимания.

если у вас есть gvu с поддержкой nvidia cuda, вот краткое руководство

надеюсь, это поможет.

0 голосов
/ 29 мая 2018

Краткий ответ: нет, Python не работает на графических процессорах.

Более длинный ответ: Я предполагаю, что вы не хотите использовать графический процессор как таковой, вы просто хотите, чтобы он работал быстрее.Некоторые идеи:

  • Возможно, вы сможете получить некоторую скорость, избегая петель for в пользу собственной векторизации numpy.
  • Попробуйте pypy, который является заменой для вставкистандартный интерпретатор Python, который часто работает в 5-10 раз быстрее, в зависимости от рабочей нагрузки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...