Files
zeekay 972cf0e972 fix: rename comfy_aimdo → hanzo_aimdo package directory
Rename Python package directory and update all imports/references.
2026-02-23 14:53:59 -08:00

49 lines
1.7 KiB
Python

import torch
import ctypes
import logging
from . import control
def get_tensor_from_raw_ptr(ptr, size, device):
container = {
"shape": (size,),
"typestr": "|u1",
"data": (ptr, False), #writable
"version": 3,
}
class Holder:
pass
holder = Holder()
holder.__cuda_array_interface__ = container
return torch.as_tensor(holder, device=device)
def aimdo_to_tensor(alloc, device):
_, ptr, size = alloc
return get_tensor_from_raw_ptr(ptr, size, device)
#pytorch doesnt have an API for a CUDAPluggableAllocator from an already loaded
#library. Rather than force a second load that pytorch owns, construct these
#pytorch internals outselves as sperate CDLL loads is far too risky.
class CUDAPluggableAllocator(torch.cuda.memory.CUDAPluggableAllocator):
def __init__(self):
alloc_fn = ctypes.cast(getattr(control.lib, "alloc_fn"), ctypes.c_void_p).value
free_fn = ctypes.cast(getattr(control.lib, "free_fn"), ctypes.c_void_p).value
assert alloc_fn is not None
assert free_fn is not None
self._allocator = torch._C._cuda_customAllocator(alloc_fn, free_fn)
def get_torch_allocator():
#As of this writing (pytorch 2.10), pytorch MemPools + CUDAPluggableAllocator
#considers the Mempool and pool usage context each as a hard reference to the
#tensors completely preventing reasonable garbage collection. A read of the code
#suggests that the assumptions of cudaGraphs completely prohibits pool cleanup
#on VRAM pressure which ultimately makes this un-usable for our high pressure
#allocator.
logging.warning(f"WARNING: Aimdo+CUDAPluggableAllocator is experimental and unsupported.")
return None if control.lib is None else CUDAPluggableAllocator()