次のコードを使用して NER モデルをトレーニングしています。
コードの開始:
def train_spacy(nlp, training_data, iterations):
if "ner" not in nlp.pipe_names:
ner = nlp.create_pipe('ner')
nlp.add_pipe("ner", last = True)
training_examples = []
faulty_dataset = []
for text, annotations in training_data:
doc = nlp.make_doc(text)
try:
training_examples.append(Example.from_dict(doc, annotations)) #creating examples for training as per spaCy v3.
except:
faulty_dataset.append([doc, annotations])
for ent in annotations['entities']:
ner.add_label(ent[2])
other_pipes = [pipe for pipe in nlp.pipe_names if pipe!= 'ner']
with nlp.disable_pipes(*other_pipes):
optimizer = nlp.begin_training()
for iter in range(iterations):
print('Starting iteration: ' + str(iter))
random.shuffle(training_examples)
losses = {}
batches = minibatch(training_examples, size=compounding(4.0, 32.0, 1.001))
for batch in batches:
nlp.update(
batch,
drop = 0.2,
sgd = optimizer,
losses = losses
)
print(losses)
for i in range(deviceCount): #to see how much GPU cores I am using:
handle = nvmlDeviceGetHandleByIndex(i)
util = nvmlDeviceGetUtilizationRates(handle)
print(util.gpu)
return nlp, faulty_dataset, training_examples
spacy.require_gpu() #this returns "True"
nlp = spacy.blank('en')
word_vectors = 'w2v_model.txt'
model_name = "nlp"
load_word_vectors(model_name, word_vectors) #I have some trained word vectors that I try to load them here.
test = train_spacy(nlp, training_data, 30) #training for 30 iterations
コードの終わり。
問題:
問題は、各反復に約 30 分かかることです。非常に長いテキストと 6 つのラベルを含む 8000 のトレーニング レコードがあります。
したがって、より多くの GPU コアを使用して削減したいと考えていましたが、使用されているコアは 1 つだけのようです。上記のコードで print(util.gpu) を実行すると、最初のコアだけがゼロ以外の値を返します。
質問 1: トレーニング プロセスを高速化するために、より多くの GPU コアを使用する方法はありますか? リードをいただければ幸いです。
さらに調査した結果、spacy-ray は並列トレーニングを可能にすることを目的としているようです。しかし、私が見つけたのは「python -m spacy ray train config.cfg --n-workers 2.
質問 2: Ray は GPU を使用した並列処理を有効にしますか? それは CPU コアのみですか?
質問 3: 「python -m spacy ray train config.cfg --n-workers 2」を使用するのではなく、nlp.update を使用して Python コードに Ray を統合するにはどうすればよいですか。?
ありがとうございました!
環境:
上記のコードはすべて、ml.p3.2xlarge EC2 インスタンスを使用する AWS Sagemaker 上の 1 つの conda_python3 ノートブックにあります。
使用したPython バージョン: 3
spaCy 使用したバージョン: 3.0.6