Skip to content

2026-08-20 Engineering Team #131

Closed
Closed

Description

@joecastiglione

Agenda

Activity

  1. janzill commented on Aug 23, 2026

    @janzill

    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

    • 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

    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.
    • Resolving #219 should unblock #217 Intermediate geographies.
    • 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.
    • Jan Zill (@janzill) will review #1103 Faster random numbers.
    • Amir Samimi (@amsamimi) will test #1101 Parquet skim support with a full-size skim set and add runtime observations to the pull request.
    • 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    meetingMeeting notes.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions