簡體   English   中英

使用 GPU 在 Google Colab 上出現 Cupy memory 錯誤 - 但只是我第二次運行代碼

[英]Cupy memory error on Google Colab with GPU - but only the second time I run the code

我正在嘗試使用 Cupy 對兩個大型 arrays 進行矩陣乘法,因為它比使用 CPU 快得多(大約 100 倍)。 我的問題是我第一次運行它時它可以工作,但是第二次運行它給我一個 memory 錯誤。 這是循環中的一個步驟,所以這是一個問題,我不能每次都重新啟動運行時。

這是具有相同數組大小和數據類型的可重現代碼:

import cupy as cp
import datetime

cp.get_default_memory_pool().free_all_blocks()
cp.get_default_pinned_memory_pool().free_all_blocks()

x = cp.random.uniform(-1,1,size = (3000,300000))
w = cp.random.uniform(-1,1,size= (300000,1000))

start = datetime.now()
ans = cp.matmul(x,w)
stop = datetime.now()
print(stop-start)

這是我在同一運行時第二次運行它時遇到的錯誤:

---------------------------------------------------------------------------
OutOfMemoryError                          Traceback (most recent call last)
<ipython-input-5-43db33b58bc8> in <module>()
      2 cp.get_default_pinned_memory_pool().free_all_blocks()
      3 
----> 4 x = cp.random.uniform(-1,1,size = (3000,300000))
      5 w = cp.random.uniform(-1,1,size= (300000,1000))
      6 

4 frames
/usr/local/lib/python3.6/dist-packages/cupy/creation/basic.py in empty(shape, dtype, order)
     20 
     21     """
---> 22     return cupy.ndarray(shape, dtype, order=order)
     23 
     24 

cupy/core/core.pyx in cupy.core.core.ndarray.__init__()

cupy/cuda/memory.pyx in cupy.cuda.memory.alloc()

cupy/cuda/memory.pyx in cupy.cuda.memory.MemoryPool.malloc()

cupy/cuda/memory.pyx in cupy.cuda.memory.MemoryPool.malloc()

cupy/cuda/memory.pyx in cupy.cuda.memory.SingleDeviceMemoryPool.malloc()

cupy/cuda/memory.pyx in cupy.cuda.memory.SingleDeviceMemoryPool._malloc()

cupy/cuda/memory.pyx in cupy.cuda.memory._try_malloc()

OutOfMemoryError: Out of memory allocating 7,200,000,000 bytes (allocated so far: 9,624,000,000 bytes).

這可以解決嗎? 我正在嘗試清除前兩行中的 GPU memory 但不確定這是否正確。 也許使用 dask 數組可以代替? 但是,在仍然使用 GPU 來提高速度的同時可以做到這一點嗎?

是的,在這里使用 CuPy 支持的 Dask arrays 可能會很好。 您需要確保使用單線程調度程序( .compute(scheduler="single-threaded") 。假設您正在制作 arrays 以使 Dask 可以一次加載塊,那么 Dask 將可能能夠加載幾個塊,進行一些計算,丟棄中間體,然后加載其他塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM