GiB is reserved by PyTorch but unallocated

碰到错误

Of the allocated memory 12.53 GiB is allocated by PyTorch, and 1.22 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

解决策略

在PyTorch中,可以通过设置`max_split_size_mb`参数来控制内存分割的粒度,从而减少内存碎片化。以下是设置`max_split_size_mb`的几种方法:

1. 使用环境变量:

可以在代码运行之前设置`PYTORCH_CUDA_ALLOC_CONF`环境变量,以指定`max_split_size_mb`的值。例如,在Linux或macOS系统中,可以使用以下命令设置环境变量:

```shell
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:256
```

这将设置`max_split_size_mb`为256 MB。然后,启动PyTorch代码,它将使用设置的值。

2. 使用`torch.cuda.set_per_process_memory_fraction()`函数:

在PyTorch中,可以使用`torch.cuda.set_per_process_memory_fraction()`函数来设置`max_split_size_mb`的值。该函数需要在使用GPU之前调用,例如在创建模型和张量之前。以下是使用该函数设置`max_split_size_mb`的示例代码:

```python
import torch

torch.cuda.set_per_process_memory_fraction(0.5, max_split_size_mb=256)

# 创建模型和张量等GPU操作
```

在上述示例中,`max_split_size_mb`设置为256 MB。

3. 使用`torch.cuda.empty_cache()`函数:

在某些情况下,您可能希望手动清除GPU缓存来减少内存碎片化。使用`torch.cuda.empty_cache()`函数可以清除PyTorch的GPU缓存,使其重新分配内存。这可以在代码的适当位置调用,以便在需要释放内存时使用。例如:

```python
import torch

torch.cuda.empty_cache()
```

请注意,`max_split_size_mb`的最佳值取决于您的具体情况和系统配置。您可以根据实际需求进行调整,并监测内存使用情况以找到最佳值。

尝试使用第三种策略

你可能感兴趣的:(AI笔记,pytorch,人工智能,python)