torch.cuda.gds 的源代码
导入
操作系统
导入
系统
来自
打字
导入
可调用,
可选
导入
火炬
来自
torch 的类型
导入
存储
__all__: 列表[str] = [
gds_register_buffer,
gds_deregister_buffer,
Gds 文件,
]
def _dummy_fn(名称: str) ->
可调用:
def 函数(*
参数, **kwargs):
# 类型:忽略[未指定类型定义]
抛出
运行时错误(f
"torch._C."{
名称}
此平台不支持)
返回 fn
如果
不
有属性(
PyTorch._C,
"_gds 注册缓冲区"):
断言
不
有属性(
PyTorch._C,
"_gds 注销缓冲区")
断言
不
有属性(
PyTorch._C,
"_gds 注册句柄")
断言
不
有属性(
PyTorch._C, "_gds_deregister_handle")
断言
不
有属性(
PyTorch._C, "_gds_load_storage")
断言
不
有属性(
PyTorch._C, "_gds_save_storage")
# 定义函数
PyTorch._C.
字典[
_gds 注册缓冲区] =
_dummy 函数(
_gds 注册缓冲区)
PyTorch._C.
字典[
_gds 注销缓冲区] = _dummy_fn(
_gds_deregister_buffer)
PyTorch._C.
字典[
_gds_register_handle] = _dummy_fn(
_gds 注册句柄)
PyTorch._C.
字典[
_gds 注销句柄] =
_dummy 函数(
_gds 注销句柄)
PyTorch._C.
字典[
_gds 加载存储] =
_dummy 函数(
_gds 加载存储)
PyTorch._C.
字典[
_gds 保存存储] = _dummy_fn("_gds_save_storage")
[文档]def gds_register_buffer(s: Storage) -> None:
"""在 CUDA 设备上注册存储为 cufile 缓冲区。
示例::
>>> # xdoctest: +SKIP("gds 文件系统要求")
>>> src = torch.randn(1024, device="cuda")
>>> s = src.untyped_storage()
>>> gds_register_buffer(s)
参数:
s (Storage): 要注册的缓冲区。
"""
torch._C._gds_register_buffer(s)
[文档]def gds_deregister_buffer(s: Storage) -> None:
“取消在 CUDA 设备上之前已注册的存储作为 cufile 缓冲区的注册。”
示例::
>>> # xdoctest: +SKIP("gds 文件系统要求")
>>> src = torch.randn(1024, device="cuda")
>>> s = src.untyped_storage()
>>> gds_register_buffer(s)
>>> gds_deregister_buffer(s)
参数:
s (存储): 要注册的缓冲区。
"""
torch._C._gds_deregister_buffer(s)
[文档]
类 GdsFile:
r"""Wrapper around cuFile.
cuFile 是一个类似于文件的接口,用于访问 GPUDirect Storage (GDS) API。
请参阅 `cufile 文档 `_
更多详情请查看。
参数:
文件名 (str):要打开的文件名。
标志 (int):打开文件时传递给 `os.open` 的标志。`os.O_DIRECT` 将
自动添加。
示例::
>>> # xdoctest: +SKIP("gds 文件系统要求")
>>> src1 = torch.randn(1024, device="cuda")
>>> src2 = torch.randn(2, 1024, device="cuda")
>>> file = torch.cuda.gds.GdsFile(f, os.O_CREAT | os.O_RDWR)
>>> 文件保存存储(src1.untyped_storage(), 偏移量=0)
>>> 文件保存存储(src2.untyped_storage(), 偏移量=src1.nbytes)
>>> dest1 = torch.empty(1024, 设备="cuda")
>>> dest2 = torch.empty(2, 1024, 设备="cuda")
>>> file.load_storage(dest1.untyped_storage(), offset=0)
>>> file.load_storage(dest2.untyped_storage(), offset=src1.nbytes)
>>> torch.equal(src1, dest1)
True
>>> torch.equal(src2, dest2)
True
"""
def __init__(self, 文件名: str,
标志: int):
如果
系统模块.
平台 ==
win32:
抛出
运行时错误(
"此平台不支持 GdsFile")
self.文件名 =
文件名
self.标志 =
标志
self.fd = os.打开(
文件名,
标志 | os.O_DIRECT)
# 类型:忽略[已定义]
self.处理:
可选[int] =
无
self.注册句柄()
def __del__(self) -> 无:
如果 self.handle
是
不
无:
self.解除注册句柄()
os.关闭(self.fd)
[文档] def 注册句柄(self) -> None:
"""注册文件描述符到 cuFile 驱动器。
这是围绕 ``cuFileHandleRegister`` 的包装器。
"""
assert (
self.handle 是 None
), "无法注册已注册的句柄。"
self.handle = torch._C._gds_register_handle(self.fd)
[文档] def deregister_handle(self) -> None:
"""注销文件描述符从 cuFile 驱动程序。
这是围绕`cuFileHandleDeregister`的包装。
"""
assert (
self.handle 不是 None
), "无法注销未注册的句柄。"
torch._C._gds_deregister_handle(self.handle)
self.handle = None
[文档] def load_storage(self, storage: Storage, offset: int = 0) -> None:
"""从文件中加载数据到存储。
这是一个关于 `cuFileRead` 的包装器。`storage.nbytes()` 的数据
将从文件在“偏移量”处加载到存储中。
参数:
存储(存储):用于加载数据的存储。
offset (int, 可选): 从文件中开始加载的偏移量。(默认:0)
"""
assert (
self.handle is not None
无法从未注册的文件加载数据。
torch._C._gds_load_storage(self.handle, storage, offset)
[文档] def save_storage(self, storage: Storage, offset: int = 0) -> None:
"将存储中的数据保存到文件中。"
这是一个围绕 `cuFileWrite` 的包装器。存储的所有字节
将被写入到位于 ``偏移量`` 的文件中。
参数:
存储(存储):用于保存数据的存储。
offset (int, 可选): 从文件中开始保存的偏移量。(默认:0)
"""
assert (
self.handle is not None
无法保存到未注册的文件。
torch._C._gds_save_storage(self.handle, storage, offset)