Huggingface how to deal with large dataset?
common-crawl 과 같은 large dataset 으로 모델을 학습하려고 할 때, 큰 데이터를 좀 더 효율적으로 처리할 수 있는 방법이 없을까? 한번에 100M 정도가 되는 데이터를 처리하려고 하니 tokenizing 하는데만 하루가 넘게 걸린다.
해당 데이터를 사용하려고 할때마다 매번 tokenizing 해야 하면 학습 할 때마다 데이터 preprocessing 에만 하루를 쏟아야 하니, tokenize 한 상태의 데이터를 disk 에 저장해놓는 방법이 있다. dataset.save_to_disk("path/to/save/directory") 으로 tokenizing한 데이터를 저장해놓고, 다음부터 불러올 때에는 dataset = load_from_disk("path/to/save/directory") 으로 불러오는 방법으로 사용할 수 있다.
from datasets import load_dataset, load_from_disk
dataset = load_dataset(...)
dataset = dataset.map(..., num_proc=num_processes)
dataset.save_to_disk("path/to/save/directory")
# later
dataset = load_from_disk("path/to/save/directory")
더 효율적인 방법을 찾고 싶은데,
(1) 맨 처음에 tokenize 할 때에 걸리는 시간은 어쩔 수 없는걸까?
(2) dataset.save_to_disk(..) 으로 저장한 데이터의 크기가 꽤 큰데 이건 어쩔 수 없는걸까?
dataset = dataset.map(..., num_proc=num_processes) 에서 num_proc를 많이 사용하면 sharded data 를 저장할 때에 조금 더 빠르게 할 수 있다?
https://discuss.huggingface.co/t/support-of-very-large-dataset/6872