| | import argparse |
| |
|
| | import torch |
| |
|
| |
|
| | def display_vram_usage(): |
| | """Displays the total, allocated, and free VRAM on the current CUDA device.""" |
| |
|
| | assert torch.cuda.is_available(), "CUDA is not available" |
| | device = torch.device("cuda") |
| |
|
| | total_vram = torch.cuda.get_device_properties(device).total_memory |
| | allocated_vram = torch.cuda.memory_allocated(device) |
| | free_vram = total_vram - allocated_vram |
| |
|
| | print(f"Total VRAM: {total_vram / (1024 * 1024 * 1024):.2f} GB") |
| | print(f"Allocated VRAM: {allocated_vram / (1024 * 1024 * 1024):.2f} GB") |
| | print(f"Free VRAM: {free_vram / (1024 * 1024 * 1024):.2f} GB") |
| |
|
| |
|
| | def allocate_vram(target_gb: float, target_free: bool = False): |
| | """Allocates VRAM on the current CUDA device. After allocation, the script will pause until the user presses Enter |
| | or ends the script, at which point the VRAM will be released. |
| | |
| | Args: |
| | target_gb (float): Amount of VRAM to allocate in GB. |
| | target_free (bool, optional): Instead of allocating <target_gb> VRAM, enough VRAM will be allocated so the system has <target_gb> of VRAM free. For example, if <target_gb> is 2 GB, the script will allocate VRAM until the free VRAM is 2 GB. |
| | """ |
| | assert torch.cuda.is_available(), "CUDA is not available" |
| | device = torch.device("cuda") |
| |
|
| | if target_free: |
| | total_vram = torch.cuda.get_device_properties(device).total_memory |
| | free_vram = total_vram - torch.cuda.memory_allocated(device) |
| | target_free_bytes = target_gb * 1024 * 1024 * 1024 |
| | bytes_to_allocate = free_vram - target_free_bytes |
| |
|
| | if bytes_to_allocate <= 0: |
| | print(f"Already at or below the target free VRAM of {target_gb} GB") |
| | return |
| | else: |
| | bytes_to_allocate = target_gb * 1024 * 1024 * 1024 |
| |
|
| | |
| | _tensor = torch.empty(int(bytes_to_allocate / 4), dtype=torch.float, device="cuda") |
| |
|
| | display_vram_usage() |
| |
|
| | input("Press Enter to release VRAM allocation and exit...") |
| |
|
| |
|
| | if __name__ == "__main__": |
| | parser = argparse.ArgumentParser(description="Allocate VRAM for testing purposes. Only works on CUDA devices.") |
| | parser.add_argument("target_gb", type=float, help="Amount of VRAM to allocate in GB.") |
| | parser.add_argument( |
| | "--target-free", |
| | action="store_true", |
| | help="Instead of allocating <target_gb> VRAM, enough VRAM will be allocated so the system has <target_gb> of VRAM free. For example, if <target_gb> is 2 GB, the script will allocate VRAM until the free VRAM is 2 GB.", |
| | ) |
| |
|
| | args = parser.parse_args() |
| |
|
| | allocate_vram(target_gb=args.target_gb, target_free=args.target_free) |
| |
|