Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MemoryError: Unable to allocate 8.45 GiB for an array with shape (300, 300, 12600) and data type float64 #25

Open
geokefe opened this issue Sep 2, 2024 · 3 comments

Comments

@geokefe
Copy link

geokefe commented Sep 2, 2024

I'm trying to create velocity model of small size; I keep getting Memory error, even after reducing the model size significantly. Any suggestion about how to resolve this would be greatly appreciated. Here is the error message:


MemoryError Traceback (most recent call last)
Cell In[13], line 69
67 # Initialize and build the complex velocity model
68 velocity_model = ComplexVelocityModel(config)
---> 69 model_data = velocity_model.build_model()
71 # Plot the velocity model
72 velocity_model.plot_velocity_model()

Cell In[13], line 18, in ComplexVelocityModel.build_model(self)
15 os.makedirs(self.cfg['model_folder'], exist_ok=True)
16 os.makedirs(self.cfg['temp_folder'], exist_ok=True)
---> 18 self.model = mn.build_model(user_json=self.cfg['config_file'], run_id=self.cfg['run_id'])
20 return self.model

File ~\Desktop\seis\high_resolution_ML\synthoseis-master\main.py:31, in build_model(user_json, run_id, test_mode, rpm_factors)
29 # Build un-faulted geological models
30 geo_models = Geomodel(p, depth_maps, onlap_list, facies)
---> 31 geo_models.build_unfaulted_geomodels()
33 # Build Faults
34 f = Faults(p, depth_maps, onlap_list, geo_models, fan_list, fan_thicknesses)

File ~\Desktop\seis\high_resolution_ML\synthoseis-master\datagenerator\Geomodels.py:111, in Geomodel.build_unfaulted_geomodels(self)
86 def build_unfaulted_geomodels(self):
87 """
88 Build unfaulted geomodels.
89 --------------------------
(...)
109 None
110 """
--> 111 self.geologic_age[:] = self.create_geologic_age_3d_from_infilled_horizons(
112 self.depth_maps
113 )
114 self.onlap_segments[:] = self.insert_onlap_surfaces()

File ~\Desktop\seis\high_resolution_ML\synthoseis-master\datagenerator\Geomodels.py:196, in Geomodel.create_geologic_age_3d_from_infilled_horizons(self, depth_maps, verbose)
194 # create geologic age cube
195 age_range = np.linspace(0.0, float(cube_shape[2] - 1), cube_shape[2])
--> 196 age = np.zeros(cube_shape, "float")
197 for i in range(cube_shape[0]):
198 for j in range(cube_shape[1]):

MemoryError: Unable to allocate 8.45 GiB for an array with shape (300, 300, 12600) and data type float64

@gavargas22
Copy link
Collaborator

gavargas22 commented Sep 2, 2024

It looks like there is not enough memory in your machine, ultimately we need to convert the whole system to use zarr and so it would not use RAM memory.

An ongoing effort is here #12. In the meantime, we could try to reduce the bitsize of the numpy arrays to float16. It looks like we have float64 by default. Let me have a look to see how we might be able to change that.

Essentially, we need to set the dtype whenever there is a numpy array being defined np.array(list, dtype="float32")

If you have access to any other machine with larger RAM capacity, that would also resolve the issue for now.

@geokefe
Copy link
Author

geokefe commented Sep 2, 2024

Correct me if I'm wrong, I think the reduction of bit size should be done from the source code, not in the application. Please keep me posted as the development progresses. Thanks.

@gavargas22
Copy link
Collaborator

That's correct @geokefe we can look into doing that. In the meantime, I would say reduce the size of the output volume so that it can fit in your memory

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants