在GPU上运行python循环/numpy操作

在GPU上运行python循环/numpy操作,python,numpy,Python,Numpy,有可能在GPU上运行常规的python循环吗?比如,我有以下代码: 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('Voca

有可能在GPU上运行常规的python循环吗?比如,我有以下代码:

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

简短回答:不,Python不在GPU上运行

更长的回答:我猜你不想使用GPU本身,你只是想让它运行得更快。一些想法:

  • 通过避免
    for
    循环而支持numpy自己的矢量化,您可能可以获得一些速度
  • 试试pypy,它是标准Python interpeter的替代品,根据工作负载的不同,pypy的速度通常是标准Python interpeter的5-10倍
您可以试试,它专门针对在支持cuda的GPU上运行以numpy为中心的程序。为了更好地理解,还提供了许多示例

如果你有一个支持nvidia cuda的gpu,这里有一个快速的

希望这有帮助