Код: Выделить всё
import zarr
import numpy as np
store = zarr.storage.LocalStore('mydata.zarr')
zarr_data = zarr.create_array(
store=self.store,
name='data',
shape=(40000, 100),
chunks=(1000, 100),
dtype='f4')
zarr_data[:] = np.random.randn(10000, 100)
Код: Выделить всё
store = zarr.storage.LocalStore('mydata.zarr')
root = zarr.open(store=self.store, mode='r')
for i in range(root['data'].shape[0]):
batch = root['data'][i]
< /code>
Мой вопрос: если бы я запустил этот код, будет ли весь набор данных в конечном итоге загружен в память? И если так, есть ли способ избежать этого? В моем приложении полный массив Zarr будет слишком большим, чтобы вписаться в память. Я думаю, что идеальным решением будет способ выпустить ранее читаемые куски из памяти, когда они больше не нужны. Есть ли способ сделать это? Как вы можете видеть, массив Zarr содержит 16 МБ данных, но кажется, что использование памяти процесса увеличивается только примерно на ~ 2 МБ в ходе итерации над массивом Zarr. Вот код и визуализация использования памяти: < /p>
Code I запустил: < /p>
def current_memory():
process = psutil.Process(os.getpid())
memory_usage = process.memory_info().rss
memory_usage_mb = memory_usage / (1024 ** 2)
return memory_usage_mb
init_mem = current_memory()
mem_measurements = []
store = zarr.storage.LocalStore('./memtest.zarr')
root = zarr.open(store=store, mode='r')
print(root['data'].info)
batch_size=10
for i in range(0, root['data'].shape[0] - batch_size, batch_size):
batch = root['data'][i:i+batch_size]
mem_measurements.append(current_memory() - init_mem)
Type : Array
Zarr format : 3
Data type : DataType.float32
Shape : (40000, 100)
Chunk shape : (1000, 100)
Order : C
Read-only : False
Store type : LocalStore
Filters : ()
Serializer : BytesCodec(endian=)
Compressors : (ZstdCodec(level=0, checksum=False),)
No. bytes : 16000000 (15.3M)
< /code>
Измеренное использование памяти:
использование памяти по пакетам < /p>
Закрытие мыслей < /h1>
Это похоже на Зарр не загружает весь массив в память, когда итерация над ним. Следующий вопрос; почему это? Zarr кэширует что -нибудь или держит куски в памяти?
Подробнее здесь: https://stackoverflow.com/questions/793 ... nto-memory