201201 'is_bf16_supported' ,
202202 'manual_seed' ,
203203 'reset_peak_memory_stats' ,
204+ 'ipc_collect' ,
205+ 'get_stream_from_external' ,
204206]
205207
206208_cudnn_version = None
@@ -972,9 +974,9 @@ def get_device_capability(
972974 .. code-block:: python
973975
974976 >>> # doctest: +REQUIRES(env:CUSTOM_DEVICE)
975- >>> # import paddle
976- >>> # cap = paddle.device.get_device_capability()
977- >>> # print(cap)
977+ >>> import paddle
978+ >>> cap = paddle.device.get_device_capability()
979+ >>> print(cap)
978980 """
979981 prop = get_device_properties (device )
980982 return prop .major , prop .minor
@@ -1817,6 +1819,25 @@ def synchronize(device: PlaceLike | None = None) -> None:
18171819 )
18181820
18191821
1822+ def ipc_collect () -> None :
1823+ """
1824+ Force collects GPU memory after it has been released by CUDA IPC.
1825+ This function checks if any sent CUDA tensors could be cleaned from the memory.
1826+ Force closes shared memory file used for reference counting if there is no active counters.
1827+ Useful when the producer process stopped actively sending tensors and want to release unused memory.
1828+ Returns:
1829+ None
1830+ Examples:
1831+ .. code-block:: python
1832+
1833+ >>> # doctest: +REQUIRES(env:GPU)
1834+ >>> import paddle
1835+ >>> # Force collect expired IPC memory
1836+ >>> paddle.device.ipc_collect() #this is equivalent to paddle.cuda.ipc_collect()
1837+ """
1838+ paddle .base .libpaddle ._ipc_collect ()
1839+
1840+
18201841def get_stream_from_external (
18211842 data_ptr : int , device : PlaceLike | None = None
18221843) -> Stream :
@@ -1847,7 +1868,7 @@ def get_stream_from_external(
18471868
18481869 >>> import paddle
18491870 >>> # Suppose external_stream_ptr is from another CUDA library
1850- >>> s = paddle.device.get_stream_from_external(external_stream_ptr, "gpu:0")
1871+ >>> # s = paddle.device.get_stream_from_external(external_stream_ptr, "gpu:0")
18511872 '''
18521873 if device is None :
18531874 place = paddle .framework ._current_expected_place_ ()
@@ -1953,6 +1974,7 @@ def range_push(msg: str):
19531974 msg (str): The name of the NVTX range.
19541975 Example:
19551976 .. code-block:: python
1977+
19561978 >>> # doctest: +REQUIRES(env:GPU)
19571979 >>> import paddle
19581980 >>> # paddle.device.nvtx.range_push("test") is equivalent to paddle.cuda.nvtx.range_push("test")
@@ -1967,6 +1989,7 @@ def range_pop():
19671989 Pop the most recent NVTX range marker.
19681990 Example:
19691991 .. code-block:: python
1992+
19701993 >>> # doctest: +REQUIRES(env:GPU)
19711994 >>> import paddle
19721995 >>> # paddle.device.nvtx.range_pop("test") is equivalent to paddle.cuda.nvtx.range_pop("test")
@@ -1984,6 +2007,7 @@ def reset_peak_memory_stats(device: PlaceLike | int | None = None) -> None:
19842007
19852008 Example:
19862009 .. code-block:: python
2010+
19872011 >>> # doctest: +REQUIRES(env:GPU)
19882012 >>> import paddle
19892013 >>> paddle.device.set_device('gpu') # or '<custom_device>'
0 commit comments