Skip to main content

AI Model Dynamic Offloader

This project is a pytorch VRAM allocator that implements on-demand offloading of model weights when the primary pytorch VRAM allocator comes under pressure.

Support:

  • Nvidia GPUs (CUDA) and AMD GPUs (ROCm/HIP)
  • PyTorch 2.8+
  • CUDA 12.8+ (Nvidia) / ROCm 7+ (AMD)
  • Windows 11+ / Linux as per python ManyLinux support

How it works:

  • The pytorch application creates a Virtual Base Address Register (VBAR) for a model. Creating a VBAR doesn't cost any VRAM, only GPU virtual address space (which is pretty much free).
  • The pytorch application allocates tensors for model weights within the VBAR. These tensors are initially un-allocated and will segfault if touched.
  • The pytorch application faults in the tensors using the fault() API at the time the tensor is needed. This is where VRAM actually gets allocated.
If the fault() is successful (sufficient VRAM for this tensor):
  1. If the fault() resultant signature is changed or unknown:
    • The application uses tensor::_copy() to populate the weight data on the GPU.
    • The application saves the returned signature against this weight for future comparison
  2. The layer uses the weight tensor.
  3. The application calls unpin() on the tensor to allow it to be freed under pressure later if needed.
If the fault() is unsuccessful (offloaded weight):
  1. The application allocates a temporary regular GPU tensor.
  2. Uses _copy to populate weight data on the GPU.
  3. The layer uses the temporary as the weight.
  4. Pytorch garbage collects the temp when the layer is finished.

see examples/example.py


Priorities:

  • The most recent VBARs are the highest priority and lower addresses in the VBAR take priority over higher addresses.
  • Applications should order their tensor allocations in the VBAR in load-priority order with the lowest addresses for the highest priority weights.
  • Calling fault() on a weight that is higher priority than other weights will cause those lower priority weights to get freed to make space.
  • Having a weight evicted sets that VBAR's watermark to that weight's level. Any weights in the same VBAR above the watermark automatically fail the fault() API. This avoids constantly faulting in all weights each model iteration while allowing the application to just blindly call fault() every layer and check the results. There is no need for the application to manage any VRAM quotas or watermarks.
  • Existing VBARs can be pushed to top priority with the prioritize() API. This allows use of an already loaded or partially model (e.g. using the same model twice in a complex workflow). Using prioritize resets the offload watermark of that model to no offloading, giving its weights priority over any other currently loaded models.

Backend:

  • VBAR allocation is done with cuMemAddressReserve(), faulting with cuMemCreate() and cuMemMap() and all frees done with appropriate converse APIs.
  • For consistency with VBAR memory management, main pytorch allocator plugin is also implemented with cuMemAddressReserve -> cuMemCreate -> cuMemMap. This also behaves a lot better on Windows systems with System Memory fallback.

On AMD, the equivalent HIP APIs (hipMemAddressReserve -> hipMemCreate -> hipMemMap, and their converse calls) are used throughout via the same flow.

Caveats:

  • There is no real way for this allocator to tell the difference between high usage and bad fragmentation in the pytorch caching allocator. As we always return success to the pytorch caching allocator it experiences no pressure while weights are being offloaded which means it can run in an extremely fragmented mode. The assumption is model weight access patterns are reasonably regular over blocks or iterations and it finds a good set of sizes to cache. What you should generally do though, is completely flush the pytorch caching allocator before each new model run, which avoids completely un-used reservations from taking priority over the next models weights.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

comfy_aimdo-0.5.1-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

comfy_aimdo-0.5.1-cp39-abi3-win_arm64.whl (248.1 kB view details)

Uploaded CPython 3.9+Windows ARM64

comfy_aimdo-0.5.1-cp39-abi3-win_amd64.whl (273.3 kB view details)

Uploaded CPython 3.9+Windows x86-64

comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (429.0 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (655.7 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

File details

Details for the file comfy_aimdo-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: comfy_aimdo-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for comfy_aimdo-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2936d0b627a91f17c3c13266c7fa253c5d53b99e4c522e2cbba81951f938f319
MD5 a998bb5fe52fbfb4a9390313cc5b22a9
BLAKE2b-256 ef71ee2113d3d882a4a4e861544cf30950d4250f9ef00e42842f8bf191ef0872

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_aimdo-0.5.1-py3-none-any.whl:

Publisher: build-wheels.yml on Comfy-Org/comfy-aimdo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file comfy_aimdo-0.5.1-cp39-abi3-win_arm64.whl.

File metadata

  • Download URL: comfy_aimdo-0.5.1-cp39-abi3-win_arm64.whl
  • Upload date:
  • Size: 248.1 kB
  • Tags: CPython 3.9+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for comfy_aimdo-0.5.1-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 b188caf662a0ebe4f7507d31c8f4cc5f9e3e4db38d92819aa33dcf6e990e97e5
MD5 b2b4624d74489b06ac68e7e51f2a6eff
BLAKE2b-256 91caefdc34fec74b97642d5bdf9bf25a4aefa8bf611c63728ebc5797835d487c

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_aimdo-0.5.1-cp39-abi3-win_arm64.whl:

Publisher: build-wheels.yml on Comfy-Org/comfy-aimdo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file comfy_aimdo-0.5.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: comfy_aimdo-0.5.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 273.3 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for comfy_aimdo-0.5.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1482cc6744a69836b5131f9afd61b4b339e54a445f1c2cf8069058526f3ef638
MD5 ac697b9cc4bba18497a7ac7ceee40f77
BLAKE2b-256 6ffff2c16ea984d7935fe89b3cbdccf4c5ba383967068ba64ef8361c7af0524f

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_aimdo-0.5.1-cp39-abi3-win_amd64.whl:

Publisher: build-wheels.yml on Comfy-Org/comfy-aimdo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c89bd44ad2e5e488aa872c33257e6a3d7b32a825b8dfa9d1194ba2dd8a6d2d47
MD5 4bb2fdb4fe877974f4f6e5d33611fb56
BLAKE2b-256 52699fd25cefba4a3ac0f94aa1be8f753a5283164001166a7178d0edd93df5a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl:

Publisher: build-wheels.yml on Comfy-Org/comfy-aimdo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 c9481723e4a9cebefb91f0cfc3be9f1d885f54e1792f72139afd6f06eae2a8cc
MD5 2edb15f320646d0c0b2cc2933d1be543
BLAKE2b-256 20f94f4139b0846521d1cb1b637df51104cac61352ee4d38b027fa660ffac773

See more details on using hashes here.

Provenance

The following attestation bundles were made for comfy_aimdo-0.5.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl:

Publisher: build-wheels.yml on Comfy-Org/comfy-aimdo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.3

5 files

0.5.2

5 files

This release

0.5.1 This release

5 files

0.5.0

5 files

0.4.15

5 files

0.4.14

5 files

0.4.13

5 files

0.4.12

5 files

0.4.11

5 files

0.4.10

5 files

0.4.9

5 files

0.4.8

5 files

0.4.7

5 files

0.4.6

5 files

0.4.5

5 files

0.4.4

5 files

0.4.3

5 files

0.4.2

5 files

0.4.1

5 files

0.4.0

5 files

0.3.0

5 files

0.2.14

3 files

0.2.12

3 files

0.2.11

3 files

0.2.10

3 files

0.2.9

3 files

0.2.8

3 files

0.2.7

3 files

0.2.6

3 files

0.2.5

3 files

0.2.4

3 files

0.2.3

3 files

0.2.2

3 files

0.2.1

3 files

0.2.0

3 files

0.1.8

3 files

0.1.7

3 files

0.1.6

3 files

0.1.5

3 files

0.1.4

3 files

0.1.3

3 files

0.1.2

11 files

0.1.1

11 files

0.1.0

11 files

0.0.214

3 files

0.0.213

3 files

0.0.4

11 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page