오뚝이개발자

GPU 최적화, GPU 사용률 늘리는 방법 본문

AI/AI 개발

GPU 최적화, GPU 사용률 늘리는 방법

땅어 2022. 7. 3. 13:17
728x90
300x250

 

GPU를 사용해 모델 학습을 돌리다보면 GPU의 사용률이 저조하게 나오는 경우가 있다. 이런 경우 충분한 자원이 있더라도 학습에 오랜 시간이 걸리게 된다. 이 때 필요한 것이 GPU 사용률을 최적화시키는 것이다. 방법은 많지만 그 중 가장 대표적인 방법을 소개하고자 한다. GPU 사용률이 저조한 이유는 대부분 CPU단에서 데이터 처리가 GPU에서의 처리 속도를 따라가지 못해 발생한다. 즉, GPU에서 처리할 데이터가 CPU에서 아직 프로세싱을 거쳐서 준비가 다 되지 않은 경우이다.

 

num_workers 설정해주기


pytorch와 huggingface의 transformers엔 모두 num_workers라는 파라미터를 설정해줄 수 있다. 이는 학습 도중 CPU의 작업에 몇 개의 코어를 사용할지를 결정하는 변수이다. huggingface의 transformers에선 dataloader_num_workers 파라미터값을 설정해주면 된다.

아래 코드는 transformers 패키지를 사용해 training arguments와 trainer를 선언하는 부분이다. 여기서 args에 dataloader_num_workers=4라고 넘겨주었는데 이는 코어 4개를 사용해 CPU 작업을 처리하겠다는 뜻이다. 이처럼 num_workers를 늘려줌으로 GPU가 처리하는 속도에 조금 더 맞추어 빠르게 CPU에서 데이터를 준비할 수 있어 GPU 사용률을 늘릴 수 있다.

args = Seq2SeqTrainingArguments(
    output_dir = "saved_model",
    overwrite_output_dir = True,
    evaluation_strategy = "epoch",
    save_strategy = "epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=batch_size,
    per_device_eval_batch_size=batch_size,
    gradient_accumulation_steps=2,
    weight_decay=0.01,
    num_train_epochs=epochs,
    predict_with_generate=True,
    fp16=False,
    dataloader_num_workers=4
)
trainer = Seq2SeqTrainer(
    model,
    args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["validation"],
    data_collator=data_collator,
    tokenizer=tokenizer,
    compute_metrics=compute_metrics
)

 

Reference


- https://chaelin0722.github.io/etc/gpu_utility/

- https://huggingface.co/docs/transformers/main_classes/trainer

728x90
300x250
Comments