Как на самом деле работает разделение данных в Multi GPU Inference for Accelerate при использовании в настройках пакетноPython

Программы на Python
Anonymous
Как на самом деле работает разделение данных в Multi GPU Inference for Accelerate при использовании в настройках пакетно

Сообщение Anonymous »

Я следовал коду, приведенному в этом выпуске 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

Вернуться в «Python»