是否可以运行常规的python循环,这涉及GPU上的numpy?说,我有以下代码:
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
答案 0 :(得分:1)
简短回答:不,Python不能在GPU上运行。
更长的答案:我猜你不想使用GPU本身,你只是希望它运行得更快。一些想法:
for
循环来获得一些速度,转而支持numpy自己的矢量化。答案 1 :(得分:0)
您可以尝试numba,它专门用于在启用了cuda的gpu上运行以numpy为中心的程序。 github page上还有很多示例,供您更好地理解。
如果您具有启用了nvidia cuda的GPU,这里是一个快速how-to guide
希望这会有所帮助。