brave-yak-3559
10/09/2023, 8:33 PM@step
def load_data(self):
from datasets import load_dataset
with S3() as s3:
s3obj = s3.get(self.org_data)
dataset = load_dataset("csv",data_files=s3obj.path)
self.dataset = dataset
print(self.dataset)
self.next(self.eda)
@step
def eda(self):
print(self.dataset)
error:
File "flow.py", line 133, in pre_nightingale_eda
print(self.dataset)
File "/flow/metaflow/metaflow/flowspec.py", line 224, in __getattr__
x = self._datastore[name]
File "/flow/metaflow/metaflow/datastore/task_datastore.py", line 45, in method
return f(self, args, kwargs)
File "/flow/metaflow/metaflow/datastore/task_datastore.py", line 836, in __getitem__
_, obj = next(self.load_artifacts([name]))
File "/flow/metaflow/metaflow/datastore/task_datastore.py", line 370, in load_artifacts
yield name, pickle.loads(blob)
File "/usr/local/lib/python3.8/site-packages/datasets/table.py", line 1069, in __setstate__
table = _memory_mapped_arrow_table_from_file(path)
File "/usr/local/lib/python3.8/site-packages/datasets/table.py", line 65, in _memory_mapped_arrow_table_from_file
opened_stream = _memory_mapped_record_batch_reader_from_file(filename)
File "/usr/local/lib/python3.8/site-packages/datasets/table.py", line 50, in _memory_mapped_record_batch_reader_from_file
memory_mapped_stream = pa.memory_map(filename)
File "pyarrow/io.pxi", line 1009, in pyarrow.lib.memory_map
File "pyarrow/io.pxi", line 956, in pyarrow.lib.MemoryMappedFile._open
File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status
File "pyarrow/error.pxi", line 113, in pyarrow.lib.check_status
FileNotFoundError: [Errno 2] Failed to open local file '/root/.cache/huggingface/datasets/csv/default-42f4d214a7c91375/0.0.0/eea64c71ca8b46dd3f537ed218fc9bf495d5707789152eb2764f5c78fa66d59d/csv-train-00000-of-00009.arrow'. Detail: [errno 2] No such file or directorycrooked-jordan-29960
10/09/2023, 8:39 PMcrooked-jordan-29960
10/09/2023, 8:41 PMbrave-yak-3559
10/09/2023, 8:54 PMcrooked-jordan-29960
10/09/2023, 9:01 PMcrooked-jordan-29960
10/09/2023, 9:01 PMcrooked-jordan-29960
10/09/2023, 9:02 PMself. - the main point is that the serialization gets kinda slow for things as big as training datasetsbrave-yak-3559
10/09/2023, 10:36 PMbrave-yak-3559
10/10/2023, 5:50 PM@card(id="eda", type="blank")
@step
def load_data(self):
from datasets import load_dataset
def walk_directory(root):
path_keys = []
for path, subdirs, files in os.walk(root):
for name in files:
# create a tuple of (key, path)
path_keys.append((os.path.relpath(os.path.join(path, name), root),os.path.join(path, name)))
return path_keys
logger.info(f'loading data')
with S3() as s3:
s3obj = s3.get(self.org_data)
dataset = load_dataset("csv")
print(dataset.shape)
#saving dataset to s3
os.mkdir('/flow/hfdataset')
dataset.save_to_disk('/flow/hfdataset')
with S3(s3root='<s3://bucket/hfdataset>') as s3:
s3.put_files(walk_directory('/flow/hfdataset'))
batch_size = 60
num_batches = math.ceil(num_rows / batch_size)
self.batches = [(i*batch_size, min((i+1)*batch_size, num_rows)) for i in range(num_batches)]
self.next(self.hit_nightingale_model,foreach='batches')
@step
def hit_model(self):
from datasets import load_from_disk
import shutil
def download_model(s3_path, download_path='/root/dir/'):
final_path = s3_path
os.makedirs('/root/dir', exist_ok=True)
with S3(s3root=final_path) as s3:
for s3obj in s3.get_all():
print('s3 key --->', s3obj.key)
move_path = os.path.join(download_path, s3obj.key)
print('move path --->', move_path)
if not os.path.exists(os.path.dirname(move_path)):
os.makedirs(os.path.dirname(move_path), exist_ok=True)
shutil.move(s3obj.path, os.path.join(download_path, s3obj.key))
#print('dirpath ---->', (os.path.join(download_path, s3obj.key)))
dataset=load_from_disk('/root/dir/')
print(dataset)
return dataset
print('self.input --->', self.input)
indices = self.input
model = Model()
dataset = download_model('<s3://bucket/hfdataset>')
print(dataset)
dataset = dataset['train'].select(range(indices[0],indices[1]))
print(dataset)
def process_row(row):
result = model.run(report)
return result
self.result_dataset = dataset.map(process_row, num_proc=32,batch_size=50000)
self.next(self.join_results)
@step
def join_results(self,inputs):
for dataset in result_datasets:
print(datset)
print(dataset['train'][0])brave-yak-3559
10/10/2023, 5:51 PMbrave-yak-3559
10/10/2023, 5:52 PMcrooked-jordan-29960
10/10/2023, 5:56 PMcrooked-jordan-29960
10/10/2023, 5:58 PMbrave-yak-3559
10/10/2023, 6:04 PMcrooked-jordan-29960
10/10/2023, 6:06 PMbrave-yak-3559
10/10/2023, 6:07 PMYou are correct. it is possible to do this, but for a dataset any bigger than a few hundred MBscrooked-jordan-29960
10/10/2023, 6:08 PMbrave-yak-3559
10/10/2023, 6:09 PMcrooked-jordan-29960
10/10/2023, 6:22 PMbrave-yak-3559
10/10/2023, 6:23 PMbrave-yak-3559
10/11/2023, 4:33 PMcrooked-jordan-29960
10/11/2023, 4:34 PMbrave-yak-3559
10/11/2023, 4:36 PM