Я следовал коду, приведенному в этом выпуске GitHub и в этом среднем блоге.
Я провел пакетный эксперимент с процессами = 1 и Process=4, которые он дал. мне результат, но сейчас я в замешательстве, потому что думал, что результат будет в порядке. Если они не в порядке, я не смогу сопоставить их с основной Истиной.
Например, предположим, что мой data_length=5 и мой пакет=3< /код>. Итак, если я получил результаты [[1,2,3], [4,5]] для процесса = 1, то я ожидаю, что при использовании процесса = 4 я должен получить те же результаты, когда я выравниваю результаты.
они выходят из строя. Что я делаю не так?
ПРИМЕЧАНИЕ. Я использовал zip(text,label) при передаче данных процессам, чтобы получить правильное сопоставление, НО это вопрос не в этом
Ниже приведен код:
def seed_everything(seed=13):
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
set_seed(seed)
torch.backends.cudnn.deterministic = True
seed_everything(seed = 13)
def test():
accelerator = Accelerator()
accelerator.wait_for_everyone()
seed_everything(seed = 13)
model = load_model(model = "my_model_path"
lora = "./my_lora_checkpoint/checkpoint-8200",
device = {"": accelerator.process_index},
num_labels = NUM_LABELS,
merge_unload = False)
with accelerator.split_between_processes(zipped_text_label) as prompts:
res = {"pred_probs": [], "pred_labels": []}
BATCH_SIZE = 10
BATCHES = [prompts[i:i + BATCH_SIZE] for i in range(0, len(prompts), BATCH_SIZE)]
print(len(BATCHES[0]))
pred_probs = []
pred_labels = []
for batch in tqdm(BATCHES):
text_batch = [i[0] for i in batch]
score_batch = [i[1] for i in batch]
with torch.no_grad():
inputs = tokenizer(text_batch,truncation= True, max_length=MAX_LENGTH, padding="max_length", return_tensors = "pt").to(model.device)
logits = model(**inputs).logits.cpu().to(torch.float32)
probs = torch.softmax(logits, dim = 1).numpy()
res["pred_probs"].append(probs.tolist())
res["pred_labels"].append(probs.argmax(axis = 1).tolist())
res = [res]
result = gather_object(res)
if accelerator.is_main_process:
print(result)
notebook_launcher(test, num_processes=1)
Подробнее здесь: https://stackoverflow.com/questions/789 ... accelerate