You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The team continued the Phase 11 pull-request review, with most discussion focused on running ActivitySim under memory constraints. A new external contribution proposed making the legacy adaptive chunking budget responsive to a container's runtime memory limit and use. This prompted a broader discussion of whether adaptive chunking should be improved or deprecated in favour of explicit chunking. No decision was reached; the team will revisit the question after clarifying the contribution’s use case and gathering information about current agency use.
Other important updates concerned production readiness and reproducibility. Parquet skim reading passed initial smoke tests but still needs full-scale performance validation. PopulationSim dependency work appears to have resolved longstanding cross-platform non-determinism, subject to a full-size comparison. A separate PopulationSim issue showed that configured hard limits on household weights were not being enforced.
Meeting Notes
Automatic and Adaptive Chunking
The contributor closed the earlier #1104 after receiving review feedback and replaced it with #1106. The replacement had been opened only hours before the meeting and had not yet received a detailed review.
#1106 proposes calculating the byte budget used by ActivitySim's legacy adaptive chunking from the container's cgroup memory limit, current use and worker count. Its stated use case is running the same large model configuration under limited and potentially varying container allocations without manually resetting a global byte budget. This is runtime memory-aware chunk sizing, not distributed computing across servers or a native Kubernetes integration.
The meeting did not establish whether this portability requirement could instead be met with explicit row-count chunking, conservative settings for the smallest resource allocation or deployment-specific settings overlays. That comparison was identified as a key question for review.
Amir reported that Transport for NSW found adaptive chunking difficult to configure and could not transfer its settings reliably between machines. Explicit chunking took one to two days to establish and can now be adjusted within seconds for machines with 128 GB or 256 GB of RAM; runtime was not particularly sensitive to chunk size.
Joe Castiglione agreed that adaptive chunking has not been robust, but argued that the consortium should not generalise from one implementation or invest substantial budget without broader demand.
Bo clarified that TransLink's workplace-location model exceeded 100 GB at a full sample of approximately 3 million people and 1.1–1.2 million households before chunking reached the utility-calculation stage, likely during preprocessing joins or sample/simulate work. The chat subsequently confirmed that this occurred in a single-process run. Because adaptive and explicit chunking take effect at the same later stage, neither mode directly addresses TransLink's bottleneck.
No decision was made on whether to improve or deprecate adaptive chunking. The team proposed resolving that question explicitly after reviewing actual agency use and the problem addressed by #1106.
Parquet Skim Support
Amir smoke-tested #1101 with approximately 10–20 skims and confirmed that it ran without crashing in both sharrow and non-sharrow modes. The test did not represent a full set of approximately 500 skims.
Full-scale testing is still required to compare runtime with OMX and document how the Parquet files were generated. Reported file-size savings of approximately 30% depend on the generation method.
Parquet can be more convenient for analyses that load matrices into memory, while OMX can retrieve individual values without loading an entire matrix. The team supported retaining both formats.
The current pull request can be treated as the initial reading implementation. Performance validation and user guidance on creating Parquet files should be completed as follow-up work, with a second agency tester or a consultant if necessary.
ActivitySim Pull-Request Updates
#1036 Unused-skim loading had received further work from David and was awaiting Jeff's review of the remaining file-handle question.
#1062 Summarise memory cleanup still needs a test demonstrating the memory saving. Sijia and Jeff were discussing ownership offline.
#1083 Shadow-pricing segmentation centralises segmentation settings so users do not need to duplicate them in separate YAML files. SANDAG has confirmed the resulting differences, but unit tests are still required.
#1085 Stable school-escorting sort was merged. Stable tiebreakers such as person ID now prevent different row ordering from producing different school-escorting outcomes with identical inputs.
The #1078 performance-test subarea dataset had been shared with Jeff, but decisions on storage, quality assurance and benchmark metrics remained pending.
PopulationSim Reproducibility
#219 NumPy/OR-Tools update expanded beyond dependency updates after Nick traced differences between Linux and Windows results. Test outputs are now identical across operating systems.
The previous differences could amount to approximately one household per zone and were difficult to detect because repeated runs on the same operating system were stable. A full-size side-by-side comparison is still wanted before completion.
The team briefly discussed deleted GitHub accounts and supply-chain risk. Existing review practices were considered proportionate for the small, specialised project.
PopulationSim Household-Weight Constraints
#221 reported that hard constraints were not limiting household weights as configured. An initial weight of 51 and a maximum expansion factor of 50 implied a maximum of 2,550, but the observed maximum was approximately 54,000. The 99th percentile was 372, so the extreme values were rare but materially affected validation sensitivity.
During the meeting Amir confirmed that an absolute upper bound of 20,000 was also configured, yet some weights exceeded it. Nick therefore agreed that the behaviour indicates a defect rather than a missing configuration value.
A leading hypothesis is that the hard-constraint flag, which defaults to false, may be lost while YAML settings are read in a multiprocessing run. A debugger check and unit test should localise the problem and prevent silent failure.
Action Items
Jan Zill (@janzill) will coordinate with Jeff Newman (@jpn--) regarding #1106 and clarify the contributor's underlying use case before the next engineering meeting.
Joe Castiglione (@joecastiglione) will determine whether another agency can test the Parquet implementation or whether consultant support should be assigned from the discretionary budget.
Sijia Wang (@i-am-sijia) will continue coordinating with Jeff Newman (@jpn--) on the outstanding tests for #1062 and #1083.
Joe Flood (@JoeJimFlood) will circulate #1086 to the consortium after internal review.
Nick Fournier (@nick-fournier) will seek a full-size model comparison for #219 before finalising the pull request.
Amir Samimi (@amsamimi) and Nick Fournier (@nick-fournier) will arrange a working session to reproduce and localise the hard-constraint failure in #221.
Joe Castiglione (@joecastiglione) will carry the telecommute-frequency sensitivity results to the following Tuesday's meeting with MWCOG and RSG represented.
Activity
janzill commentedon Aug 23, 2026
ActivitySim Engineering Team Meeting Notes — August 20, 2026
Meeting Overview
Participants
Duration
60 minutes
Executive Summary
The team continued the Phase 11 pull-request review, with most discussion focused on running ActivitySim under memory constraints. A new external contribution proposed making the legacy adaptive chunking budget responsive to a container's runtime memory limit and use. This prompted a broader discussion of whether adaptive chunking should be improved or deprecated in favour of explicit chunking. No decision was reached; the team will revisit the question after clarifying the contribution’s use case and gathering information about current agency use.
Other important updates concerned production readiness and reproducibility. Parquet skim reading passed initial smoke tests but still needs full-scale performance validation. PopulationSim dependency work appears to have resolved longstanding cross-platform non-determinism, subject to a full-size comparison. A separate PopulationSim issue showed that configured hard limits on household weights were not being enforced.
Meeting Notes
Automatic and Adaptive Chunking
Parquet Skim Support
ActivitySim Pull-Request Updates
PopulationSim Reproducibility
PopulationSim Household-Weight Constraints
Action Items