We run a python model on a 48GB memory VM(redhat 8.5), and it got killed when trying to add only 320 constraints, the process got killed when added 175 constraints only before we can solve the problem.
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=400 MiB, count=10, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:502: size=255 MiB, count=2783914, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:82: size=149 MiB, count=2783913, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
When started to add 320 constraints by loop, the memory increased very quickly:
[1st]
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=401 MiB, count=17466, average=23.5 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
[30th]
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=587 MiB, count=34978, average=17.2 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:911: size=186 MiB, count=8116110, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/xcounter.py:253: size=167 MiB, count=30, average=5703 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
[50th]
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=905 MiB, count=35018, average=26.5 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:911: size=509 MiB, count=22253850, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/xcounter.py:253: size=467 MiB, count=50, average=9566 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
[100th]
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=2345 MiB, count=35118, average=68.4 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:911: size=2017 MiB, count=88142700, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/xcounter.py:253: size=1867 MiB, count=100, average=18.7 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
[150th]
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:911: size=4524 MiB, count=197666550, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=4345 MiB, count=35218, average=126 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/xcounter.py:253: size=3867 MiB, count=150, average=25.8 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
Got killed by OS at 174th:
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:911: size=6082 MiB, count=265737150, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/linear.py:364: size=5942 MiB, count=35266, average=173 KiB
/usr/local/lib/python3.8/site-packages/docplex/mp/xcounter.py:253: size=5387 MiB, count=174, average=31.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:410: size=256 MiB, count=2792647, average=96 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:123: size=234 MiB, count=2792640, average=88 B
/usr/local/lib64/python3.8/site-packages/pandas/core/frame.py:3580: size=192 MiB, count=8377921, average=24 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:446: size=149 MiB, count=2792640, average=56 B
/usr/local/lib/python3.8/site-packages/docplex/mp/mfactory.py:428: size=80.0 MiB, count=2, average=40.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/utils.py:868: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1255: size=80.0 MiB, count=1, average=80.0 MiB
/usr/local/lib/python3.8/site-packages/docplex/mp/model.py:1197: size=80.0 MiB, count=1, average=80.0 MiB
for the above model, we defined a binary matrix decision var: 9017 * 320
and the constraints definition is like:
for intervalInx in range(self.numberIntervals):
total_risk = [
df_D.loc[asset_ID, intervalInx] * (1 - self.model.sum(
[self.assets_assignment_vars[asset_ID, index] for index in range(0, intervalInx+1)])) for
asset_ID in self.setOfAssets.keys()]
total_count = [(1 - self.model.sum(
[self.assets_assignment_vars[asset_ID, index] for index in range(0, intervalInx + 1)])) for asset_ID in
self.setOfAssets.keys()]
self.model.add_constraint(self.model.sum(total_risk) <= value * self.model.sum(total_count),
'risk' + str(intervalInx))
logger.info('Added risk constraints for interval:' + str(intervalInx))
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
print("[ Top 20 ]")
for stat in top_stats[:20]:
print(stat)
self.numberIntervals = 320
self.assets_assignment_vars : decision var Matrix with size 9017(assets number) * 320(intervals)
df_D is a constant number Matrix with the same size like decision var :assets_assignment_vars
self.setofAssets.keys : id of the assets (totol: 9017 assets)
Can anyone know why it occupied so many memory(48 GB) to add only 100+ constraits, is it caued by decision var too much. If so, is there any estimation for the memory consumption calcualtion to let user know how many memory will need considering the decision var and constraints complex(?).